WebRTC Native Code package for Android(つまりWebViewを使用しない)を使用してAndroidアプリ内で3方向ビデオチャットを実装しようとしています。私はnode.jsを使ってシグナリングサーバを作成し、クライアントアプリケーション内のGottox socket.io java clientライブラリを使ってサーバに接続し、SDPパケットを交換し、双方向ビデオチャット接続を確立しました。Android用のWebRTCネイティブコードで3者間会議通話ビデオチャットを実装する方法は?
しかし、今ではそれを超えて3方向通話に問題があります。 WebRTCネイティブコードパッケージに付属しているAppRTCDemoアプリは、双方向通話のみを実演しています(第三者が部屋に入ろうとした場合、「部屋いっぱい」のメッセージが返されます)。
this answer(特にAndroidには関係しない)によると、私は複数のPeerConnectionを作成することになっているので、各チャット参加者は2人の他の参加者に接続します。
しかし、複数のPeerConnectionClient(PeerConectionをラップするJavaクラス(libjingle_peerconnection_so.soのネイティブ側で実装されているJavaクラス)を作成すると、両方と競合してライブラリ内から例外がスローされますカメラにアクセスしようとする彼らの:でもそれはのNode.js、socket.ioまたはシグナリング・サーバーのもののいずれにも関係していないので、接続を確立しようとする前に、ローカルクライアントを初期化するとき
E/VideoCapturerAndroid(21170): startCapture failed
E/VideoCapturerAndroid(21170): java.lang.RuntimeException: Fail to connect to camera service
E/VideoCapturerAndroid(21170): at android.hardware.Camera.native_setup(Native Method)
E/VideoCapturerAndroid(21170): at android.hardware.Camera.<init>(Camera.java:548)
E/VideoCapturerAndroid(21170): at android.hardware.Camera.open(Camera.java:389)
E/VideoCapturerAndroid(21170): at org.webrtc.VideoCapturerAndroid.startCaptureOnCameraThread(VideoCapturerAndroid.java:528)
E/VideoCapturerAndroid(21170): at org.webrtc.VideoCapturerAndroid.access$11(VideoCapturerAndroid.java:520)
E/VideoCapturerAndroid(21170): at org.webrtc.VideoCapturerAndroid$6.run(VideoCapturerAndroid.java:514)
E/VideoCapturerAndroid(21170): at android.os.Handler.handleCallback(Handler.java:733)
E/VideoCapturerAndroid(21170): at android.os.Handler.dispatchMessage(Handler.java:95)
E/VideoCapturerAndroid(21170): at android.os.Looper.loop(Looper.java:136)
E/VideoCapturerAndroid(21170): at org.webrtc.VideoCapturerAndroid$CameraThread.run(VideoCapturerAndroid.java:484)
これが起こります。
同じビデオを複数のピアに送信できるように、カメラを共有する複数のPeerConnectionsを取得するにはどうすればよいですか?
複数の接続間で共有できるVideoCapturerAndroidを置き換えるために、ある種のシングルトンカメラクラスを実装するというアイデアはありましたが、それがうまくいくかどうかはわかりません。ライブラリーの内部をハッキングする前にAPIを使用して3方向の呼び出しを行います。
それは可能でしょうか?
更新:
Iは、複数PeerConnectionClients間VideoCapturerAndroidオブジェクトを共有するだけ最初の接続のためにそれを作成し、それに続くものに初期化関数にそれを通過しようとしたが、それは、この「捕獲をもたらしたのみ缶一度服用してください! "第2のピア接続のVideoCapturerオブジェクトから第VideoTrackを作成するときに例外が:
E/libjingle(19884): Local fingerprint does not match identity.
E/libjingle(19884): P2PTransportChannel::Connect: The ice_ufrag_ and the ice_pwd_ are not set.
E/libjingle(19884): Local fingerprint does not match identity.
E/libjingle(19884): Failed to set local offer sdp: Failed to push down transport description: Local fingerprint does not match identity.
MediaStreamの共有:PeerConnectionClients間VideoTrackオブジェクトを共有しようと
E/AndroidRuntime(18956): FATAL EXCEPTION: Thread-1397
E/AndroidRuntime(18956): java.lang.RuntimeException: Capturer can only be taken once!
E/AndroidRuntime(18956): at org.webrtc.VideoCapturer.takeNativeVideoCapturer(VideoCapturer.java:52)
E/AndroidRuntime(18956): at org.webrtc.PeerConnectionFactory.createVideoSource(PeerConnectionFactory.java:113)
E/AndroidRuntime(18956): at com.example.rtcapp.PeerConnectionClient.createVideoTrack(PeerConnectionClient.java:720)
E/AndroidRuntime(18956): at com.example.rtcapp.PeerConnectionClient.createPeerConnectionInternal(PeerConnectionClient.java:482)
E/AndroidRuntime(18956): at com.example.rtcapp.PeerConnectionClient.access$20(PeerConnectionClient.java:433)
E/AndroidRuntime(18956): at com.example.rtcapp.PeerConnectionClient$2.run(PeerConnectionClient.java:280)
E/AndroidRuntime(18956): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime(18956): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(18956): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(18956): at com.example.rtcapp.LooperExecutor.run(LooperExecutor.java:56)
は、ネイティブコードから、このエラーが生じましたPeerConnectionClientsの間でアプリケーションが突然終了し、Logcatにエラーメッセージが表示されなくなります。
"3-wayビデオ"とは何ですか? – SilentKnight
@ SilentKnight 3つのパートを持つビデオ会議電話 – samgak
@Samgakこんにちは。完全なソリューションを共有できますか?私はいくつかのオーディオを接続するのに問題がありました。 – GensaGames