gpt4 book ai didi

c - avformat_write_header 失败并出现错误“无效参数

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:33 29 4
gpt4 key购买 nike

我正在尝试将一个 mp4 文件 block 写入一个 .ts 文件,该文件尚不存在。所以首先我以这种方式创建 AVFormatContext:

AVOutputFormat *oformat = av_guess_format( NULL,
"mpegts",
"video/x-mpegts" );
AVFormatContext * outFormatContext = NULL;
avformat_alloc_output_context2( &outFormatContext, oformat, NULL, dst_file)

outFormatContext 被创建并且 outFormatContext->oformat 被设置为 oformat。然后我在 outFormatContext 上打开 I/O 上下文:

avio_open(&outFormatContext->pb, dst_file, AVIO_FLAG_WRITE)
avformat_write_header( outFormatContext, NULL );

根据 this这足以让 avformat_write_header 正常工作,但它因错误“无效参数”而失败。

还需要做什么才能成功写入 header ?

最佳答案

虽然晚了点,希望对大家有所帮助。这是我调用 avformat_write_header 的方法,您应该提供一个流来写入 header 。

AVFormatContext* pOutFormatContext;
AVOutputFormat* avOutputFormat;
if ((avOutputFormat = av_guess_format(NULL, "mp4", "video/mp4")) == NULL) {
cerr << "Could not guess output format" << endl;
return -1;
}

avformat_alloc_output_context2(&pOutFormatContext,
av_guess_format("mp4", NULL, "video/mp4"), NULL, NULL);
if (pOutFormatContext == NULL) {
cerr << "Could not allocate output context" << endl;
return -1;
}

for (int i = 0; i < avFormatContext->nb_streams; i++) {
AVStream* inAVStream = avFormatContext->streams[i];
AVStream* outAVStream = avformat_new_stream(pOutFormatContext, inAVStream->codec->codec);
if (avcodec_copy_context(outAVStream->codec, inAVStream->codec) < 0) {
cerr << "Failed to copy codec context" << endl;
return -1;
}

outAVStream->codec->codec_tag = 0;
if (pOutFormatContext->oformat->flags & AVFMT_GLOBALHEADER) {
outAVStream->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
}
}

avio_open(&pOutFormatContext->pb, "test.mp4", AVIO_FLAG_READ_WRITE);
if (pOutFormatContext->pb == NULL) {
cerr << "Could not open for writing" << endl;
return -1;
}
if (avformat_write_header(pOutFormatContext, NULL) != 0) {
cerr << "Could not write header" << endl;
return -1;
}

关于c - avformat_write_header 失败并出现错误“无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663884/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com