某软件上看到的一个问题,如何定义私有视频格式?然后做个私有播放器?
提供一点自己的想法,首先做个私有视频格式肯定不是让我们自己研究音视频的编解码,而是在已有视频流和音频流的基础上将他们进行封装成自定义的私有格式,比如 MP4 格式(虽说它不是私有的)。
MP4 格式在进行音视频封装的时候,有标准规范文档,它是由一个个 Box 组成的,Box 中嵌套 Box ,并且每个 Box 有其自己的含义,第三方播放器根据 Box 的类型就知道它的功能,这样就可以逐个解析了。
播放器在播放 MP4 前会先有一个探测的过程,确定它真的就是 MP4 封装格式,而不是 AVI 或者 FLV 之类的封装格式,这不是根据文件的后缀名来决定真正格式,而是会解析文件的头几个字节内容进行探测,这样才能准确判断。
播放器在完成探测过程后,就开始解封装,这就是封装的逆过程。它从 Box 提取并组装信息,核心就是找到 H.264 码流中的 NALU 给解码器去解码,找到 AAC 码流中的 ADTS 给解码器去解码,解码完了之后就是画面和声音的同步了。
明白了上述封装-解码-解封装的大致过程,想做一个私有视频格式就很容易了,从简单到复杂,花样多的很。
举个例子:直接把视频流和音频流拼接在一起,中间加个 0x00010001 之类的分隔符做区分,然后文件头写入类似 “custom-format” 这样的标识符对应的十六进制数。
写入文件头另一个好处是因为防止播放器直接把文件当成 H.264 裸流来播放了,这样一来常规的播放器都播不了。这就需要自定义私有播放器了。
流程和正常的播放器类似,先解析文件头探测,符合私有格式,然后解封装遍历找到 0x00010001 分隔符,这样就分离视频流和音频流了,接下来就正常提取视频流和音频流数据,交给解码器就解码就行了。
除此之外,还有其他很多方法,比如对视频流和音频流进行加密,然后播放时解密后再解码,或者对视频流和音频流进行压缩后再封装,总之花样多得很。
最后欢迎大家加入音视频开发进阶 知识星球 ,这里有知识干货、编程答疑、开发教程,还有很多精彩分享。更多内容可以在星球菜单中找到,随着时间推移,干货也会越来越多!!!
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/15889.html