ffmpeg中MP4的解复用过程
程序员文章站
2022-07-13 12:19:08
...
主要流程
1.在s->io_open()中创建了URLContext和它的prot成员(URLProtcol)。其中URLProtcol对应的协议为file;
其中MP4的URLProtcol为:
const URLProtocol ff_file_protocol = {
.name = "file",
.url_open = file_open,
.url_read = file_read,
.url_write = file_write,
.url_seek = file_seek,
.url_close = file_close,
.url_get_file_handle = file_get_handle,
.url_check = file_check,
.url_delete = file_delete,
.url_move = file_move,
.priv_data_size = sizeof(FileContext),
.priv_data_class = &file_class,
.url_open_dir = file_open_dir,
.url_read_dir = file_read_dir,
.url_close_dir = file_close_dir,
.default_whitelist = "file,crypto"
};
在libformate/file.c文件中。
2.在av_probe_input_buffer2()中判断出AVInputFormat:
3.av_probe_input_format3()函数:
4.mp4对应的read_probe为mov_probe(),在mov.c文件中;
MP4对应的AVFormatContext
AVInputFormat ff_mov_demuxer = {
.name = "mov,mp4,m4a,3gp,3g2,mj2",
.long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
.priv_class = &mov_class,
.priv_data_size = sizeof(MOVContext),
.extensions = "mov,mp4,m4a,3gp,3g2,mj2",
.read_probe = mov_probe,
.read_header = mov_read_header,
.read_packet = mov_read_packet,
.read_close = mov_read_close,
.read_seek = mov_read_seek,
.flags = AVFMT_NO_BYTE_SEEK,
};
4.在s->iformat->read_header(s),实际为mov_read_header()中,创建MP4文件的AVStream:
上一篇: 原生js实现select下拉框选择
下一篇: 11-下拉框选择-Select类
推荐阅读
-
ffmpeg中MP4的解复用过程
-
通过ffmpeg过滤MP4中的视频h264,丢弃音频
-
Python的Socket编程过程中实现UDP端口复用的实例分享
-
[ffmpeg]记录一下编译ffmpeg过程中的踩坑
-
Spring中的注解@Autowired实现过程全解(@Autowired 背后的故事)
-
产品经理必读:敏捷开发中的需求管理过程全解 需求管理需求评审需求分析需求确认
-
Python的Socket编程过程中实现UDP端口复用的实例分享
-
Python的Socket编程过程中实现UDP端口复用的实例分享
-
Python的Socket编程过程中实现UDP端口复用的实例分享
-
Spring中的注解@Autowired实现过程全解(@Autowired 背后的故事)