直播录制视频时,是如何生产视频数据?
封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。
为什么要分封装格式和视频编码格式呢? 这个其实跟网络分七层模型一个原理。解耦和,降低依赖,底层给上层提供基础功能,底层和上层都都可以单独扩展,可以以多种方案组合编码与封装,比如MP4与H264、MP4与MPEG、TS与H264等等。比如这里面的这边文章的编码就只负责将最原始的音频和视频数据就行压缩,而压缩完的数据要怎么组织就拜托给上层的封装,封装接到视频音频数据负责给数据编号,指定同步协议,加入字幕等操作。经过封装后,得到的就是可以播放的上面提到的视频文件MP4或者MKV等等。把这个过程反过来就是视频播放的过程。
1、流媒体源
- PC端的摄像头、屏幕 对于PC端的流媒体源,可以使用Open Broadcaster Software串流(支持多种直播平台)。
- 移动端iOS、Android的摄像头和麦克风。 iOS、Android主要是系统提供的API实现。
- webRTC (Web Real-Time Communication) webRTC是一个支持网页浏览器进行实时语音对话或视频对话的技术,可以在网页浏览器中进行采集、传输、播放,缺点是只在 PC 的 Chrome 上支持较好,移动端支持不太理想。
使用 webRTC 录制视频基本流程是:
- 调用
window.navigator.webkitGetUserMedia()
获取用户的PC摄像头视频数据。 - 将获取到视频流数据转换成
window.webkitRTCPeerConnection
(一种视频流数据格式)。 - 利用
webscoket
将视频流数据传输到服务端
由于许多方法都要加上浏览器前缀,所以很多移动端的浏览器还不支持 webRTC,所以真正的视频录制还是要靠客户端(iOS,Android)来实现,效果会好一些。
2、编码
推荐Andorid4.3(API18)或以上使用硬编,以下版本使用软编;iOS使用全硬编方案。
- 软编码: libffmpeg
- 硬编码: MediaCodec(sdk level 16+, Android 4.1, 4.1.1, the JELLY_BEAN)
3、封装
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,FLV可以使用Flash Player进行播放,FLV封装格式的文件后缀通常为“.flv”。总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。
特点:视频文件体积轻巧、封装简单
每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。图玩智能为企业提供专业的直播技术支持,提供直播平台的二次开发服务,欢迎随时咨询www.toivan.com.
来源:oschina
链接:https://my.oschina.net/u/4203900/blog/4283719