音视频参数
码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清的区别
http://blog.csdn.net/xiangjai/article/details/44238005
音视频流程
整体流程
–>解协议(网络流媒体需要,本地不需要):将音视频从网络协议(RTSP/RTMP/HLS)中取出
–>解封装:将音视频从封装格式(MP4/RMVB,这些格式其实就是按照一定的格式放到一起)中取出;例如:FLV解封后取出H.264视频流和ACC音频流
–>解码:将音视频从压缩标准(H.264/ACC等)中解码出来,得到原始非压缩音视频数据如视频(YUV420P/RGB等)音频(PCM)
–>音视频同步
常用封装(MKV/MP4)与编码(H.264/ACC)对应表
视音频压缩原理(从YUV大文件到H.264小文件)
视频HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2
无损压缩:利用数据冗余(即各像素直接存在着很强的关联性)来进行压缩
有损压缩:利用视觉冗余(人眼对亮度等的辨别阙值)来进行压缩
音频AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3
有损压缩
当声音小于一定值人耳听不到则去掉
当强音信号和弱音信号同时出现,人耳也听不到去掉
本人测试13M的mp4(5s长度)解码为YUV大小是600多M;
网络协议
- RTSP:rtp、rtcp协议,底层是udp;易丢包适合采用专线(eg:IPTV)
- RTMP:底层TCP;目前flash都可以支持
- HLS:苹果产品,基于HTTP底层TCP;采用将视频分成多段(每段几秒),延迟比较长
- WebRTC
- P2P
架构
- 发布端
- 编解码器H264+ACC
- 开源软件OBS、Flash Media Live Encoder
- 播发端
- PC:VLC、Flash网页
- 手机h5:rtmp转hls
- APP:ffmpe
–> ffmpeg负责编解转码(OPENSL ES/OPENGL ES负责播放音/视频,它们是android底层提供的;此外也可以用SDL)
开源框架
- SRS(Simple Rtmp Server):支持RTMP
- CRTMP:支持RTSP/RTMP/HLS;流媒体服务器
- nginx-rtmp
- red5
- FMS(adobe产品 Flash Media Server 收费)
本人的理解,视频原始的YUV等数据,经过压缩打包成H264格式数据,最后再将音视频等排序便是我们熟知的MP4等格式了。