使用WebRTC进行Android屏幕共享

16

我听说过在桌面上使用WebRTC进行屏幕共享的方法,但是就Android而言,好像没有太多相关信息。

我的问题是:

  1. 在Android上是否可以使用WebRTC进行屏幕共享?我是指能否将当前屏幕投射到另一部手机的屏幕上。
  2. 如果问题1的答案是肯定的,那么我该如何实现它呢?

谢谢。


你是否在考虑开发原生应用还是针对Android的Chrome/Firefox浏览器? - Benjamin Trent
@BenjaminTrent:谢谢您的回复。我是指原生应用程序。 :) - Paul
Paul,你找到这个问题的答案了吗?你尝试过使用Android 5.0吗?它具有MediaProjection API,可以使Android应用程序捕获屏幕。 - SamFast
@SojharoMangi:抱歉,我不再关注这个项目了。(这只是我的业余项目) - Paul
1个回答

8
  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");
}

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

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

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


你好。有最新的 Github 演示吗?你添加的 Github 链接非常古老,而且存储库已经多年没有更新了 :( - Asif Ullah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接