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秒后是否接收到数据,如果没有数据,读取过程将被中断。

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

相关内容

热门资讯

了解透视!aapoker ai... 了解透视!aapoker ai插件,aapoker透视方法,本来真的有辅助插件(哔哩哔哩)1、每一步...
辅助透视!hhpoker是真的... 辅助透视!hhpoker是真的假的,hhpoker有没有作比弊辅助,都是真的有辅助教程(哔哩哔哩)辅...
分享透视!wpk系统是否存在作... 分享透视!wpk系统是否存在作比弊行为,wpk辅助是什么,一贯一直总是有辅助技巧(哔哩哔哩)1、操作...
必备透视!hhpoker开挂教... 必备透视!hhpoker开挂教程,hhpoker德州作比弊,原来真的是有辅助教程(哔哩哔哩)1、这是...
教你透视!如何判断wpk辅助软... 教你透视!如何判断wpk辅助软件的真假,wpk模拟器是什么,本来一直都是有辅助工具(哔哩哔哩)1、首...
关于透视!wepoker好友房... 关于透视!wepoker好友房开挂,wepoker辅助插件功能,其实是真的有辅助技巧(哔哩哔哩)透视...
开挂透视!wpk模拟器,wpk... 开挂透视!wpk模拟器,wpk模拟器,都是存在有辅助app(哔哩哔哩)1、实时透视辅助更新:用户可以...
专业透视!如何下载德普之星辅助... 专业透视!如何下载德普之星辅助软件,德普之星app安卓版破解版,原来存在有辅助工具(哔哩哔哩)1、游...
必备透视!wpk透视插件,wp... 必备透视!wpk透视插件,wpk软件是正规的吗,真是一直都是有辅助插件(哔哩哔哩)1、免费辅助多个强...
教你透视!wpk控制牌是真的吗... 教你透视!wpk控制牌是真的吗,wpk透视是真的吗,确实是有辅助软件(哔哩哔哩);1、游戏颠覆性的策...