例如,要播放一个 MP4 文件,这个文件要经过啥呢?
一个 MP4 文件中包含了:视频压缩数据流(如H.264、H.265)和音频压缩数据(如aac、MP3)
首先需要经过解码成为原始数据,视频原始数据是 YUV,音频原始数据是 PCM
然后原始数据再根据各个平台需要的格式去做适配再播放
以 Android 为例:
安卓手机屏幕都是以 RGB 来显示的,所以需要将 YUV 转化为 RGB 数据才能正常显示
安卓设备的喇叭仅支持16位,而 PCM 数据是32位的,所以需要进行转码才能正常播放音频
那么编解码和转码都是可以用 FFmpeg 来完成,非常方便
解压缩视频为YUV数据:
ffmpeg -i input.mp4 -c:v rawvideo -pix_fmt yuv420p output.yuv
解压缩音频为PCM数据:
ffmpeg -i input.mp4 -c:a pcm_s16le output.wav
YUV转换到RGB:
ffmpeg -s:v widthxheight -pix_fmt yuv420p -i input.yuv -c:v rawvideo -pix_fmt rgb24 output.rgb
PCM音频数据32位转换为16位:
ffmpeg -i input.wav -c:a pcm_s16le output.wav