如何将rawvideo编解码器流式传输到mp4容器?错误是Could not find tag for codec rawvideo in stream #0, codec not currently supported in container
。网址是例如video=Logitech HD Webcam C270
,格式是dshow
。文件名可以说out.mp4
AVFormatContext* pInputFmtCtx = avformat_alloc_context();
AVInputFormat* inputFormat = av_find_input_format(Format);
avformat_open_input(&pInputFmtCtx, url, inputFormat, null);
if (avformat_find_stream_info(pInputFmtCtx, null) != -1)
... find stream index
AVCodec* videoDecoder = avcodec_find_decoder(pInputFmtCtx->streams[_vidStreamIndex]->codecpar->codec_id);
AVCodecContext* videcCodecCtx = avcodec_alloc_context3(videoDecoder);
avcodec_parameters_to_context(videcCodecCtx, videoCodecParams);
avcodec_open2(videcCodecCtx, videoDecoder, null);
// and the output context
AVFormatContext* pOutputFmtCtx = null;
avformat_alloc_output_context2(&pOutputFmtCtx, null, null, fileName);
// iterate over streams of input context and when we find it
AVStream* in_stream = pInputFmtCtx->streams[i];
AVCodecParameters* in_codecpar = in_stream->codecpar;
AVStream* out_stream = avformat_new_stream(pOutputFmtCtx, null);
avcodec_parameters_copy(out_stream->codecpar, in_codecpar);
out_stream->codecpar->codec_tag = 0;
// after that
avio_open(&pOutputFmtCtx->pb, fileName, AVIO_FLAG_WRITE);
avformat_write_header(pOutputFmtCtx, &opts);
如果摄像机流式传输
H264
,则此方法工作正常,但如果摄像机流式传输原始视频,则不会流式传输到文件并引发错误。我该如何解决?我还没真正了解ffmpeg。 最佳答案
mp4不支持rawvideo。您必须将其编码为其他格式,或使用支持该格式的容器。