问题背景:
近期写的文章,部分读者在后台咨询了一些问题和疑惑,回答后感觉可能需要同步出来,所以用这篇文章解答下。其次感谢大家的关注和阅读,希望大家多多交流。
问题1:能否推荐几本音视频相关的书籍?
答:音视频书籍市面上优秀的还比较少,主要就是通过一些QQ群,微信群、博客等大家在交流和学习。我看过刘歧的《FFmpeg从入门到精通》和展晓凯《音视频开发进阶指南》觉得还行吧,但是也是局限在FFmpeg和移动客户端的相关开发。
问题2:觉得音视频整个开发岗位未来怎么样?
音视频最近几年在直播、短视频、在线教育场景应用比较多,像抖音、快手、B站都是和音视频密切相关的APP。和音视频相关的岗位大概分两个方向,一个是工程实践落地相关的,一个是编解码、传输算法相关的。总体来说音视频相比较其它岗位还是有一定门槛的,看得见的是AI、5G也和音视频相关开发有密切关系,这是比较有想象力的吧,未来IoT应用也少不了音视频。所以我对音视频相关开发岗位还是持比较乐观态度,觉得做类似方面开发比较有趣点,只要专注一两个方向做深入,未来无论从薪资还是个人发展都是比较好的。
问题3:在这篇文章中,有很多小伙伴对PTS和TDS还是不太理解,特别是关于B帧的PTS和DTS大小关系。
现在假定输入的帧顺序是:I B B P
实际解码的顺序是:I P B B
因为B帧是双向预测帧,所以B帧的解码要依赖P帧的信息,但是渲染的顺序又要和输入的顺序保持一致,因为B帧发生的动作在P帧的前面。
所以渲染的顺序依然是:I B B P
为了控制这种B帧解码滞后P帧,但是渲染又提前的顺序所以用到了PTS和DTS,综上
DTS大小:I < P < B < B
PTS大小:I < B < B < P
问题4:在TS文件将H264打包过程中,PES是如何打包到TS包的?
H264被打包成PES时,一个PES的长度往往是大于ts packet长度188字节的,所以PES打包成TS时要进行切分,ts packet头部payload_unit_start_indicator的值如果等于0则表示PES切分ts包没有结束,如果等于1则表示把PES包已经切分完成了。
今天就说这么多,祝您工作顺利!
如果有疑问,你可以在公众号后台发消息咨询我。
往期文章回顾:
从人类的第一次直播聊聊视频监控行业
音视频压缩:H264码流层次结构和NALU详解
音视频传输:RTP协议详解和H.264打包方案
音视频基础知识:流媒体核心技术梳理
音视频封装:FLV格式详解和打包H264、AAC方案(下)
音视频封装:FLV格式详解和打包H264、AAC方案(上)
音视频常见问题分析和解决:延时和抖动
音视频封装格式:AAC音频基础和ADTS打包方案详解
个人转载内容至朋友圈和群聊天,无需特别申请版权许可。
引用转载该订阅号文章,注明文章来源即可。
记得右下角点“在看”,还可以关注该订阅号,防止遗漏推送哦