FFmpegAVFormatContext变量的申请以及释放剖析-创新互联

当前是用的是3.4版本的FFmpeg
av_register_all
    avformat_open_input
        avformat_find_stream_info
            avcodec_find_decoder
                avcodec_open2
av_read_frame
    avcodec_send_packet
        avcodec_receive_frame

专注于为中小企业提供成都做网站、成都网站建设、成都外贸网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业昌图免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

申请过程
1)调用avformat_alloc_context创建一个AVFormatContext变量的实例pAVFormatContext
AVFormatContext* pAVFormatContext = avformat_alloc_context();

2)调用avio_alloc_context创建一个AVIOContext变量的实例pAVIOContext
AVIOContext* pAVIOContext = avio_alloc_context(mallocBuffer,  mallocBufferSize, 0, this, ReadStreamData, NULL, NULL);
该函数中ReadStreamData用于读取读取的网络或者文件中的视频或者音频流的函数,mallocBuffer用于保存读取到的数据用于分析,mallocBufferSize是分配的缓存长度,一旦mallocBufferSize申请的缓存长度小于返回读取的数据长度会导致拷贝到缓存中的数据越界,导致程序崩溃

3)如果已经知道数据的格式为h364,调用av_find_input_format创建一个AVInputFormat变量的实例pAVInputFormat
AVInputFormat* pAVInputFormat = av_find_input_format("h364");
pAVFormatContext->iformat = pAVInputFormat;
if (avformat_open_input(&pAVFormatContext, "", pAVInputFormat, NULL) < 0)

4)开始探测码流格式
avformat_find_stream_info(pAVFormatContext, NULL);

释放过程
avformat_close_input(pAVFormatContext);

分析该函数分为三部分
第一部分
关闭输入:
    if (s->iformat)
        if (s->iformat->read_close)
            s->iformat->read_close(s);
对于播放rtsp://admin:admin888@192.168.28.130:554/h364/ch2/main/av_stream,主要是发送TearDown指令给摄像机

第二部分
avio_close(pb)

第三部分
avformat_free_context(s)
该函数的核心就是释放申请创建的视频和音频的流  
 for (i = s->nb_streams - 1; i >= 0; i--)
        ff_free_stream(s, s->streams[i]);

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页名称:FFmpegAVFormatContext变量的申请以及释放剖析-创新互联
地址分享:https://www.cdcxhl.com/article10/dihjdo.html

成都网站建设公司_创新互联,为您提供面包屑导航品牌网站建设全网营销推广服务器托管虚拟主机网站策划

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司