webrtc 截取视频流

本文详细介绍了在WebRTC中如何截取并保存视频流,主要针对264编解码条件下的Android、iOS、PC及Android TV四种终端。在软编解码情况下,可以在渲染端获取解码后数据进行保存,而在Android TV的硬件编解码场景下,需要在接收端拿到编码数据,通过自建软件解码器解码后再保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webrtc集成video_engine模块,该模块中集成video_capture,video_send,video_render,video_reveive以及video_render等模块,根据截取视频流的不同目的可以在不同的模块中截取,如需截取采集端的视频流保存,只需capture后截取视频流就可以了,如果要接收端截取视频流的话就要在reveive端拿到视频流了,但是在reveive拿到的是未解码的数据流,很难进行处理,因此如果可以在绘制端拿到解码后的数据流就不用对再进行解码,直接保存为可查看的视频或者图像就好了。

本次主要总结webrtc拿到数据后的在各个终端的保存显示模块,且主要针对264编解码的条件下进行的,终端主要包括:1、android手机端;2、ios手机端;3、pc端;4、android TV端。其中android手机端和ios手机端以及pc端都是软件编解码android TV端是硬件编解码,硬件编解码时不能再render模块拿到解码后的码流的,所以只能在reveive端拿到码流,然后进行解码保存为可以观看的视频或者图像。

本次主要讲述在接收端截取视频流保存为图像的功能,针对前三种软编的情况,可以在render端拿到解码后的视频流保存,webrtc集成了各个终端的render模块,在解码成为I420帧后进行保存就好了,保存bmp图像简单一些,只需加入图像头就好了,但是bmp文件太大。保存jpeg相对麻烦一些,但是jpeg具有文件小,兼容性强的特点。下面简单介绍一下三种软编情况
下的终端保存jpg的方法:
1、android终端:android端在底层render端(video_render_surface_view)拿到解码后的I420数据后,在底层采用libyuv的ConvertFromI420函数,将I420数据转为RGB565类型数据,然后通过jni接口调用java端的保存jpeg函数bitmap.compress保存为jpg图像,bitmap存放的数据为通过jni接口传送的RGB565数据(此处涉及jni方法的调用,以及java端bitmap的创建和压缩为jpg的参数设置);
2、ios终端:ios端在video_render_ios_gles20的open_gles2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值