了解网络视频H.264的播放

H.264  流

视频捕捉得到的图片压缩为H264流媒体,其包含很多 NAL Units

了解网络视频H.264的播放_第1张图片

An H.264/MPEG-4 AVC-compliant bitstream consists of a sequence of Network Abstract Layer Units (NAL Units or NALUs). Examples of NALUs are Sequence Parameter Set (SPS), Picture Parameter Set (PPS), Supplemental Enhancement Information (SEI), and slice. The SPS and PPS NALUs contain information for the correct decoding of a sequence of pictures. A SEI nalu contains information that is not needed by the decoding process; it can be seen as embedded metadata. Pictures consist of one or more slices. Each slice contains a slice header and slice data.


SPS, PPS 说明视频信息的 NALu, 解码器要知道这些才能正确解码, 而每一个 Slice 是也一个 NALu


Slice

什么是 Slice是? 看下面的图就知道了,一个图片可能由多个 Slices 组成, H.264比 MPEG2支持更细的 slice

了解网络视频H.264的播放_第2张图片



H.264的个帧可能有依赖关系,比如前后两帧,只有辆小"汽车”移动了一点,那个后一帧可只用一个size很小的slice 更新汽车移动的那一小片区域

如果后帧相对前帧有两个区域发生变化,那么需要用两个 slices才能更新当前画面


IDR

还有一种叫 IDR 的 NALu, 叫 i slice  要求完全重画帧,并且此 IDR 之前的帧都无效。这是因为用户要做 seek, 如果解码中后续帧依赖整个视频的第一帧,那们必须要从头计算才能生成当前的画面,这是不可能,所以IDR是频繁穿插在视频流的。

An IDR frame is a special type of I-frame in H.264. An IDR frame specifies that no frame after the IDR frame can reference any frame before it. This makes seeking the H.264 file easier and more responsive in the player.

不考略idr,得到的图片可能如下:

了解网络视频H.264的播放_第3张图片


HTTP 网络视频播放

现在有了NALu, 可以直接用 Http 协议把 Http server 上的视频mp4文件,传输客户端的 MediaPlayer中,(在browser能播放是因为浏览器调用了MediaPlayer), 原理如下:

mp4 文件是一种包裹视频流的box, 其头部有 sample table (就是索引信息,内容是时间到文件位置的映射 ) 

一般 Media Player 会缓冲索引文件,当用户 seek的时候,从索引文件中找到时间对应文件位置,而后用 http 协议访问,比如下面访问 mp4 文件位置 2556

http://pdl.googletv.cnbc.com/VCPS/Y2013/M09D12/3000198565/5ED2-KR-FBlock0912_H264_720x405_30p_1M.mp4 @2556

而后再读取 IDR重构画面

在播放过程中,不断 fetch 后续位置的数据,直到缓冲上限


ref:

http://multimedialab.elis.ugent.be/BFlavor/samples.html

http://www.tvro.com.tw/main5/maimtxt/H.264%E5%A0%B1%E5%B0%8E%EF%BC%8D%E5%B7%A5%E7%A0%94%E9%99%A2.htm

你可能感兴趣的:(网络,h264)