功能描述
在视频通话或互动直播中进行屏幕共享,可以将说话人或主播的屏幕内容,以视频的方式分享给其他说话人或观众观看,以提高沟通效率。
屏幕共享在以下场景中应用广泛:
-
视频会议场景中,将讲话者本地的文件、数据、网页、PPT 等画面分享给其他与会人;
-
在线课堂场景中,将老师的课件、笔记、讲课内容等画面展示给学生观看。
实现方法
在实现屏幕共享前,请确保已在你的项目中实现基本的实时音视频功能。
屏幕共享在 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。