AVFormatContext:中断回调的正确用法?
创始人
2024-11-13 00:30:47
0

中断回调函数是FFmpeg库中用于观察和控制流媒体读取过程的一种方法。如果读取一个特别大或者不可靠的文件(例如网络流媒体),可以使用中断回调函数来中断读取过程。这样可以保证应用程序不会无限等待读取完成,同时还可以在需要的时候停止读取流。

以下是一个示例的中断回调函数实现,在此示例中,回调函数当处理读取数据时发生中断。该例子展示了在10秒内应用没有读取到数据时如何中断读取过程。

#include
#include

AVFormatContext* pFormatCtx;

//打开URL并保存信息
int OpenInput(const char *filename)
{
    int ret;
    AVDictionary *opts = NULL;

    //中断设置
    AVIOInterruptCB interuptcb ={callback, NULL};
    AVInputFormat *iformat = NULL;

    if((ret = av_dict_set(&opts,"scan_all_pmts","1",0))<0){
        av_log(NULL,AV_LOG_ERROR,"Failed to set av_dict");
        goto end;
    }

    //分配一个AVFormatContext
    pFormatCtx = avformat_alloc_context();
    if(!pFormatCtx){
        ret = AVERROR(ENOMEM);
        goto end;
    }

    //设置回调函数
    pFormatCtx->interrupt_callback= interuptcb;

    //打开输入文件
    if(avformat_open_input(&pFormatCtx,filename,iformat,&opts)!=0){
        ret = -1;
        goto end;
    }

    //获取流信息
    if(avformat_find_stream_info(pFormatCtx,NULL)<0){
        ret = -1;
        goto end;
    }

    //success
    ret = 0;

    end:
        av_dict_free(&opts);

    return ret;
}

//中断回调函数
int callback(void *ctx)
{
    int timeout = 10;
    if( av_gettime() - start_time >= timeout*1000*1000 )
        return 1;

    return 0;
}

其中,回调函数可以被定义为必要的函数(例如,检查是否按下了停止按钮或网络连接丢失等),如果回调函数返回指示停止考虑过程,读取过程就自动停止。

此外,在AVFormatContext中添加interrupt_callback字段并传递已定义的回调函数。在这个示例中,回调函数检测在读取10秒后是否接收到数据,如果没有数据,读取过程将被中断。

使用中断回调函数可以提高应用程序的执行效率,并且防止阻塞等待长时间文件读取。

相关内容

热门资讯

受玩家影响!wepoker有没... 受玩家影响!wepoker有没有插件,德普之星透视辅助,原来是有挂(有挂解密)进入游戏-大厅左侧-新...
于此同时!佛手在线大菠萝技巧,... 于此同时!佛手在线大菠萝技巧,德扑之星有辅助软件吗,好像确实有挂(有挂方法)一、德扑之星有辅助软件吗...
现有说明如下!wejoker辅... 现有说明如下!wejoker辅助软件视频,智星菠萝有挂吗,切实真的是有挂(有挂教程)暗藏猫腻,小编详...
黑科技技巧!哈糖大菠萝挂法,德... 黑科技技巧!哈糖大菠萝挂法,德普之星私人局透视,一贯是真的有挂(有挂教程)1、用户打开应用后不用登录...
昨日!We poker辅助器下... 昨日!We poker辅助器下载,德扑之星透视辅助插件,竟然存在有挂(有挂技巧);德扑之星透视辅助插...
值得注意的是!wepoker分... 值得注意的是!wepoker分析,德扑之星辅助工具如何设置,竟然是有挂(有挂功能)所有人都在同一条线...
今天上午!wpk俱乐部是真的吗... 今天上午!wpk俱乐部是真的吗,智星德州插件最新版本更新内容详解,果然确实有挂(有挂头条)1、许多玩...
为切实保障!菠萝德州透视脚本,... 为切实保障!菠萝德州透视脚本,德普之星透视辅助软件是真的吗,切实真的有挂(讲解有挂)1、不需要AI权...
推出新举措!德普之星辅助软件,... 推出新举措!德普之星辅助软件,德普之星怎么设置埋牌,切实是真的有挂(有挂细节)1、德普之星怎么设置埋...
近期!wepoker插件程序激... 近期!wepoker插件程序激活码,智星德州插件最新版本更新内容详解,总是确实有挂(有挂方法)1、智...