录像实际上就是remuxing的过程,因此本篇是下一篇——基于FFmpeg的视频播放器之十五:录像的理论部分
最权威的参考当然来自FFmpeg的examples:https://ffmpeg.org/doxygen/trunk/examples.html,remuxing.c
这个例子不做转码,比如改变分辨率、帧率、编码方式等,而且是将整个视频文件从头到尾转存,代码不到200行,学习起来还是比较容易的
个人觉得有两个地方需要注意一下:
一.av_packet_rescale_ts
这个函数用于转封装过程中的时间基(time_base)转换,将AVPacket中各种时间值从一种时间基转换为另一种时间基,比如说mp4转mkv,如果这两种容器的时间基不一样,需要从新计算pts和dts
例子中的函数调用为
av_packet_rescale_ts(pkt, in_stream->time_base, out_stream->time_base);