对流媒体相关协议的认识(二) ——ES,PES,TS

  在了解了流媒体的大概内容之后,下面将具体描述数据由数据源方发送给服务器方的封装过程。
  es->pes->ts流程作用是将采集到的裸数据一步一步通过在头部加包头的方式封装起来,使最后接收方接收到有该数据的相关描述信息,并由其中的信息进行数据的忽略,调整以及数据传输机制的调整。之后数据包头中的数据会有所反映(也希望后续能对为什么加这些数据能有更具体的了解)

首先引用下http://blog.chinaunix.net/uid-9688646-id-1998407.html这篇博客的TS解码过程,以便后续的理解中可以方便参考和理解:

TS 流解码过程:
1. 获取TS中的PAT
2. 获取TS中的PMT
3. 根据PMT可以知道当前网络中传输的视频(音频)类型(H264),相应的PID,PCR的PID等信息。
4. 设置demux 模块的视频Filter 为相应视频的PID和stream type等。
5. 从视频Demux Filter 后得到的TS数据包中的payload 数据就是 one piece of PES,在TS header中有一些关于此 payload属于哪个 PES的 第多少个数据包。
因此软件中应该将此payload中的数据copy到PES的buffer中,用于拼接一个PES包。
6. 拼接好的PES包的包头会有 PTS,DTS信息,去掉PES的header就是 ES。
7. 直接将 被被拔掉 PES包头的ES包送给decoder就可以进行解码。解码出来的数据就是一帧一帧的视频数据,这些数据至少应当与PES中的PTS关联一下,以便进行视音频同步。
8. I,B,B,P 信息是在ES中的。

ES(Elementary Streams)–原始流

  ES(原始流)是指直接从编码器采集过来的数据流,包括视频流(H264,MJPEG…), 音频流(AAC), 以及其他的一些编码数据流。
  ES(原始流)顾名思义是最初的数据流,裸数据。后续的协议可以在原始流上添加各自的包头数据。
  因为是原始流,所以这里不详细介绍其用法,同时有一个VBV_delay(视频流延时值)存在于视频ES的头部,长度为16bit,在后面介绍PTS和DTS时会稍加解释。但还是有几点需要注意,入下所示。

ES(原始流)单位专一性

  每个ES(原始流)只能

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值