avformat_open_input

【FFmpeg】avformat_open_input函数 函数的定义位于libavformat\demux.c中,定义如下,主要的工作流程为: (1)为avformat分配空间(avformat_alloc_context) (2)初始化输入格式(init_input) (3)黑白名单的检查 (4)其他信息的检查 (5)读取头信息(read_header) (6)更新流的音频/视频上下文(update_stream_avctx) 在函数执行的过程中,最核心的函数为初始化输入格式(init_input) 阅读详情

/*打开输入流并读取标题。编解码器未打开。
 *流必须用avformat_close_input()关闭。
 *
 * @param ps指向用户提供的AVFormatContext的指针(由avformat_alloc_context分配)。
 *可能是一个指向NULL的指针,在这种情况下,AVFormatContext被该函数分配并写入ps。

 *请注意,用户提供的AVFormatContext将在失败时释放。

 

 * @param url要打开的流的URL。
 * @param fmt如果非NULL,则此参数强制使用特定的输入格式。否则格式是自动检测的。
 * @param选项填充AVFormatContext和demuxer-private选项的字典。
 *返回时,这个参数将被销毁,并替换为一个包含字典
 *找不到的选项。可能是NULL。
 *
 * @成功返回0,失败时出现负面AVERROR。
 *
 * @note 如果您想使用自定义IO,请预先分配格式上下文并设置其pb字段。

 * /


int avformat_open_input(AVFormatContext **ps, const char *filename,
                        AVInputFormat *fmt, AVDictionary **options)
{
    AVFormatContext *s = *ps;
    int i, ret = 0;
    AVDictionary *tmp = NULL;
    ID3v2ExtraMeta *id3v2_extra_meta = NULL;
    //创建avformat上下文
    if (!s && !(s = avformat_alloc_context()))
        return AVERROR(ENOMEM);

    /**
        av_class 记录和@ref avoptions的类。 由avformat_alloc_context()设置。
                 导出(解)复用器私人选项,如果它们存在。
    **/
    if (!s->av_class) {
        av_log(NULL, AV_LOG_ERROR, "Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
        return AVERROR(EINVAL);
    }
    //如果用户指定了输入格式,直接使用它  
    if (fmt)
        s->iformat = fmt;
    
    if (options)
        av_dict_copy(&tmp, *options, 0);

    if (s->pb) // must be before any goto fail
        s->flags |= AVFMT_FLAG_CUSTOM_IO;

    if ((
ffmpeg之avformat_open_input函数详细解释 然后调用avformatopeninput函数来打开媒体文件,指定了要打开的本地MP3文件的路径。如果获取信息失败,程序将打印出错误信息,并在关闭文件之前释放AVFormatContext结构体的空间。avformatopeninput() 函数是用于打开媒体文件并获取媒体文件信息的函数,该函数定义在libavformat/avformat.h中。:AVInputFormat结构体的指针,用于指定媒体文件的格式。:AVDictionary结构体的指针,用于传递打开媒体文件时的选项。 阅读详情

相关推荐

FFmpeg源码分析:avformat_open_input

函数原型 /** * 打开输入流并读取文件头。此时解码器还未打开。 * 该流必须通过avformat_close_input()函数关闭。 * * @param ps 用户提供的指针,类型为AVFormatContext,可以事先通过avformat_alloc_context()进行分配。 * 如果该ps指向的值为NULL,则avformat_open_input会调用avformat_alloc_context()进行分配。 * 注意当avform

chaisy971124568的博客 1055

ffmpeg源代码分析之avformat_open_input

/* int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options) { AVFormatContext *s = *ps; int ret = 0; AVDict

BIGBurning 1万+

Avformat_open_input函数的分析之--HTTP篇

接口参数的解析 函数的关键函数实现 init_input函数 ffio_open_whitelist函数 ffurl_open_whitelist函数 ffurl_connect函数 http_open函数 http_open_cnx_internal函数 前段时间在做直播的优化,主要是优化首屏时间,因为直播播放器大部分都会采用ffmpeg来处理,所以就会用到avformat_open_input这

baohonglai的专栏 7003

ffmpeg之avformat_open_input函数分析

函数定义 /** * Open an input stream and read the header. The codecs are not opened. * The stream must be closed with avformat_close_input(). * * @param ps Pointer to user-supplied AVFormatContext (

merlinholland的博客 1011

从学龄前开始解读FFMPEG代码 之 avformat_open_input函数 一

从学龄前开始解读FFMPEG代码 之 avformat_open_input函数 一在avformat_open_input()开始学龄前学习想说的话avformat_open_input()的定义avformat_open_input()的实现关于ID3v2关于FFmpeg中的错误类型返回值init_input()函数初探 在avformat_open_input()开始学龄前学习想说的话 这一函数的内容整体下来是非常的长的,所以需要捋清楚整个学习流程的过程也需要花费一点功夫。这也是整个学龄前学习过程中碰

zzyincsdn的博客 978

avformat_open_input返回-1094995529 “Invalid data found when processing input“

avformat_open_input返回-1094995529avformat_open_input() 返回"Invalid data found when processing input" 错误码为-1094995529 avformat_open_input() 返回"Invalid data found when processing input" 错误码为-1094995529 遇到这个问题时,我一脸黑人问号。由于项目限制,之前在使用ffmpeg项目时,configure编译选项没有做筛选,导

wowotou_heihei的博客 1万+

Avformat_open_input函数的分析 结合HTTP协议

前段时间在做直播的优化,主要是优化首屏时间,因为直播播放器大部分都会采用ffmpeg来处理,所以就会用到avformat_open_input这个函数,这也是首屏耗时比较多的一个地方,这里我主要跟踪一下http的请求以及rtmp的请求,源码都是开源的,这里主要是记录下来以备自己查询,本篇文章主要是是以ijkplayer源码为基础分析的。 avformat_open_input这个函数的作用是打开...

郭风朴(guofengpu)的Android影音专栏 1868

innovus实战攻略 | 用setUsefulSkewMode解锁时序优化的“隐藏技能”!

就像时序优化的“瑞士军刀”,参数虽多,但掌握了分类逻辑后,用起来其实很简单!如果你有更绝的用法,欢迎在评论区分享,大家一起卷起来!简单来说,它就是时序优化的“乾坤大挪移”。通过调整触发器的时钟到达时间,把关键路径的建立时间“借”给非关键路径,从而实现全局时序收敛。别急,这个命令就是你的“时序救星”!(工具最多只能借1.2ns的裕量,防止“借过头”导致新问题!这个参数能帮你兜底!(对关键路径“下死手”,确保优化到位!(设置上限,给工具套上“紧箍咒”!(直接跳过边界,避免优化反噬!(全局管理,防止“借过头”!

weixin_50820814的博客 1355

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 698

如何在SendWS实现WhatsApp批量群发设置管理?WhatsApp群发超链有什么好处?

WhatsApp群发顾名思义就是对WhatsApp上的用户好友进行群发消息,给他们群发想要发送的消息。及时不认识对方也可以对他进行群发超链。越来越多做跨境出海运营的工作者利用WhatsApp进行营销推广,因为他能做到低成本高回报,向客户发送消息曝光自己的品牌或产品,使得更多人了解,拓展新客户,提高成交率。

SendWS-WS云控群控拓客聊天翻译 1169

别再为电路自激发愁了:手把手教你用吸波材料搞定微波腔体谐振(附HFSS仿真设置)

本文详细解析了微波腔体谐振问题的工程解决方案,重点介绍了吸波材料的选型、安装工艺及HFSS仿真设置。通过实际案例和计算工具,帮助射频工程师有效抑制腔体自激,提升系统稳定性。特别适用于35GHz毫米波雷达等高频电路设计场景。

weixin_42662293的博客 383

【实战分享】低成本K型热电偶测温方案:单运放放大与STM32 ADC采集优化

本文详细介绍了低成本K型热电偶测温方案,通过单运放放大与STM32 ADC采集优化,解决了信号微弱、负电压处理和冷端补偿等核心挑战。方案采用LMV358运放和T型网络降低噪声,结合STM32的ADC校准和软件滤波,实现±0.5℃精度,物料成本控制在15元以内,适用于工业测温场景。

weixin_30839881的博客 168

运维系列【仅供参考】:RustDesk部署疑难解答

RustDesk部署疑难解答

weixin_54626591的博客 279

ABAP CDS View 从入门到精通教程目录:ABAP CDS View 在 SAP 技术体系中的重要地位

学习 ABAP CDS View 的开发技术,体会其背后的设计理念,也就掌握了 SAP S/4HANA 底层数据模型的设计精髓。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4777

一文读懂5G网络整体架构(接入网+承载网+核心网)

接入网重构分级(分工更细、效率更高)、承载网三段化升级(管道更宽、更智能)、核心网服务化云化(管理更灵活、成本更低)最终实现“成本最优、资源灵活、场景适配”,才能支撑自动驾驶、工业互联网、智慧城市、VR/AR等各种新场景,真正走进我们的生活。

鲸落寰宇 429

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 蚁群算法:寻食路径选择 (matlab实现)
microlyc
博客等级 码龄9年 10粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值