屏幕共享

最近更新时间:2022-09-20 05:17:40

功能描述

在视频通话或互动直播中进行屏幕共享,可以将说话人或主播的屏幕内容,以视频的方式分享给其他说话人或观众观看,以提高沟通效率。

屏幕共享在以下场景中应用广泛:

  1. 视频会议场景中,将讲话者本地的文件、数据、网页、PPT 等画面分享给其他与会人;

  2. 在线课堂场景中,将老师的课件、笔记、讲课内容等画面展示给学生观看。

实现方法

在实现屏幕共享前,请确保已在你的项目中实现基本的实时音视频功能。

屏幕共享在 iOS 平台上的实现,主要通过如下步骤:

  • 使用 Broadcast Upload Extension 开启一个新的进程

    Broadcast Upload Extension 的内存使用限制为 50 M,请确保你的内存使用不超过 50 M。

  • 使用 Apple ReplayKit 框架进行屏幕录制

  • 使用 anyRTC SDK 进行视频流的传输

示例代码

// objective-c
- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
    switch (sampleBufferType) {
        case RPSampleBufferTypeVideo:
            // 处理视频数据
        {
            CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
            if (pixelBuffer) {
                CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
                ARVideoFrame *videoFrame = [[ARVideoFrame alloc] init];
                videoFrame.format = 12;
                videoFrame.time = timestamp;
                videoFrame.textureBuf = pixelBuffer;
                videoFrame.rotation = [self getRotateByBuffer:sampleBuffer];
                [rtcKit pushExternalVideoFrame:videoFrame];
            }
        }
            break;
        case RPSampleBufferTypeAudioApp:
            // 处理音频数据,音频由App产生
            [rtcKit pushExternalAudioFrameSampleBuffer:sampleBuffer type:ARAudioTypeApp];
            break;
        case RPSampleBufferTypeAudioMic:
            // 处理音频数据,音频由麦克风产生
            [rtcKit pushExternalAudioFrameSampleBuffer:sampleBuffer type:ARAudioTypeMic];
            break;
        default:
            break;
    }
}

同时,我们在 GitHub 提供一个开源的 AR-Screen-Sharing-iOS 示例项目。你可以前往下载,参考源代码

开发注意事项

Broadcast Upload Extension 的内存使用限制为 50 M,请确保你的内存使用不超过 50 M。