视频相关

视频编解码相关基础知识

视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB帧就是最常见的。

  1. I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

  2. P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
  3. B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些,有兴趣可以看看我上面提供的资料),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

同步相关

PTS:Presentation Time Stamp
DTS:Decoding Time Stamp
PCR:Program Clock Reference
STC:System Time Clock

PS是程序数据流(program stream)
ES是基本数据流(elementary stream)
TS是传输数据流(transition stream)

m3u8

m3u8相关tag如下,参考http://tools.ietf.org/id/draft-pantos-http-live-streaming-04.txt :

tagmeaning
#EXT-X-TARGETDURATION 定义每个TS的最大的duration。
#EXT-X-MEDIA-SEQUENCE定义当前m3u8文件中第一个文件的序列号,每个ts文件在m3u8文件中都有固定唯一的序列号,该序列号用于在MBR时切换码率进行对齐。
#EXT-X-KEY定义加密方式和key文件的url,用于取得16bytes的key文件解码ts文件。属性:
  • METHOD
  • URL
#EXT-X-PROGRAM-DATE-TIME第一个文件的绝对时间
#EXT-X-ALLOW-CACHE是否允许cache
#EXT-X-ENDLIST表明m3u8文件的结束。live m3u8没有该tag。
#EXT-X-STREAM-INF属性:
  • BANDWIDTH
  • PROGRAM-ID
  • CODECS
#EXT-X-DISCONTINUITY
 当遇到该tag的时候说明以下属性发生了变化:
  • file format 
  • number and type of tracks
  • encoding parameters
  • encoding sequence
  • timestamp sequence
#EXT-X-VERSION #EXT-X-VERSION:<n> ,其中n是个整数,表明协议版本号

 

m3u8客户端的解码过程:
  1. 找到TS_packet的开始位0×47。
  2. 找到PID为0×0000的PAT,将PAT进行解包,得到每路节目对应的PMT PID(在m3u8 streaming中只有一路节目)。
  3. 根据PAT解包得到的PMT PID得到PMT,同理将PMT进行解包得到ES pid和对应的类型。
  4. 根据PMT解包得到的ES PID,将该路流解包得到PES_packet,从而得到ES流和DTS,PTS。此时就能送到decoder去解码了。
 
 
 
This entry was posted in Multimedia and tagged multimedia. Bookmark the permalink.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值