WebRTC外部释放视频解码器(iOS&&Android)

处于公司对项目的特殊要求,WebRTC创建之后不让做释放,下次播放可复用,提高效率,不释放会引发两个问题:

1、视频解码器会被一直占用,iOS能够申请的解码器有限,摄像头一多,可能造成没法创建解码器问题

2、AudioUnit会被一直占用,对于该问题可参考解决方案https://www.jianshu.com/p/ac8ef80fc3e2

iOS实现:

本文主要针对问题1进行整改,WebRTC需要通过更改源码来支持从外部释放视频解码器来实现WebRTC不释放却能单独释放解码器,主要的更改流程如下:

RTCVideoTrack->RTCRtpTransceiver->RtpTransceiver->VideoRtpReceiver->WebRtcVideoChannel->VideoReceiveStream2->RTCVideoDecoderH265/RTCVideoDecoderH264

1、在RTCRtpTransceiver新增closeDecoder方法,如下所示:


2、RTCRtpTransceiver中的_nativeRtpTransceiver最终会调用到RtpTransceiver,RtpTransceiver新增实现方法,如下图所示:


调用该方法前需要注册下方法,否则调用不到,在头文件中添加PROXY_METHOD0(void, CloseDecoder)

3、WebRtcVideoChannel新增实现方法,如下图所示:


4、VideoReceiveStream2新增实现方法,如下图所示:


5、最终在OC的RTCVideoDecoderH264/RTCVideoDecoderH265实现closeDecoder来处理解码器释放

至此视频的解码器单独释放就此完成,中间还有很多的虚函数CloseDecoder没写,写虚函数时最好在虚函数实现空的实现,防止出现说一套源码iOS编译通过了,Android没法编译,主要写了主要的实现方法,释放后再进行拉流时会自动去创建解码器。

Android:后续输出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容