1.前言。
andorid视频传输用协议比较好,可以省去了上层开发。视频传输用rtsp比较好,因为它是双向的。下面对这两种传输协议进行下研究。
2.两种协议对比
RTP(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输协议。RTP被定义为在一对一或一对多的传输情况下工作。其目的是提供时间信息和实现流同步。但RTP通常使用UDP来传送数据。但RTP也可以在TCP或ATM等其他协议之上工作。当应用程序开始一个RTP会话时将使用两个端口:一个给RTP一个给 RTCP。RTP本身并不能为接顺序传送数据包提供可靠的传送机制。也不提供流量控制或拥塞控制。它依靠RTCP提供这些服务。通常RTP算法并不作为一个独立的网络层来实现。而是作为应用程序代码的一部分。实时传送控制协议RTCP.RTCP(Real-time Transport Control Protocol)和RTP提供流量控制和拥塞控制。在RTP会话期间,各参与者周期性地传送RTCP包.RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料.因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化。因而特别适合传送网上的实时数据。RTSP实时流协议
RTSP(Real-time Streaming Protocol)是由Real Networks和Netscape共同中提出的。该协议定义了一对多应用程序如何有效地通过lP网络传送多媒体数据。RTSP在体系结 构上位于RTP和RTCP之上。它使用TCP或RTP完成数据传输。HTTP与RTSP相比。HTTP传送HTML。而RTP传送是多媒体数据。HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。
3.总结。
(1)RTP协议通常是UDP,而RTSP则是html用http,视频用udp.
(2)RTP是单向的,而RTsp是双向的。
PackageInfo packageinfo = showpackage.get(position); final String packageName = packageinfo.packageName;//获得包名,启动activity的一个参数,position一般指的是listview和gridview中的适配器中的一个参数 final ActivityInfo appinfo=packageinfo.activities[0];//获得应用的第一个activity String activityName=appinfo.name;//activityName启动activity的第二个参数 Intent intent=new Intent(); intent.setComponent(new ComponentName(packageName, activityName)); startActivity(intent);
- (id)fetchSSIDInfo
{
NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();
NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
id info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) {
break;
}
}
return info ;
}
用socket添加 两个文件 AsyncUdpSocket.h 和 AsyncUdpSocket.m
SystemControm.framework CFNetwork.framework
#import "ViewController.h"
#import <SystemConfiguration/CaptiveNetwork.h>
@interfaceViewController ()
@property(nonatomic,strong) AsyncUdpSocket *socket;
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.socket = [[AsyncUdpSocketalloc] initWithDelegate:self];
NSError *error = nil;
[self.socket bindToPort:3000 error:&error];
[self.socketenableBroadcast:YESerror:&error];
[self.socketjoinMulticastGroup:@"239.255.255.250"error:&error];
if (error) {
NSLog(@"error: %@",error);
}
[self.socketreceiveWithTimeout:-1tag:1];
NSLog(@"start udp server");
NSDictionary *ifs = [self fetchSSIDInfo]; //获取sid信息。
NSString *ssid = [[ifs objectForKey:@"SSID"] lowercaseString];
NSLog(@"ssid:%@",ssid);
_wifiName.text = [NSString stringWithFormat:@"Wifi name:\n%@",ssid];
}
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{
NSString *receiveData = [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"received data: %@",receiveData);
_data.text = [NSString stringWithFormat:@"Received data:\n%@",receiveData];
[self.socket receiveWithTimeout:-1 tag:1];
returnYES;
}
- (id)fetchSSIDInfo
{
NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();
NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
id info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) {
break;
}
}
return info ;
}