会议投屏直播:投屏数据流获取方案

本文详细介绍了在iOS平台上实现会议投屏直播的屏幕录制方案,从RPScreenRecorder到Extension的演进,探讨了不同系统版本的限制与解决办法,包括内存限制、逻辑处理时间和线程同步,并分享了开发过程中的调试经验和注意事项。
摘要由CSDN通过智能技术生成

- 不同系统版本的演进

这里只以ios为例,以后有时间会分别写一下其它平台上的实现方式。
苹果在这方面一直处于消极缓慢的演进状态,总是令开发者有点巧妇难为的感觉。即使是给出的实现方案,也因为各种不稳定,在实际调用过程中不能稳定执行。后面也会一一说明。

ios中比较正规的实现方式是用Extension来实现的,从ios9开始提供很有限的实现。在ios9之前也有通过破解协议来实现的,本文是以Extension扩展方式实现,如何添加扩展我就不一一说明了。

1. RPScreenRecorder

RPScreenRecorder是苹果最早提出的屏幕录制方案,直接上部分代码:


/*
 *  直接触发录屏,只能录取应该应用中的内容,应用进入后台或退出后,自动关闭。
 */
 #pragma mark- start record
-(IBAction)onStart:(id)sender{
   
    if([[RPScreenRecorder sharedRecorder] isAvailable] == YES){
   
        [[RPScreenRecorder sharedRecorder] startRecordingWithMicrophoneEnabled:YES handler:^(NSError * _Nullable error) {
   
            
        }];
    }
}

#pragma mark- stop record
- (IBAction)onStop:(id)sender{
   
    if([[RPScreenRecorder sharedRecorder] isAvailable] == YES){
   
        [[RPScreenRecorder sharedRecorder]stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error) {
   
            [self presentViewController:previewViewController animated:YES completion:^{
   
                
            }];
        }];
    }
}

上面这种方式当点击完成后,会模态打开系统提供的预览界面。在界面中可以选择保存共享等方式。显示然这种方式是不支持流式实时返回的,做直播显然不太合适,主要用于后期生成完整文件再上传的方式。

于是,在 ios11有时候,苹果又在这个基础上提供了一定的实时流返回的能力,但其实这个时候,已经可以不用这个方式实现了,这时大概提供一下调用方法:


// 开始录制
    if (@available(iOS 11.0, *)) {
   
        [[RPScreenRecorder sharedRecorder] startCaptureWithHandler:^(CMSampleBufferRef  _Nonnull sampleBuffer, RPSampleBufferType bufferType, NSError * _Nullable error) {
   
            NSLog(@"--- [数据]  %@", sampleBuffer);
        
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值