[英]FFMPEG: decode h264 with multiple frames
请原谅我对视频解码的知识,这是我的新手。
我需要将视频帧从h264解码为C#中的位图图像。 我为此使用FFmpeg.AutoGen 。 但不幸的是,我没有得到任何结果。
我有以下数据可供使用。
我目前的方法如下(类似于此处显示的示例):
初始化
private unsafe AVCodecContext* _codecContext;
private unsafe AVFormatContext* _formatContext;
private unsafe AVFrame* _frame;
AVCodecID codecID;
private unsafe AVCodec* _avCodec;
private bool decoderInitialized = false;
if (!decoderInitialized)
{
if (nCodecType == 2)
{
codecID = AVCodecID.AV_CODEC_ID_H264;
}
unsafe
{
_avCodec = ffmpeg.avcodec_find_decoder(codecID);
_codecContext = ffmpeg.avcodec_alloc_context3(_avCodec);
ffmpeg.avcodec_open2(_codecContext, _avCodec, null);
_frame = ffmpeg.av_frame_alloc();
}
decoderInitialized = true;
}
解码
AVPacket packet;
ffmpeg.av_init_packet(&packet);
packet.data = (byte*)pVideo;
packet.size = (int)nVideoSize;
int isFrameFinished = 0;
int response = ffmpeg.avcodec_decode_video2(_codecContext, _frame, &isFrameFinished, &packet);
我总是得到response = -22
和isFrameFinished = 0
。 我确实有预感,我在这里做错了什么。 但是我找不到资源来指引我前进的方向。 例如,我知道,我需要使用nFrameType(IFrame,BFrame和PFrame)。 但是我不知道怎么办? 此外,我知道我需要使用宽度和高度来正确解码图像,但是同样,我也不知道该如何处理。
幸运的是,我解决了这个问题。 我在ffmpeg.avcodec_find_decoder(codecID)
之前缺少编解码器ffmpeg.avcodec_register_all()
注册。 希望它能帮助别人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.