2017-03-10 1 views
0

WebRTCビデオは、デフォルトでフロントカメラを使用しています。しかし、私はそれをバックカメラに切り替える必要があり、私はそれを行うためのコードを見つけることができませんでした。 どの部分を編集する必要がありますか? localViewまたはlocalVideoTrackまたはキャプチャのですか?iOS SWIFT - WebRTCをフロントカメラからバックカメラに変更する

+0

を確認することができますいくつかの時間でそれを更新する目的は以下のankitさんのコメントのために答えるcは持っているあなたはのWebRTCライブラリまたはopenwebrtcを使用していますとしょうかん ? –

+0

@ DuraiAmuthan.H libjingle_peerconnectionポッドを使用しています – mrnobody

+1

AVCaptureSessionから既存のAVCameraInputを削除してから、AVCaptureSessionに新しいAVCameraInputを追加してください。AVCaptureDevicePositionBack –

答えて

1

webrtcにはどのchromeバージョンを使用しているのですか?v54以上では、RTCAVFoundationVideoSourceクラスに "useBackCamera"という名前の "bool"プロパティがあります。このプロパティを使用して、フロント/バックカメラを切り替えることができます。

+0

ヘッダーファイル:https://cs.chromium.org/chromium/src/third_party/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h?rcl=c0a0f8d5f2d5b837b4c6ea447b0cdce86723e0d6&l=46 –

0

スウィフト3.0

ピア接続は、ビデオストリームを送信するための 'RTCVideoTrack' 一つだけを持つことができます。

まず、カメラの前面/背面を変更するには、ピア接続で現在のビデオトラックを削除する必要があります。 その後、必要なカメラに新しい「RTCVideoTrack」を作成し、これをピア接続用に設定します。

この方法を使用しました。

func swapCameraToFront() { 
    let localStream: RTCMediaStream? = peerConnection?.localStreams.first as? RTCMediaStream 
    localStream?.removeVideoTrack(localStream?.videoTracks.first as! RTCVideoTrack) 
    let localVideoTrack: RTCVideoTrack? = createLocalVideoTrack() 
    if localVideoTrack != nil { 
     localStream?.addVideoTrack(localVideoTrack) 
     delegate?.appClient(self, didReceiveLocalVideoTrack: localVideoTrack!) 
    } 
    peerConnection?.remove(localStream) 
    peerConnection?.add(localStream) 
} 

func swapCameraToBack() { 
    let localStream: RTCMediaStream? = peerConnection?.localStreams.first as? RTCMediaStream 
    localStream?.removeVideoTrack(localStream?.videoTracks.first as! RTCVideoTrack) 
    let localVideoTrack: RTCVideoTrack? = createLocalVideoTrackBackCamera() 
    if localVideoTrack != nil { 
     localStream?.addVideoTrack(localVideoTrack) 
     delegate?.appClient(self, didReceiveLocalVideoTrack: localVideoTrack!) 
    } 
    peerConnection?.remove(localStream) 
    peerConnection?.add(localStream) 
} 
+0

これは質問に答えるかもしれませんが、答えの本質的な部分を説明する方がいいでしょうし、おそらくOPコードの問題は何だったのでしょうか。 – pirho

+0

バックカメラでビデオトラックを生成する方法を追加できますか? 'createLocalVideoTrackBackCamera'メソッドの実装。 – Ankit

0

現在、私はコードのみを変換して、もう一度あなたは以下のコード

-(RTCVideoTrack *)createLocalVideoTrack { 

     RTCVideoTrack *localVideoTrack = nil; NSString *cameraID = nil; 
    for (AVCaptureDevice *captureDevice in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) 
    { 
    if (captureDevice.position == AVCaptureDevicePositionFront) { 
    cameraID = [captureDevice localizedName]; break; 
    } 
    } 

     RTCVideoCapturer *capturer = [RTCVideoCapturer capturerWithDeviceName:cameraID]; RTCMediaConstraints *mediaConstraints = [self defaultMediaStreamConstraints]; RTCVideoSource *videoSource = [_factory videoSourceWithCapturer:capturer constraints:mediaConstraints]; localVideoTrack = [_factory videoTrackWithID:@"ARDAMSv0" source:videoSource]; 

     return localVideoTrack; } 

     - (RTCVideoTrack *)createLocalVideoTrackBackCamera { 
      RTCVideoTrack *localVideoTrack = nil; 

      //AVCaptureDevicePositionFront 
      NSString *cameraID = nil; 
      for (AVCaptureDevice *captureDevice in 
       [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) { 
       if (captureDevice.position == AVCaptureDevicePositionBack) { 
        cameraID = [captureDevice localizedName]; 
        break; 
       } 
      } 


      RTCVideoCapturer *capturer = [RTCVideoCapturer capturerWithDeviceName:cameraID]; 
      RTCMediaConstraints *mediaConstraints = [self defaultMediaStreamConstraints]; 
      RTCVideoSource *videoSource = [_factory videoSourceWithCapturer:capturer constraints:mediaConstraints]; 
      localVideoTrack = [_factory videoTrackWithID:@"ARDAMSv0" source:videoSource]; 

      return localVideoTrack; 
     } 
+0

この回答には重大なフォーマット上の問題があります。あなたの答えを編集してフォーマットしてください。さもなければ私はそれを不幸にしなければなりません。 –

+0

ok再度更新します –

関連する問題