EasyRTMP获取H.264实时流并转化成为RTMP直播推流之EasyRTMP-iOS屏幕推流如何获取视频帧
视频流媒体中视频数据的传输占据了绝大部分的带宽,如何提升编码效率、减小带宽使用、提升画面质量,成为音视频开发者努力的重点。随着互联网、流媒体技术的发展,兼容支持H.264、H.265编码器(可减少计算的复杂性、提高压缩率,并降低编码时间)已经成为迫在眉睫的事。
EasyRTMP推流功能特点
- 调用简单
无论是个人开发者还是企业级应用,只需要简单的几个接口调用就可以完成一套完整的互联网直播应用的上架
- 功能完善
配套完整的直播、录像、旋转功能示例,用户直接复用即可选择嫁接自定义功能
- 运行高效
高效缓冲和发送设计模式,能非常灵活地让用户自定义延时和缓冲区的大小
- 性能稳定
长期的在线运行检验,众多客户的项目成功经验
EasyRTMP-iOS屏幕推流如何获取视频帧
提出问题:
EasyRTMP-iOS中的屏幕推流,如何获取视频帧?如何编码?如何推流?
分析问题:
本文只讨论iOS12.0及以上版本,因为iOS12.0以下的版本,录屏的操作太复杂,而且市场占有率很低。
解决问题:
SampleHandler类继承自RPBroadcastSampleHandler,相关代理方法中获取到屏幕采集的进度,具体使用方式见注释:
// 屏幕采集工作已经开始启动,在此方法中一般进行初始化工作
- (void)broadcastStartedWithSetupInfo:(nullable NSDictionary <NSString *, NSObject *> *)setupInfo;
// 采集到数据的实时回调,此方法中的sampleBuffer数据结构中有视频和音频数据,我们通过相关推流方法将数据推送给服务器,即实现了录制和推流。
- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer
withType:(RPSampleBufferType)sampleBufferType;
1、在broadcastStartedWithSetupInfo方法中接入麦克风,初始化编码器,初始化推流器:
2、在processSampleBuffer方法中处理实时采集到的数据,编码并推流:
在编码器的回调中,再推流,此处的流程和摄像头推流是一样的: