繁体   English   中英

av_read_frame()方法的输入参数

[英]input parameters for av_read_frame() method

我想在未解码的情况下阅读并打开编码域中的视频。 到目前为止,我已经编写了代码,并且可以正常运行。 但是方法av_read_frame()的输出仅给出零个数,并且重复相同的负整数值。 我不确定是否将参数正确传递给方法。 请帮忙。

void CFfmpegmethods::VideoRead(){
av_register_all();

    const char *url = "H:\\Sanduni_projects\\ad_1.mp4";
    AVDictionary *options = NULL;
    AVFormatContext *s = avformat_alloc_context(); //NULL;
    //AVFormatContext *avfmt = NULL;
    //avformat_alloc_context();

    AVPacket pkt;

    //AVFormatContext *avformat_alloc_context();
    //AVIOContext *avio_alloc_context();

    //open an input stream and read the header
    int ret = avformat_open_input(&s, url, NULL, NULL); 

    //avformat_find_stream_info(s, &options); //finding the missing information 

    if (ret < 0)
        abort();

    av_dict_set(&options, "video_size", "640x480", 0);
    av_dict_set(&options, "pixel_format", "rgb24", 0);

    if (avformat_open_input(&s, url, NULL, &options) < 0){
        abort();
    }

    av_dict_free(&options);

    AVDictionaryEntry *e;

    if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) {
        fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key);
        abort();
    }
    //int i = 0;
    while (1){
        //Split what is stored in the file into frames and return one for each call
        //returns the next frame of the stream
        int frame = av_read_frame(s, &pkt);
        //cout <<i << " " << frame << endl;
        waitKey(30);
        //i++;
    }

    //make the packet free
    av_packet_unref(&pkt);

    //Close the file after reading
    avformat_close_input(&s);

}

方法av_read_frame()在读取数据包时输出零,然后给出负值。 在我的代码循环无限运行。 因此给出无限数量的负值。

这是修改后的代码

while (1){
            //Split what is stored in the file into frames and return one for each call
            //returns the next frame of the stream
            int frame = av_read_frame(s, pkt);

        duration = pkt->duration;
        size = pkt->size;

        total_size = total_size + size;
        total_duration = total_duration + duration;

        i++;
        if (frame < 0) break;

        cout << "frame" << i << " " << size << " "<< duration << endl;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM