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.复制加密密码,在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...
企业管理必备:学会寻找客户绝佳方法。
无论是日常沟通、工作交流,还是社交娱乐,微信都扮演着重要的角色。而在微信的使用过程中,添加好友是一项基本而重要的操作,但是您真的会添加微信好友吗? 试试这个神器——微信管理系统,下面分享它快速加客…...
昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例
今天是29天,学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理(NLP)库。它具有以下特点: 支持多种 NLP 任务:如语言模型、机器翻译、问答、情感分析、序列标记、摘要等ÿ…...
元服务体验-服务发现
服务发现,无论线上或线下的方式都可以发现元服务。 线上:基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下:用户在 HarmonyOS Connect标签…...
设计模式学习(二)工厂模式——抽象工厂模式+注册表
设计模式学习(二)工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清H…...
Flutter应用开发:掌握StatefulWidget的实用技巧
前言 随着移动应用的日益复杂,状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态,即应用中的可变数据,它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中,如何高效、可维护地管理状态,对于…...
SCADA系统在哪些行业中取得了不斐的成绩!
随着技术的发展,SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统,到基于通用计算机和通用操作系统的第二代,再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代,以及现在基于更高技…...
layui 监听弹窗关闭并刷新父级table
记录:easyadmin 监听弹窗关闭并刷新父级table 场景一:在二级页面的table中点击编辑,保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...
Webpack详解
Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。它允许开发者将项目中的资源(如 JavaScript、CSS、图片等)视为模块,通过分析和处理这些模块之间的依赖关系,将它们打包…...
杰发科技AC7801 —— __attribute__指定地址存储常量
const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中,0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug,使用_…...
docker pull 不下来 还是走代理好啊
docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来,就算我们修改成功了国内的镜像源,有时候由于国内镜像更新不及时,或者需要拉取的镜像比较冷门,只有域外镜像站才有,那么我…...
Java Scanner 类
Scanner 类是 Java 中用于读取用户输入的方便工具,它可以从各种数据源(如标准输入流、文件、字符串等)中读取基本类型和字符串。Scanner 类位于 java.util 包中,通常用于从键盘获取用户输入数据。 ### 主要功能和用法 1. **创建…...
OceanBase:引领下一代分布式数据库技术的前沿
OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统,旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势,适用于大规模数据处理和高并发业务场景。其核心特点包括: …...
Win11鼠标卡顿 - 解决方案
问题 使用Win11系统使,鼠标点击任务栏的控制中心(如下图)时,鼠标会有3秒左右的卡顿,同时整个显示屏幕也有一定程度的卡顿。 问题原因 排除鼠标问题:更换过不同类型的鼠标,以及不同的连接方式…...
使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签
使用 ABBYY 为 PDF 文件添加书签,可以帮助快速定位文档中的主要内容,也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签,这里介绍使用 ABBYY FineReader PDF 15(Win 系统)在 PDF 中自动添加书…...
k8s集群新增节点
目前集群状态 如K8S 集群搭建中规划的集群一样 Masternode01node02IP192.168.100.100192.168.100.101192.168.100.102OSCent OS 7.9Cent OS 7.9Cent OS 7.9 目前打算新增节点node03 Masternode01node02node03IP192.168.100.100192.168.100.101192.168.100.102192.168.100.1…...
springAMQP自定义fanout交换机进行消息的广播
rabbitmq一共有三种交换机: fanout--广播direct--定向topic--话题 rabbitmq-web端 首先我们需要建立一个名叫cybg.fanout交换机与两个自定义的队列用于测试广播效果 我这里就起名字叫做fanout_queue1&fanout_queue2 项目中: 首先对我们的Liste…...
Nginx配置缺少导致CSS不起作用
引言 在Web开发中,确保样式表正确加载是前端显示正常工作的关键。然而,有时候即使CSS文件的路径和代码本身没有问题,CSS样式也可能无法正确应用。本文将分享一个常见的问题——Nginx配置缺少导致的CSS不起作用,以及如何解决这个问…...
从代理模式到注解开发
代理模式 package org.example.proxy;public class ProxyClient {public static void main(String[] args) {ProxyBuilder proxyBuilder new ProxyBuilder();proxyBuilder.build();} }interface BuildDream {void build(); }class CustomBuilder implements BuildDream {Over…...
力扣刷题(自用)
哈希 128.最长连续序列 128. 最长连续序列 - 力扣(LeetCode) 这个题要求O(n)的时间复杂度,我一开始想的是双指针算法(因为我并不是很熟悉set容器的使用),但是双指针算法有小部分数据过不了。 题解给的哈…...
网站开发:使用VScode安装yarn包和运行前端项目
一、首先打开PowerShell-管理员身份运行ISE 输入命令: set-ExecutionPolicy RemoteSigned 选择“全是”,表示允许在本地计算机上运行由本地用户创建的脚本,没有报错就行了 二、接着打开VScode集成终端 输入 npm install -g yarn 再次输入以…...
Linux_线程的使用
目录 1、线程与进程的关系 2、线程的优缺点 3、创建线程 4、查看启动的线程 5、验证线程是共享地址空间的 6、pthread_create的重要形参 6.1 线程id 6.2 线程实参 7、线程等待 8、线程退出 9、线程取消 10、线程tcb 10.1 线程栈 11、创建多线程 12、__th…...
[word] word如何编写公式? #微信#知识分享
word如何编写公式? word如何编写公式?Word中数学公式是经常会使用到的,若是要在文档中录入一些复杂的公式,要怎么做呢?接下来小编就来给大家讲一讲具体操作,一起看过来吧! 方法一:…...
Pytest 框架快速入门
Pytest 框架常用功能介绍 一、简介 Pytest 是一个功能强大的 Python 测试框架,具有简单易用、测试用例清晰易读、支持参数化、可运行由 Nose 和 unittest 编写的测试用例、拥有丰富的第三方插件且可自定义扩展、支持重复执行失败的用例以及方便与持续集成工具集成…...
抖音视频素材去哪里找啊?视频素材网站库分享
在这个视觉盛宴的抖音平台上,高质量和有趣的视频素材常常是吸引观众的重要钥匙。如果你也正在寻找那些能让你的视频作品更加出色的资源,那么恭喜你,今天我将为你介绍10个超实用的视频素材网站,让你的抖音视频创作充满创意和效率。…...
58同城会员网站怎么做/网站制作建设公司
MCS51算术运算程序双字节取补程序 /(R3R4)(R3R4);入口 :R3,R4;占用资源:ACC;堆栈需求:2字节;出口 :R3,R4CMPT :MOV A,R4CPL AADD A,#01HMOV R4,AMOV A,R3CPL AADDC A,#00HMOV R3,ARET;N节取补程序 /([R0])([R0]);入口 :R0,R7;占用资源:ACC…...
用什么网站可以做链接/个人网络销售平台
原标题:STC11F04单片机串口终端程序用做的程序。类似交换机的telnet命令。由于时间仓促仅仅只实现了简单的几个命令。helpLED1_ONLED1_OFFLED2_ONLED2_OFF例如,在串口终端输入?输入Time 命令,可以查询到现在单片机内部的时间。输入…...
政府网站建设认识不足/南宁百度推广排名优化
这里的ac就是aircv,可以直接用pip安装 pip install aircv 使用的时候就可以用:import aircv as ac 在aircv的init文件中对于find_template函数的解释如下: def find_template(im_source, im_search, threshold0.5, rgbFalse, bgremoveFalse):return find locationi…...
怎么做钓鱼网站盗取qq/网站制作代码
进程文件: mshta 或者 mshta.exe 进程名称: Microsoft HTML Application Host 描述: mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件。 出品者: Microsoft Corp. 属于: Microsoft Windows O…...
做淘宝网站需要/软文批发网
一直想写一个下拉刷新,一直没有一个好的想法,在git 中浏览了几款下啦刷新Demo,他们实现的方式也不一样,老一点的框架是自定义View 然后监听手势实现效果。新一点的是自定一ViewGroup 组建 然后结合 NestedScrollingParent, Nested…...
男女做暖暖免费网站/深圳搜索排名优化
DukeMTMC-reID 数据集DukeMTMC-reID 数据集简介DukeMTMC-reID 数据集结构DukeMTMC-reID 数据集命名规则参考文献DukeMTMC-reID 数据集是 2017 年发布的一个大规模行人重识别图片数据集,它采集于 Duke 大学校园的 8 个静态摄像头。DukeMTMC-reID 数据集现已被广泛使用…...