繁体   English   中英

FFMPEG:解码具有多个帧的h264

[英]FFMPEG: decode h264 with multiple frames

请原谅我对视频解码的知识,这是我的新手。

我需要将视频帧从h264解码为C#中的位图图像。 我为此使用FFmpeg.AutoGen 但不幸的是,我没有得到任何结果。

我有以下数据可供使用。

  • nFrameType = IFrame,PFrame或BFrame
  • nSequence =帧序列
  • nWidth =分辨率的宽度
  • nHeight =分辨率高度
  • nVideoSize =视频数据的大小
  • pVideo =视频数据

我目前的方法如下(类似于此处显示的示例):

初始化

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 = -22isFrameFinished = 0 我确实有预感,我在这里做错了什么。 但是我找不到资源来指引我前进的方向。 例如,我知道,我需要使用nFrameType(IFrame,BFrame和PFrame)。 但是我不知道怎么办? 此外,我知道我需要使用宽度和高度来正确解码图像,但是同样,我也不知道该如何处理。

幸运的是,我解决了这个问题。 我在ffmpeg.avcodec_find_decoder(codecID)之前缺少编解码器ffmpeg.avcodec_register_all()注册。 希望它能帮助别人。

暂无
暂无

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

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