当前位置: 首页 > news >正文

ffmpeg中的超时控制

在FFmpeg库中,很多函数没有直接的参数可以设置超时。

那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制?

  • avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下,可能会因为等待服务器响应而长时间阻塞。

  • avformat_find_stream_info: 读取流信息。这个函数会尝试读取更多的数据来获得流的详细信息,如果数据源响应缓慢,也会阻塞。

  • av_read_frame: 读取数据包。这个函数会读取下一帧的数据包,如果数据源响应缓慢或者网络连接不稳定,也会阻塞。

  • avio_read: 从输入缓冲区读取数据,这个函数也会阻塞。

  • avio_open: 打开文件或网络资源以进行读取或写入的函数。

  • av_seek_frame avformat_seek_file用于在媒体流中进行跳转操作

  • 等等

总之在打开、关闭、读写网络流的时候都有可能遇到阻塞的问题。

avformat_find_stream_info函数为例,函数的调用关系如下:

avformat_find_stream_inforead_frame_internalff_read_packets->iformat->read_packetread_packet(rpsp.c)ff_sdp_demuxer.read_packet = ff_rtsp_fetch_packetff_rtsp_fetch_packetread_packetff_rtsp_tcp_read_packetff_rtsp_read_replyffurl_read_completeretry_transfer_wrapperff_check_interrupt

ff_check_interrupt函数用于检测中断回调函数是否应该触发中断操作。

调用ff_check_interrupt函数的函数包括:

async_check_interrupt in async.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
retry_transfer_wrapper in avio.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
get_current_fragment in dashdec.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
read_data in dashdec.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
reopen_demux_for_component in dashdec.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
dash_read_packet in dashdec.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
failing_write_packet in fifo_test.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
read_data in hls.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
read_data in hls.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
read_data in hls.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
hls_read in hlsproto.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
hls_read in hlsproto.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
libsrt_network_wait_fd_timeout in libsrt.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
libsrt_listen_connect in libsrt.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
ff_network_wait_fd_timeout in network.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
ff_network_sleep_interruptible in network.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
ff_poll_interrupt in network.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
ff_listen_connect in network.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
start_connect_attempt in network.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
rtp_read in rtpproto.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 
udp_read_packet in rtsp.c (ffmpeg\ffmpeg-4.1.4\libavformat) : 

以上函数被进一步调用的关系如下:

retry_transfer_wrapperffurl_readwrapped_url_readio_read_packetcache_readconcat_readcrypto_readftp_getcftp_readftp_read_dirgopher_readhls_readhttp_getchttp_buf_readhttp_shutdownrtmpe_readrtmp_http_send_cmdrtmp_http_readrtmp_http_openff_rtmp_packet_readff_rtmp_packet_read_internalrtmp_writeudp_read_packetrtp_read_headersap_read_headersap_fetch_packetsrtp_readsubfile_readgnutls_url_pulltls_read_callbackmbedtls_recvurl_bio_breadtls_client_handshake_looptls_readtls_read_cbffurl_read_completeget_chunk_headerread_data_packetget_http_header_dataget_tcp_server_responsertmp_packet_read_one_chunkrtmp_calc_swfhashrtmp_handshakertmp_receive_hs_packetrtmp_server_handshakeff_rtsp_skip_packetff_rtsp_read_replyread_linertsp_read_announceff_rtsp_tcp_read_packetffurl_writeio_write_packetcrypto_writecrypto_closeftp_send_commandftp_writegopher_writehttp_write_replyhttp_connecthttp_writeff_rtmp_packet_writeff_rtp_check_and_send_back_rrff_rtp_send_punch_packetsff_rtp_send_rtcp_feedbackff_rtsp_read_replyff_rtsp_tcp_write_packetgnutls_url_pushhttp_proxy_openhttp_proxy_writehttp_shutdownicecast_writeism_writembedtls_sendmd5_closeprompeg_write_fecrtmp_handshakertmp_send_hs_packetrtmp_server_handshakertmpe_writertp_writertsp_send_cmd_with_content_asyncrtsp_send_replysap_write_closesap_write_packetsend_command_packetsrtp_writetee_writetls_client_handshaketls_client_handshake_looptls_shutdown_clienttls_writetls_write_callbacktls_write_cburl_bio_bwriteasync_check_interruptasync_buffer_taskasync_openasync_read_internalasync_seekff_listen_connectsctp_openunix_openff_network_sleep_interruptiblehttp_read_streamff_network_wait_fd_timeouttcp_readtcp_writeff_poll_interruptff_listen_connectff_connect_parallelget_current_fragmentread_datalibsrt_listen_connectlibsrt_setuplibsrt_network_wait_fd_timeoutlibsrt_listenlibsrt_listen_connectlibsrt_readlibsrt_writeread_datahls_read_headerpulse_read_packetreopen_demux_for_componenttls_client_handshake_loopreopen_demux_for_componentopen_demux_for_componentrecheck_discard_flagsdash_read_packetdash_seekstart_connect_attemptff_connect_paralleludp_read_packetread_packetdash_read_packetAVInputFormat ff_dash_demuxer = {.name           = "dash",.long_name      = NULL_IF_CONFIG_SMALL("Dynamic Adaptive Streaming over HTTP"),.priv_class     = &dash_class,.priv_data_size = sizeof(DASHContext),.read_probe     = dash_probe,.read_header    = dash_read_header,.read_packet    = dash_read_packet,.read_close     = dash_close,.read_seek      = dash_read_seek,.flags          = AVFMT_NO_BYTE_SEEK,};failing_write_packetAVOutputFormat ff_fifo_test_muxer = {.name           = "fifo_test",.long_name      = NULL_IF_CONFIG_SMALL("Fifo test muxer"),.priv_data_size = sizeof(FailingMuxerContext),.write_header   = failing_write_header,.write_packet   = failing_write_packet,.write_trailer  = failing_write_trailer,.deinit         = failing_deinit,.priv_class     = &failing_muxer_class,.flags          = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH,};hls_readconst URLProtocol ff_hls_protocol = {.name           = "hls",.url_open       = hls_open,.url_read       = hls_read,.url_close      = hls_close,.flags          = URL_PROTOCOL_FLAG_NESTED_SCHEME,.priv_data_size = sizeof(HLSContext),};rtp_readconst URLProtocol ff_rtp_protocol = {.name                      = "rtp",.url_open                  = rtp_open,.url_read                  = rtp_read,.url_write                 = rtp_write,.url_close                 = rtp_close,.url_get_file_handle       = rtp_get_file_handle,.url_get_multi_file_handle = rtp_get_multi_file_handle,.priv_data_size            = sizeof(RTPContext),.flags                     = URL_PROTOCOL_FLAG_NETWORK,.priv_data_class           = &rtp_class,};

 

相关文章:

ffmpeg中的超时控制

在FFmpeg库中,很多函数没有直接的参数可以设置超时。 那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制? avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下&…...

搜维尔科技:【研究】触觉技术将在5年内以8种方式改变人们的世界

触觉技术在过去几年中发展迅猛,大大提高了反馈的精确度和真实度。其应用产生了真正的影响,数百家公司和企业都集成了触觉技术来增强培训和研究模拟。 虽然触觉技术主要用于 B2B 层面,但触觉技术可能会彻底改变我们的生活,尤其是通…...

项目收获总结--MyBatis的知识收获

MyBatis的知识收获 一、概述二、获取自动生成的(主)键值三、将sql执行结果封装为目标返回对象的方式和原理四、延迟加载实现原理五、批量插入六、自带分页与分页插件原理七、Mapper(Dao)接口与XML映射文件关系八、模糊查询like语句九、#{}和${}的区别十、二级缓存案例实战 一、…...

数据库管理-第221期 Oracle的高可用-04(20240717)

数据库管理221期 2024-07-17 数据库管理-第221期 Oracle的高可用-04(20240717)1 ADG2 连接配置2.1 TNS2.2 JDBC2.3 JAVA连接池2.3.1 Oracle UCP2.3.2 应用连接池基础配置 总结 数据库管理-第221期 Oracle的高可用-04(20240717) 作…...

navicat15已连接忘记密码

1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码&#xff0c;在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…...

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…...

元服务体验-服务发现

服务发现&#xff0c;无论线上或线下的方式都可以发现元服务。 线上&#xff1a;基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下&#xff1a;用户在 HarmonyOS Connect标签…...

设计模式学习(二)工厂模式——抽象工厂模式+注册表

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点&#xff1a;①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...

同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器

同三维T80004解码器视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清HDMI解码器&#xff0c;双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清H…...

Flutter应用开发:掌握StatefulWidget的实用技巧

前言 随着移动应用的日益复杂&#xff0c;状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态&#xff0c;即应用中的可变数据&#xff0c;它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中&#xff0c;如何高效、可维护地管理状态&#xff0c;对于…...

SCADA系统在哪些行业中取得了不斐的成绩!

随着技术的发展&#xff0c;SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统&#xff0c;到基于通用计算机和通用操作系统的第二代&#xff0c;再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代&#xff0c;以及现在基于更高技…...

layui 监听弹窗关闭并刷新父级table

记录&#xff1a;easyadmin 监听弹窗关闭并刷新父级table 场景一&#xff1a;在二级页面的table中点击编辑&#xff0c;保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...

Webpack详解

Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它允许开发者将项目中的资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;通过分析和处理这些模块之间的依赖关系&#xff0c;将它们打包…...

杰发科技AC7801 —— __attribute__指定地址存储常量

const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中&#xff0c;0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug&#xff0c;使用_…...

docker pull 不下来 还是走代理好啊

docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来&#xff0c;就算我们修改成功了国内的镜像源&#xff0c;有时候由于国内镜像更新不及时&#xff0c;或者需要拉取的镜像比较冷门&#xff0c;只有域外镜像站才有&#xff0c;那么我…...

Java Scanner 类

Scanner 类是 Java 中用于读取用户输入的方便工具&#xff0c;它可以从各种数据源&#xff08;如标准输入流、文件、字符串等&#xff09;中读取基本类型和字符串。Scanner 类位于 java.util 包中&#xff0c;通常用于从键盘获取用户输入数据。 ### 主要功能和用法 1. **创建…...

OceanBase:引领下一代分布式数据库技术的前沿

OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统&#xff0c;旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势&#xff0c;适用于大规模数据处理和高并发业务场景。其核心特点包括&#xff1a; …...

Win11鼠标卡顿 - 解决方案

问题 使用Win11系统使&#xff0c;鼠标点击任务栏的控制中心&#xff08;如下图&#xff09;时&#xff0c;鼠标会有3秒左右的卡顿&#xff0c;同时整个显示屏幕也有一定程度的卡顿。 问题原因 排除鼠标问题&#xff1a;更换过不同类型的鼠标&#xff0c;以及不同的连接方式…...

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...