如何在原生webrtc中使用约束?

时间:2014-08-26 12:03:58

标签: ios objective-c ios7 webrtc

我终于拥有一个可以与其他对等方建立连接的应用,并且两个对等方都可以从远程接收音频和视频。它是使用原生iOS RTC的{​​{1}}应用。我现在正在尝试我可以做些什么来提高质量,所以我开始寻找媒体限制的选项。

这是我的初始化代码:

API

我尝试设置以下RTCPairs:

首先我尝试了这些,只是为了看看它会做什么。

//init
peerConnectionFactory = [[RTCPeerConnectionFactory alloc] init];
[RTCPeerConnectionFactory initializeSSL];

//set 2 arrays to be used for the media constraints
NSMutableArray *m = [[NSMutableArray alloc] init];
NSMutableArray *o = [[NSMutableArray alloc] init];

//add stuff to the mandatory array
[m addObject:[[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" value:@"true"]];
[m addObject:[[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" value:@"true"]];

//add stuff to the optional array
//these lines are disabled for now, because my colleague working on the Android version does not support dtls yet
//[o addObject:[[RTCPair alloc] initWithKey:@"internalSctpDataChannels" value:@"true"]];
//[o addObject:[[RTCPair alloc] initWithKey:@"DtlsSrtpKeyAgreement" value:@"true"]];

//use the 2 arrays to init the media constraints
constraints = [[RTCMediaConstraints alloc] initWithMandatoryConstraints:m optionalConstraints:o];

//init stun and turn servers
RTCICEServer *turn = [[RTCICEServer alloc] initWithURI:[NSURL URLWithString:@"turn:numb.viagenie.ca:3478"] username:@"*" password:@"*"];
RTCICEServer *stun = [[RTCICEServer alloc] initWithURI:[NSURL URLWithString:@"stun:stun.l.google.com:19302"] username:@"" password:@""];
NSArray *iceServers = [[NSArray alloc] initWithObjects:turn, stun, nil];

//init the peerconnection object
peerConnection = [peerConnectionFactory peerConnectionWithICEServers:nil
                                                         constraints:constraints
                                                            delegate:self];

它没有做任何事 然后我尝试了这些行(没有前面的2行)。

[o addObject:[[RTCPair alloc] initWithKey:@"minWidth" value:@"1280"]];
[o addObject:[[RTCPair alloc] initWithKey:@"minHeight" value:@"720"]];

这导致应用程序卡在生成冰候选者 我认为设备可能不支持如此高分辨率,我尝试了以下内容。

[m addObject:[[RTCPair alloc] initWithKey:@"minWidth" value:@"1280"]];
[m addObject:[[RTCPair alloc] initWithKey:@"minHeight" value:@"720"]];

再没有效果。

我尝试了一些我无法记住的组合,但对我来说,似乎在强制数组中添加除[o addObject:[[RTCPair alloc] initWithKey:@"maxWidth" value:@"320"]]; [o addObject:[[RTCPair alloc] initWithKey:@"maxHeight" value:@"180"]]; OfferToReceiveAudio之外的任何内容只会打破整个过程并向其中添加任何内容。可选的数组被忽略(尽管设置OfferToReceiveVideo的东西使得无法连接到dtls版本。)

1 个答案:

答案 0 :(得分:5)

我正在为peerconnection初始化设置约束,但必须为videosource设置它们。创建本地媒体流时,您必须指定摄像头,使用该摄像头初始化捕获器,然后设置视频源以使用该捕获器。设置该视频源时,您可以传递约束。