使用WebRTC进行Android屏幕共享

时间:2014-11-19 09:47:38

标签: android webrtc

我听说过使用WebRTC在桌面上进行屏幕共享。但对于Android来说,似乎没有太多信息。

我的问题是:

  1. 是否可以在Android上使用WebRTC进行屏幕共享?我的意思是我可以将当​​前屏幕投射到另一部手机的屏幕上。
  2. 如果1为是,我该如何实现?
  3. 感谢。

2 个答案:

答案 0 :(得分:0)

  1. 有可能!
  2. 可以按照以下说明进行操作。

我已经将ScreenShareRTC与ProjectRTC结合使用,以将屏幕内容以合理的质量和相当低的延迟(〜100ms)传输到浏览器。

我在下面添加了一个示例,该示例演示如何将屏幕共享配置为视频源并将其添加为流中的轨道。

获取VideoCapturer

@TargetApi(21)
private VideoCapturer createScreenCapturer() {
    if (mMediaProjectionPermissionResultCode != Activity.RESULT_OK) {
        report("User didn't give permission to capture the screen.");
        return null;
    }
    return new ScreenCapturerAndroid(
            mMediaProjectionPermissionResultData, new MediaProjection.Callback() {
        @Override
        public void onStop() {
            report("User revoked permission to capture the screen.");
        }
    });
}

初始化捕获器并将曲目添加到本地媒体流中

private void initScreenCapturStream() {
    mLocalMediaStream = factory.createLocalMediaStream("ARDAMS");
    MediaConstraints videoConstraints = new MediaConstraints();
    videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxHeight", Integer.toString(mPeerConnParams.videoHeight)));
    videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxWidth", Integer.toString(mPeerConnParams.videoWidth)));
    videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxFrameRate", Integer.toString(mPeerConnParams.videoFps)));
    videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("minFrameRate", Integer.toString(mPeerConnParams.videoFps)));

    mVideoSource = factory.createVideoSource(videoCapturer);
    videoCapturer.startCapture(mPeerConnParams.videoWidth, mPeerConnParams.videoHeight, mPeerConnParams.videoFps);
    VideoTrack localVideoTrack = factory.createVideoTrack(VIDEO_TRACK_ID, mVideoSource);
    localVideoTrack.setEnabled(true);
    mLocalMediaStream.addTrack(factory.createVideoTrack("ARDAMSv0", mVideoSource));
    AudioSource audioSource = factory.createAudioSource(new MediaConstraints());
    mLocalMediaStream.addTrack(factory.createAudioTrack("ARDAMSa0", audioSource));

    mListener.onStatusChanged("STREAMING");
}

有关更多信息,这可能是一个不错的起点。它是一个Android项目,该项目连接到ProjectRTC信令服务器,并将屏幕共享为视频。我发现它非常有帮助!

Android屏幕共享项目(Android客户端-Java) https://github.com/Jeffiano/ScreenShareRTC

ProjectRTC(节点服务器) https://github.com/pchab/ProjectRTC

答案 1 :(得分:-1)

我是CatVision.io的作者 - 一款适用于Android的屏幕共享软件,可在浏览器中显示移动设备的屏幕。我们探索了WebRTC的使用,但这条路线变成了死路,主要是因为它无法提供良好的延迟。通信中的滞后 - 可能是由于压缩 - 对于交互式用户操作来说太长了。我们改用了更传统的VNC类协议。