Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android原生webrtc:在已连接后添加视频_Android_Video_Native_Webrtc - Fatal编程技术网

Android原生webrtc:在已连接后添加视频

Android原生webrtc:在已连接后添加视频,android,video,native,webrtc,Android,Video,Native,Webrtc,我已经在我的Android应用程序中成功运行WebRTC一段时间了,使用了谷歌代码库中的libjingle.so和PeerConnectionClient.java等。但是,我现在遇到了一个问题,即用户仅以音频方式启动连接(即音频呼叫),但随后切换视频。我扩充了PeerConnectionClient中现有的setVideoEnabled(),如下所示: public void setVideoEnabled(final boolean enable) { executor.execute(n

我已经在我的Android应用程序中成功运行WebRTC一段时间了,使用了谷歌代码库中的libjingle.so和PeerConnectionClient.java等。但是,我现在遇到了一个问题,即用户仅以音频方式启动连接(即音频呼叫),但随后切换视频。我扩充了PeerConnectionClient中现有的setVideoEnabled(),如下所示:

 public void setVideoEnabled(final boolean enable) {
executor.execute(new Runnable() {
  @Override
  public void run() {
    renderVideo = enable;
    if (localVideoTrack != null) {
      localVideoTrack.setEnabled(renderVideo);
    } else {
      if (renderVideo) {
          //AC: create a video track
          String cameraDeviceName = VideoCapturerAndroid.getDeviceName(0);
          String frontCameraDeviceName =
                  VideoCapturerAndroid.getNameOfFrontFacingDevice();
          if (numberOfCameras > 1 && frontCameraDeviceName != null) {
              cameraDeviceName = frontCameraDeviceName;
          }
          Log.i(TAG, "Opening camera: " + cameraDeviceName);
          videoCapturer = VideoCapturerAndroid.create(cameraDeviceName);
          if (createVideoTrack(videoCapturer) != null) {                
              mediaStream.addTrack(localVideoTrack);
              localVideoTrack.setEnabled(renderVideo);
              peerConnection.addStream(mediaStream);
          } else {
              Log.d(TAG, "Local video track is still null");
          }
      } else {
        Log.d(TAG, "Local video track is null");
      }
    }
    if (remoteVideoTrack != null) {
      remoteVideoTrack.setEnabled(renderVideo);
    } else {
      Log.d(TAG,"Remote video track is null");
    }
  }
});
}


这使我能够成功地看到设备摄像机的本地插页,但它不会将视频发送到删除客户端。我原以为peerConnection.addStream()调用可以做到这一点,但也许我遗漏了其他东西?

为了避免在对等点之间建立外部通信机制,该机制将涉及第二个对等点的答案,即可以添加新的流,您可以始终从现有(但有时是空的)视频流开始。现在只需在必要时(如果需要)用内容填充此流。

请参阅。TL;NR:您需要一个外部对等方之间的通信机制,该机制将涉及来自第二个对等方的答案,该答案可以添加新的流。另一种方法是从现有(但为空)视频流开始。现在,在必要的时候(如果需要的话)用内容填充这个流会更容易。是的,我想你的第二个选择就是我要做的。由于我们的外部通信机制存在问题,这种策略在过去的尝试中不起作用,但现在已经解决了这个问题,空视频解决方案可以工作,并且比尝试重新协商连接要简单得多。谢谢@synthcat您有可用的示例代码吗?我正试图在连接过程中添加跟踪。你能把你的答案贴出来吗?那真的很有帮助。你能发布任何参考资料或代码以便对我们有所帮助吗?@VijayE,对不起,我现在手头没有这样的代码。也许TS还有样品。