请原谅我对视频解码的了解,我是新手。
我需要将视频帧从h264解码为C#中的位图图像。我正在使用FFmpeg.AutoGen。但不幸的是,我没有得到任何结果。
我可以使用以下数据。
我目前的方法如下(类似于显示here的例子):
初始化
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)。但我不知道怎么做?此外,我知道我需要使用宽度和高度来正确解码图像,但同样,我也不知道如何解决它。
答案 0 :(得分:0)
ffmpeg.avcodec_register_all()
之前缺少编解码器ffmpeg.avcodec_find_decoder(codecID)
的注册。希望它能帮助别人。