转封装中,用av_read_frame来读取文件的音视频数据。
其实在avformat_find_stream_info的时候会用read_frame_interal读取一部分数据放在一个列表中,后续直接写。
avformat_find_stream_info 读取一部分数据放在列表
当列表中没有数据时,则调用av_read_frame来读取一帧数据。
转封装中,用do_streamcopy来将编码数据写入到文件。
只有在转封装的时候才会调用该函数。转码的时候不会调用。
以flv转mkv提供以下读取数据和写文件的堆栈。
flv_read_packet
flv_read_packetmkv_write_packet
mkv_write_packet注: 本文涉及的ffmpeg的版本
ffmpeg version N-91445-g6cc6b61 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
configuration: --enable-gpl --enable-debug=3 --enable-libmfx --disable-optimizations --disable-stripping
libavutil 56. 18.102 / 56. 18.102
libavcodec 58. 21.104 / 58. 21.104
libavformat 58. 17.101 / 58. 17.101
libavdevice 58. 4.101 / 58. 4.101
libavfilter 7. 25.100 / 7. 25.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
网友评论