「通話」が発信されたら、以下のコードを使用してローカル ビデオ ストリームを作成しています。私の iPhone 6 のローカル メディア ストリームは生成されませんが、リモート メディア ストリームは私の電話で完全に機能しています。iPhone のローカル メディア ストリームを取得できない理由を知っている人はいますか?
node.jsでKurento Media Serverを使用しています。
- (RTCMediaStream *)createLocalMediaStream {
RTCMediaConstraints *constraints = [self defaultPeerConnectionConstraints];
self.peerConnection = [self.peerConnectionFactory peerConnectionWithICEServers:server
constraints:constraints
delegate:self];
RTCMediaStream *localStream = [self createLocalMediaStream];
[self.peerConnection addStream:localStream];
[_peerConnection createOfferWithDelegate:self constraints:[self defaultOfferConstraints]];
RTCMediaStream* localStream = [self.peerConnectionFactory mediaStreamWithLabel:@"ARDAMS"];
RTCVideoTrack* localVideoTrack = nil;
#if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE
NSString *cameraID = nil;
for (AVCaptureDevice *captureDevice in
[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
if (captureDevice.position == AVCaptureDevicePositionFront) {
cameraID = [captureDevice localizedName];
break;
}
}
NSAssert(cameraID, @"Unable to get the front camera id");
RTCVideoCapturer *capturer = [RTCVideoCapturer capturerWithDeviceName:cameraID];
RTCMediaConstraints* constraints = [self defaultMediaStreamConstraints];
RTCVideoSource *videoSource = [self.peerConnectionFactory videoSourceWithCapturer:capturer constraints:constraints];
localVideoTrack =
[self.peerConnectionFactory videoTrackWithID:@"ARDAMSv0" source:videoSource];
if (localVideoTrack) {
[localStream addVideoTrack:localVideoTrack];
}
[self.delegate connectionManager:self didReceiveLocalVideoTrack:localVideoTrack];
#endif
[localStream addAudioTrack:[self.peerConnectionFactory audioTrackWithID:@"ARDAMSa0"]];
return localStream;
}
- (RTCMediaConstraints *)defaultPeerConnectionConstraints {
NSArray *optionalConstraints = @[
[[RTCPair alloc] initWithKey:@"DtlsSrtpKeyAgreement" value:@"true"]
];
RTCMediaConstraints* constraints =
[[RTCMediaConstraints alloc] initWithMandatoryConstraints:nil optionalConstraints:optionalConstraints];
return constraints;
}
- (RTCMediaConstraints *)defaultOfferConstraints {
NSArray *mandatoryConstraints = @[
[[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" value:@"true"],
[[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" value:@"true"]
];
RTCMediaConstraints* constraints = [[RTCMediaConstraints alloc] initWithMandatoryConstraints:mandatoryConstraints optionalConstraints:nil];
return constraints;
}
- (RTCMediaConstraints *)defaultMediaStreamConstraints {
NSArray *mandatoryConstraints = @[
[[RTCPair alloc] initWithKey:@"maxWidth" value:@"640"],
[[RTCPair alloc] initWithKey:@"minWidth" value:@"640"],
[[RTCPair alloc] initWithKey:@"maxHeight" value:@"480"],
[[RTCPair alloc] initWithKey:@"minHeight" value:@"480"],
[[RTCPair alloc] initWithKey:@"maxFrameRate" value:@"30"],
[[RTCPair alloc] initWithKey:@"minFrameRate" value:@"5"],
[[RTCPair alloc] initWithKey:@"googLeakyBucket" value:@"true"]
];
RTCMediaConstraints *constrains = [[RTCMediaConstraints alloc] initWithMandatoryConstraints:mandatoryConstraints optionalConstraints:nil];
return constrains;
}