我们平时遇到的视频文件各式各样,五花八门。通常它们会根据格式的不同,而有着不同的扩展名,比如 avi,rmvb,mkv,mp4 等等等。这些格式代表的都是 封装格式。
这些文件通常产生的过程是这样的:
- 通过录制工具录制一帧一帧的图像,可能是 Camera,屏幕截取工具等。
- 将录制的图像送给编码器进行编码,得到原始的视频码流,也称为裸流。比如视频中常用的 H.264 格式的编码。
- 将原始的视频码流封装进封装格式文件中,产生我们最终看到的视频文件。
封装格式的文件,由于其通常可以包含更丰富的信息,存储传输方便,而得到广泛的应用,因此可以播放各种各样封装格式文件的播放器也非常多。
而原始的视频码流通常可以为我们学习视频编解码的知识提供极大的方便。由上面封装格式文件产生的过程,可以看出,H.264 原始视频码流的播放,显然要比封装格式文件的播放简单许多,但由于原始码流的实用价值有限,而难以找到相应的播放工具。
实际上,ffmpeg 项目又在原始 H.264 码流播放这个问题上,拯救了广大的视频编解码开发者。
ffmpeg 工具集提供的 ffplay
可以播放 H.264 裸流。如下面这样一个保存为文件的 H.264 裸流:
|
|
第 0 ~ 21 字节为第一个 NALU,第 22 ~ 29 个字节为第二个 NALU,等等。
可以将文件路径直接作为 ffplay
的参数,来启动播放:
ffplay
还会打印与视频相关的一些信息,如 H.264 的编码配置,图像格式,分辨率等等。此外,默认还会输出所用的 ffmpeg 库的配置信息。ffplay
界面如下图:
相对于许多其它面向普通用户的播放器而言,ffplay
在用户操作上是简陋了点,几乎没有为用户提供任何对视频播放的控制功能,但还是为音视频的开发提供了极大的方便。
除了 ffplay
之外,基于 ffmpeg 开发的 vlc 播放器,也支持播放 H.264 裸流,如:
即使是对于 H.264 裸流,vlc 也提供了进度控制等功能:
进度时间总是显示为 0。如果真的去拖动进度条的话,画面还可能会花掉:
打赏
Done。