PL_MPEG -- MPEG1 视频解码器, MP2 音频解码器, MPEG-PS 解复用器。
MIT 授权的 C/C++ 单文件库。
参见 pl_mpeg.h 获取文档。
为什么要这样做?
这是一种将视频回放添加到应用或游戏中的简单方法。其他解决方案,比如 ffmpeg 需要巨大的库和大量的胶水代码。
MPEG1 是一种旧的、效率低的编解码器,但是对于许多用例来说,它仍然足够好。所有与 MPEG1 和 MP2 相关的专利都已经过期,所以现在它是完全免费的。
这个库没有使用任何SIMD指令,但由于相对简单的编解码器,它仍然设法解码4k60fps的视频在一个CPU核心(在我的i7-6700k至少)。
这个库不使用任何 SIMD 指令,但由于编解码器的相对简单,它仍然设法在单个 CPU 核心上解码 4k60fps 的视频(至少在我的 i7-6700k 上)。
使用示例
- pl_mpeg_extract_frames.c 从视频中提取所有帧并保存为 PNG 格式。
- pl_mpeg_player.c 实现了一个使用 SDL2 和 OpenGL 渲染的视频播放器。
PL_MPEG 的编码
大多数包含 MPEG1 视频(MPEG1)和 MPEG1 音频层 II(mp2)流的 MPEG-PS(.mpg)文件,应该可以使用 PL MPEG。注意,.mpg 文件也可以包含 MPEG2 视频,这个库不支持 MPEG2 视频。
你可以使用 ffmpeg 将视频编码成合适的格式。
ffmpeg -i input.mp4 -c:v mpeg1video -c:a mp2 -format mpeg output.mpg
如果你只是想快速测试这个库,可以试试这个文件。
https://phoboslab.org/files/bjork-all-is-full-of-love.mpg
局限性
- 没有错误报告。PL_MPEG 会默默地忽略任何无效的数据。
- 忽略 MPEG-PS 容器中数据包的 pts(演示时间戳)。这可能会导致一些文件的同步问题。
- 可能是 bug。
(First version translated and edited by vz on 2020.12.19)