美文网首页
H264解码实战

H264解码实战

作者: coder_feng | 来源:发表于2021-06-14 12:53 被阅读0次

    0.解码流程图

    视频解码.png

    1.命令行解码

     songlin@feng-sl  ~/audio/h264_decode   master ±✚  ffmpeg -c:v h264 -i 352x288-yuv420p.h264 352x288-yuv420pCommand.yuv
    ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
      built with Apple clang version 12.0.0 (clang-1200.0.32.29)
      configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.2_4 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
      libavutil      56. 51.100 / 56. 51.100
      libavcodec     58. 91.100 / 58. 91.100
      libavformat    58. 45.100 / 58. 45.100
      libavdevice    58. 10.100 / 58. 10.100
      libavfilter     7. 85.100 /  7. 85.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  7.100 /  5.  7.100
      libswresample   3.  7.100 /  3.  7.100
      libpostproc    55.  7.100 / 55.  7.100
    Input #0, h264, from '352x288-yuv420p.h264':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: h264 (High), yuv420p(progressive), 352x288, 25 fps, 25 tbr, 1200k tbn, 50 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
    Press [q] to stop, [?] for help
    Output #0, rawvideo, to '352x288-yuv420pCommand.yuv':
      Metadata:
        encoder         : Lavf58.45.100
        Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 352x288, q=2-31, 30412 kb/s, 25 fps, 25 tbn, 25 tbc
        Metadata:
          encoder         : Lavc58.91.100 rawvideo
    frame=  300 fps=0.0 q=-0.0 Lsize=   44550kB time=00:00:12.00 bitrate=30412.8kbits/s speed=12.3x
    video:44550kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
     songlin@feng-sl  ~/audio/h264_decode   master ±✚  ls -l
    # -c:v h264是指定使用h264作为解码器
    -rw-r--r--@ 1 songlin  staff    147325 Jun 12 11:16 352x288-yuv420p.h264
    -rw-r--r--  1 songlin  staff  45619200 Jun 12 15:57 352x288-yuv420pCommand.yuv
    

    可以看到命令行成功还算了h264 为yuv原始数据,接下来看看代码实现

    2.程序实践

    • ffmpeg.h
    #ifndef FFMPEGS_H
    #define FFMPEGS_H
    
    extern "C"{
    #include <libavutil/avutil.h>
    }
    
    typedef struct {
        const char *filename;
        int width;
        int height;
        AVPixelFormat pixFmt;
        int fps;
    } VideoDecodeSpec;
    
    class FFmpegs
    {
    public:
        FFmpegs();
    
        static void h264Decode(const char *inFilename,
                               VideoDecodeSpec &out);
    };
    
    #endif // FFMPEGS_H
    
    
    • ffmpegs.cpp
    #include "ffmpegs.h"
    #include <QDebug>
    #include <QFile>
    
    extern "C" {
    #include <libavcodec/avcodec.h>
    #include <libavutil/avutil.h>
    #include <libavutil/imgutils.h>
    }
    
    #define ERROR_BUF(ret) \
        char errbuf[1024]; \
        av_strerror(ret, errbuf, sizeof (errbuf));
    
    // 输入缓冲区的大小
    #define IN_DATA_SIZE 4096
    
    FFmpegs::FFmpegs() {
    
    }
    
    static int frameIdx = 0;
    
    static int decode(AVCodecContext *ctx,
                      AVPacket *pkt,
                      AVFrame *frame,
                      QFile &outFile) {
        // 发送压缩数据到解码器
        int ret = avcodec_send_packet(ctx, pkt);
        if (ret < 0) {
            ERROR_BUF(ret);
            qDebug() << "avcodec_send_packet error" << errbuf;
            return ret;
        }
    
        while (true) {
            // 获取解码后的数据
            ret = avcodec_receive_frame(ctx, frame);
            if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
                return 0;
            } else if (ret < 0) {
                ERROR_BUF(ret);
                qDebug() << "avcodec_receive_frame error" << errbuf;
                return ret;
            }
    
            qDebug() << "解码出第" << ++frameIdx << "帧";
    
            // 将解码后的数据写入文件
            // 写入Y平面
    //        outFile.write((char *) frame->data[0],
    //                      frame->linesize[0] * ctx->height);
    //        // 写入U平面
    //        outFile.write((char *) frame->data[1],
    //                      frame->linesize[1] * ctx->height >> 1);
    //        // 写入V平面
    //        outFile.write((char *) frame->data[2],
    //                      frame->linesize[2] * ctx->height >> 1);
    
                 /*   outFile.write((char *) frame->data[0],
                                  921600);
                    // 写入U平面
                    outFile.write((char *) frame->data[1],
                                  230400);
                    // 写入V平面
                    outFile.write((char *) frame->data[2],
                                  230400);
    //       qDebug() << frame->linesize[0] * ctx->height << (frame->linesize[1] * ctx->height >> 1) << (frame->linesize[2] * ctx->height >> 1);
    //        return 0;
    //  av_image_alloc(frame->data,frame->linesize,1280,720,AV_PIX_FMT_YUV420P,1); 连续内存地址
    //                return;
    
    
            /*
             * frame->data[0] 0x7ffea128c000
             * frame->data[1] 0x7ffea1d33000
             * frame->data[2] 0x7ffea1d6d000
             *
             * frame->data[1] - frame->data[0] = 11169792 = y平面的大小
             * frame->data[2] - frame->data[1] = 237568 = u平面的大小
             *
             * y平面的大小 1280*720*1 = 921600
             * u平面的大小 1280*720*0.25 = 230400
             * v平面的大小 1280*720*0.25 =  230400
             */
     qDebug() << frame->data[0] << frame->data[1] << frame->data[2];
    
    //        // 将解码后的数据写入文件(1382400)
            int imgSize = av_image_get_buffer_size(ctx->pix_fmt, ctx->width, ctx->height, 1);
            qDebug() << "输出一幁的大小" << imgSize;
    //        // outFile.write((char *) frame->data[0], frame->linesize[0]);
            outFile.write((char *) frame->data[0], imgSize);
        }
    }
    
    void FFmpegs::h264Decode(const char *inFilename,
                             VideoDecodeSpec &out) {
        // 返回结果
        int ret = 0;
    
        // 用来存放读取的输入文件数据(h264)
        // 加上AV_INPUT_BUFFER_PADDING_SIZE是为了防止某些优化过的reader一次性读取过多导致越界
        char inDataArray[IN_DATA_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
        char *inData = inDataArray;
    
        // 每次从输入文件中读取的长度(h264)
        // 输入缓冲区中,剩下的等待进行解码的有效数据长度
        int inLen;
        // 是否已经读取到了输入文件的尾部
        int inEnd = 0;
    
        // 文件
        QFile inFile(inFilename);
        QFile outFile(out.filename);
    
        // 解码器
        AVCodec *codec = nullptr;
        // 上下文
        AVCodecContext *ctx = nullptr;
        // 解析器上下文
        AVCodecParserContext *parserCtx = nullptr;
    
        // 存放解码前的数据(h264)
        AVPacket *pkt = nullptr;
        // 存放解码后的数据(yuv)
        AVFrame *frame = nullptr;
    
        // 获取解码器
        //    codec = avcodec_find_decoder_by_name("h264");
        codec = avcodec_find_decoder(AV_CODEC_ID_H264);
        if (!codec) {
            qDebug() << "decoder not found";
            return;
        }
    
        // 初始化解析器上下文
        parserCtx = av_parser_init(codec->id);
        if (!parserCtx) {
            qDebug() << "av_parser_init error";
            return;
        }
    
        // 创建上下文
        ctx = avcodec_alloc_context3(codec);
        if (!ctx) {
            qDebug() << "avcodec_alloc_context3 error";
            goto end;
        }
    
        // 创建AVPacket
        pkt = av_packet_alloc();
        if (!pkt) {
            qDebug() << "av_packet_alloc error";
            goto end;
        }
    
        // 创建AVFrame
        frame = av_frame_alloc();
        if (!frame) {
            qDebug() << "av_frame_alloc error";
            goto end;
        }
    
        // 打开解码器
        ret = avcodec_open2(ctx, codec, nullptr);
        if (ret < 0) {
            ERROR_BUF(ret);
            qDebug() << "avcodec_open2 error" << errbuf;
            goto end;
        }
    
        // 打开文件
        if (!inFile.open(QFile::ReadOnly)) {
            qDebug() << "file open error:" << inFilename;
            goto end;
        }
        if (!outFile.open(QFile::WriteOnly)) {
            qDebug() << "file open error:" << out.filename;
            goto end;
        }
    
        // 读取文件数据
        do {
            inLen = inFile.read(inDataArray, IN_DATA_SIZE);
            // 设置是否到了文件尾部
            inEnd = !inLen;
    
            // 让inData指向数组的首元素
            inData = inDataArray;
    
            // 只要输入缓冲区中还有等待进行解码的数据
            while (inLen > 0 || inEnd) {
                // 到了文件尾部(虽然没有读取任何数据,但也要调用av_parser_parse2,修复bug)
    
                // 经过解析器解析
                ret = av_parser_parse2(parserCtx, ctx,
                                       &pkt->data, &pkt->size,
                                       (uint8_t *) inData, inLen,
                                       AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
    
                if (ret < 0) {
                    ERROR_BUF(ret);
                    qDebug() << "av_parser_parse2 error" << errbuf;
                    goto end;
                }
    
                // 跳过已经解析过的数据
                inData += ret;
                // 减去已经解析过的数据大小
                inLen -= ret;
    
                qDebug() << inEnd << pkt->size << ret;
    
                // 解码
                if (pkt->size > 0 && decode(ctx, pkt, frame, outFile) < 0) {
                    goto end;
                }
    
                // 如果到了文件尾部
                if (inEnd) break;
            }
        } while (!inEnd);
    //        while ((inLen = inFile.read(inDataArray, IN_DATA_SIZE)) > 0){
    //            // 让inData指向数组的首元素
    //            inData = inDataArray;
    //            while (inLen > 0) {
    //                // 经过解析器解析
    //                ret = av_parser_parse2(parserCtx, ctx,
    //                                       &pkt->data, &pkt->size,
    //                                       (uint8_t *) inData, inLen,
    //                                       AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
    
    //                if (ret < 0) {
    //                    ERROR_BUF(ret);
    //                    qDebug() << "av_parser_parse2 error" << errbuf;
    //                    goto end;
    //                }
    
    //                // 跳过已经解析过的数据
    //                inData += ret;
    //                // 减去已经解析过的数据大小
    //                inLen -= ret;
    
    //                // 解码
    //                if (pkt->size > 0 && decode(ctx, pkt, frame, outFile) < 0) {
    //                    goto end;
    //                }
    //            }
    //        }
    
        // 刷新缓冲区
        //    pkt->data = nullptr;
        //    pkt->size = 0;
        //    decode(ctx, pkt, frame, outFile);
        decode(ctx, nullptr, frame, outFile);
    
        // 赋值输出参数
        out.fps = ctx->framerate.num;
        out.width = ctx->width;
        out.height = ctx->height;
        out.pixFmt = ctx->pix_fmt;
        // 用framerate.num获取帧率,并不是time_base.den
    
    end:
        inFile.close();
        outFile.close();
        av_packet_free(&pkt);
        av_frame_free(&frame);
        av_parser_close(parserCtx);
        avcodec_free_context(&ctx);
    
    // bug fix
    // https://patchwork.ffmpeg.org/project/ffmpeg/patch/tencent_609A2E9F73AB634ED670392DD89A63400008@qq.com/
    
    //
    //    while ((inLen = inFile.read(inDataArray, IN_DATA_SIZE)) > 0){
    //        while (inLen > 0) {
        // 让inData指向数组的首元素
    //    inData = inDataArray;
    //            // 经过解析器解析
    //            ret = av_parser_parse2(parserCtx, ctx,
    //                                   &pkt->data, &pkt->size,
    //                                   (uint8_t *) inData, inLen,
    //                                   AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
    
    //            if (ret < 0) {
    //                ERROR_BUF(ret);
    //                qDebug() << "av_parser_parse2 error" << errbuf;
    //                goto end;
    //            }
    
    //            // 跳过已经解析过的数据
    //            inData += ret;
    //            // 减去已经解析过的数据大小
    //            inLen -= ret;
    
    //            // 解码
    //            if (pkt->size > 0 && decode(ctx, pkt, frame, outFile) < 0) {
    //                goto end;
    //            }
    //        }
    //    }
    }
    
    
    
    • audiothread.h
    #ifndef AUDIOTHREAD_H
    #define AUDIOTHREAD_H
    
    #include <QThread>
    
    class AudioThread : public QThread
    {
        Q_OBJECT
    public:
        explicit AudioThread(QObject *parent = nullptr);
        ~AudioThread();
    private:
        void run();
    
    signals:
    
    };
    
    #endif // AUDIOTHREAD_H
    
    
    • audiothread.cpp
    #include "audiothread.h"
    #include <QDebug>
    #include "ffmpegs.h"
    
    extern "C" {
    #include <libavutil/imgutils.h>
    }
    
    AudioThread::AudioThread(QObject *parent) : QThread(parent)
    {
        // 当监听到线程结束时(finished),就调用deleteLater回收内存
            connect(this, &AudioThread::finished,
                    this, &AudioThread::deleteLater);
    }
    
    AudioThread::~AudioThread() {
        // 断开所有的连接
        disconnect();
        // 内存回收之前,正常结束线程
        requestInterruption();
        // 安全退出
        quit();
        wait();
        qDebug() << this << "析构(内存被回收)";
    }
    
    void AudioThread::run() {
        VideoDecodeSpec out;
        out.filename = "/Users/songlin/audio/h264_decode/352x288-yuv420p-program.yuv";
    
        FFmpegs::h264Decode("/Users/songlin/audio/h264_decode/352x288-yuv420p.h264", out);
    
        qDebug() << out.width << out.height
                 << out.fps << av_get_pix_fmt_name(out.pixFmt);
    }
    
    
    • mainwindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    #include <audiothread.h>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private slots:
        void on_audioButton_clicked();
    
    private:
        Ui::MainWindow *ui;
         AudioThread *_audioThread = nullptr;
    };
    #endif // MAINWINDOW_H
    
    
    • mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    void MainWindow::on_audioButton_clicked()
    {
        _audioThread = new AudioThread(this);
        _audioThread->start();
    }
    
    
    2.1 查看实践结果

    程序生成文件小于命令行生成文件的问题

    解码出第 1 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 2 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 3 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 4 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 5 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 6 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 7 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 8 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 9 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 10 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 11 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 12 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 13 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 14 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 15 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 16 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 17 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 18 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 19 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 20 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 21 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 22 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 23 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 24 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 25 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 26 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 27 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 28 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 29 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 30 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 31 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 32 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 33 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 34 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 35 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 36 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 37 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 38 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 39 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 40 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 41 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 42 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 43 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 44 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 45 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 46 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 47 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 48 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 49 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 50 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 51 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 52 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 53 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 54 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 55 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 56 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 57 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 58 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 59 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 60 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 61 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 62 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 63 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 64 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 65 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 66 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 67 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 68 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 69 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 70 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 71 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 72 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 73 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 74 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 75 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 76 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 77 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 78 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 79 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 80 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 81 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 82 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 83 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 84 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 85 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 86 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 87 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 88 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 89 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 90 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 91 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 92 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 93 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 94 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 95 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 96 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 97 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 98 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 99 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 100 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 101 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 102 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 103 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 104 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 105 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 106 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 107 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 108 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 109 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 110 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 111 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 112 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 113 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 114 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 115 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 116 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 117 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 118 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 119 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 120 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 121 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 122 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 123 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 124 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 125 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 126 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 127 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 128 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 129 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 130 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 131 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 132 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 133 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 134 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 135 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 136 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 137 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 138 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 139 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 140 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 141 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 142 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 143 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 144 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 145 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 146 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 147 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 148 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 149 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 150 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 151 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 152 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 153 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 154 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 155 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 156 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 157 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 158 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 159 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 160 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 161 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 162 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 163 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 164 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 165 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 166 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 167 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 168 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 169 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 170 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 171 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 172 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 173 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 174 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 175 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 176 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 177 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 178 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 179 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 180 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 181 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 182 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 183 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 184 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 185 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 186 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 187 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 188 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 189 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 190 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 191 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 192 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 193 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 194 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 195 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 196 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 197 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 198 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 199 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 200 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 201 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 202 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 203 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 204 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 205 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 206 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 207 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 208 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 209 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 210 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 211 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 212 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 213 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 214 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 215 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 216 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 217 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 218 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 219 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 220 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 221 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 222 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 223 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 224 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 225 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 226 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 227 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 228 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 229 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 230 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 231 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 232 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 233 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 234 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 235 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 236 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 237 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 238 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 239 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 240 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 241 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 242 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 243 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 244 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 245 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 246 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 247 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 248 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 249 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 250 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 251 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 252 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 253 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 254 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 255 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 256 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 257 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 258 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 259 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 260 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 261 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 262 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 263 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 264 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 265 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 266 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 267 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 268 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 269 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 270 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 271 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 272 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 273 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 274 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 275 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 276 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 277 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 278 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 279 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 280 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 281 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 282 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 283 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 284 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 285 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 286 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 287 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 288 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 289 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 290 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 291 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 292 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    解码出第 293 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 294 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 295 帧
    一幁的大小是 152064
    0x7fa4888b8000 0x7fa48714e600 0x7fa487155400
    解码出第 296 帧
    一幁的大小是 152064
    0x7fa48ccd3000 0x7fa4878ad600 0x7fa4878b4400
    解码出第 297 帧
    一幁的大小是 152064
    0x7fa488898000 0x7fa48712c800 0x7fa487133600
    解码出第 298 帧
    一幁的大小是 152064
    0x7fa488858000 0x7fa487183600 0x7fa48718a400
    解码出第 299 帧
    一幁的大小是 152064
    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    输出格式 352 288 25 yuv420p
    AudioThread(0x7fa488b05f90) 析构(内存被回收)
    

    我们来验证一下这些参数是否正确,首先查看一幁的数据是多大

    • 验证1 整数据大小是否和输出一致
    352 * 288 * 1.5 = 152064
    这个大小和输出的一致,说明计算的一幁大小是没有问题的
    
    • 验证2 程序运行和终端运行产出文件是否一致
    -rw-r--r--  1 songlin  staff  43144704 Jun 12 16:43 352x288-yuv420p-program.yuv
    -rw-r--r--@ 1 songlin  staff    147325 Jun 12 11:16 352x288-yuv420p.h264
    -rw-r--r--  1 songlin  staff  45619200 Jun 12 15:57 352x288-yuv420pCommand.yuv
    

    可以看命令行生成的文件要比程序代码生成的要大45619200 - 43144704 = 2474496 字节
    另外计算写入总的大小=幁数 152064 * 299 = 45467136,这三个大小感觉相差不大,但是为什么会有差值呢?猜测会不会是没有将一幁的数据大小完全写进去,或者没有写完全部幁数呢,这些和指向YUV的内存地址是否连续有很大的相关性,所以我们对上述的内存地址做一次计算,取299幁的来计算

    0x7fa488878000 0x7fa487168e00 0x7fa48716fc00
    * frame->data[0] 0x8878000
    * frame->data[1] 0x87168e00
    * frame->data[2] 0x8716fc00
    

    看到这里我分析不下去了,因为不知道为什么frame->data[1] 比frame->data[0] 小,又比frame->data[2]小,按道理来讲数组的内存应该是连续且变大的,但是这里明显不是?
    经过一天的摸索,发现可能是原视频本身存在问题导致的,所以决定用一个mp4的视频,进行转码变成原始yuv来测试

    mp4------>yuv yuv------>h264 h 264------->yuv 测试

    • mp4 转yuv
    ffmpeg -ss 00:00 -i in.mp4 -t 10 -c:v copy -c:a copy 10s.mp4
    ffmpeg -c:v h264 -i 10.mp4 mp4.yuv
    
    • yuv 转h264
    ffmpeg -s 1280x720 -pix_fmt yuv420p -i mp4.yuv -c:v libx264 mp4.h264
    
    • h264 转yuv
    • 命令行 ffmpeg -c:v h264 -i mp4.h264 mp4Command.yuv
    • 程序
    解码出第 1 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 2 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 3 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 4 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 5 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 6 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 7 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 8 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 9 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 10 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 11 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 12 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 13 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 14 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 15 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 16 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 17 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 18 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 19 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 20 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 21 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 22 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 23 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 24 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 25 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 26 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 27 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 28 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 29 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 30 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 31 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 32 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 33 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 34 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 35 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 36 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 37 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 38 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 39 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 40 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 41 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 42 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 43 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 44 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 45 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 46 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 47 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 48 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 49 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 50 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 51 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 52 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 53 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 54 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 55 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 56 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 57 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 58 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 59 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 60 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 61 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 62 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 63 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 64 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 65 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 66 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 67 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 68 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 69 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 70 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 71 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 72 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 73 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 74 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 75 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 76 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 77 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 78 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 79 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 80 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 81 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 82 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 83 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 84 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 85 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 86 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 87 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 88 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 89 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 90 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 91 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 92 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 93 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 94 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 95 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 96 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 97 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 98 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 99 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 100 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 101 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 102 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 103 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 104 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 105 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 106 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 107 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 108 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 109 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 110 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 111 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 112 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 113 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 114 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 115 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 116 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 117 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 118 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 119 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 120 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 121 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 122 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 123 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 124 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 125 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 126 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 127 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 128 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 129 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 130 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 131 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 132 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 133 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 134 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 135 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 136 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 137 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 138 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 139 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 140 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 141 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 142 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 143 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 144 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 145 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 146 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 147 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 148 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 149 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 150 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 151 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 152 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 153 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 154 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 155 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 156 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 157 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 158 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 159 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 160 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 161 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 162 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 163 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 164 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 165 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 166 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 167 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 168 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 169 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 170 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 171 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 172 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 173 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 174 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 175 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 176 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 177 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 178 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 179 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 180 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 181 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 182 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 183 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 184 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 185 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 186 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 187 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 188 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 189 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 190 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 191 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 192 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 193 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 194 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 195 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 196 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 197 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 198 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 199 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 200 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 201 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 202 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 203 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 204 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 205 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 206 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 207 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 208 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 209 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 210 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 211 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 212 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 213 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 214 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 215 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 216 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 217 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 218 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 219 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 220 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 221 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 222 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 223 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 224 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 225 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 226 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 227 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 228 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 229 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 230 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 231 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 232 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 233 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 234 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 235 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 236 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 237 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 238 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 239 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 240 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 241 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 242 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 243 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 244 帧
    0x7ffea1fe5000 0x7ffea20cc000 0x7ffea2106000
    输出一幁的大小 1382400
    解码出第 245 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    解码出第 246 帧
    0x7ffea15a4000 0x7ffea1e19000 0x7ffea1e53000
    输出一幁的大小 1382400
    解码出第 247 帧
    0x7ffea1100000 0x7ffea1c2c000 0x7ffea1c66000
    输出一幁的大小 1382400
    解码出第 248 帧
    0x7ffea1418000 0x7ffea1eff000 0x7ffea1f39000
    输出一幁的大小 1382400
    解码出第 249 帧
    0x7ffea128c000 0x7ffea1d33000 0x7ffea1d6d000
    输出一幁的大小 1382400
    输出格式 1280 720 25 yuv420p
    AudioThread(0x7ffe9bce2950) 析构(内存被回收)
    

    大小对比

    -rw-r--r--  1 songlin  staff  345600000 Jun 14 08:58 mp4Command.yuv -- 命令行
    -rw-r--r--  1 songlin  staff  344317200 Jun 14 08:46 lessmp4-program.yuv -- 程序
    

    可以明显发现程序跑出来的比命令行的要小,这个时候接着上面的分析,取出frame->data[0],frame->data[1],frame->data[2] 的地址(用最后一幁来说明)

    一幁的大小: 1280 * 720 * 1.5 = 1382400,和程序运行的是一样的
    frame->data[0]:0x7ffea128c000 
    frame->data[1]:0x7ffea1d33000 
    frame->data[2]:0x7ffea1d6d000
    如何检查这个内存是否连续呢?
    
    frame->data[1] - frame->data[0] = 11169792 = y平面的大小
    frame->data[2] - frame->data[1] = 237568 = u平面的大小
    
     y平面的大小 1280*720*1 = 921600(计算方式和存储方式有关)
    u平面的大小 1280*720*0.25 = 230400(计算方式和存储方式有关)
    v平面的大小 1280*720*0.25 =  230400(计算方式和存储方式有关)
    

    出现这种YUV内存不连续的情况,如果按照这样去写进文件中,肯定是有问题的,因为有可能我读到一幁的数据是1382400,写进去的Y数据有可能只是921600,这样就会导致写进去的数据偏小,针对这种情况,我们可以使用直接将Y U V 数据大小写进去测试看看

    
                    outFile.write((char *) frame->data[0],
                                  921600);
                    // 写入U平面
                    outFile.write((char *) frame->data[1],
                                  230400);
                    // 写入V平面
                    outFile.write((char *) frame->data[2],
                                  230400);
    

    测试结果:

    -rw-r--r--  1 songlin  staff  345600000 Jun 14 08:58 mp4Command.yuv
    -rw-r--r--  1 songlin  staff  344217600 Jun 14 09:37 test-program.yuv
    

    发现这样写进去的,两者之间的数据更接近了,相减得出1382400 字节,刚刚是差了一幁字节,这一幁字节是在哪里缺少的呢?缓冲区又已经刷新了,那么只能是里面的while循环导致的,在网上也能找到的确是会出现这个问题,并且已经修复(ffmpeg源码也是我们代码这样写,有可能在以后的版本中修复了,但是没有在源码中更新)https://patchwork.ffmpeg.org/project/ffmpeg/patch/tencent_609A2E9F73AB634ED670392DD89A63400008@qq.com/
    按照这个方法,我们将写入数据的循环更改为:

        do {
            inLen = inFile.read(inDataArray, IN_DATA_SIZE);
            // 设置是否到了文件尾部
            inEnd = !inLen;
    
            // 让inData指向数组的首元素
            inData = inDataArray;
    
            // 只要输入缓冲区中还有等待进行解码的数据
            while (inLen > 0 || inEnd) {
                // 到了文件尾部(虽然没有读取任何数据,但也要调用av_parser_parse2,修复bug)
    
                // 经过解析器解析
                ret = av_parser_parse2(parserCtx, ctx,
                                       &pkt->data, &pkt->size,
                                       (uint8_t *) inData, inLen,
                                       AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
    
                if (ret < 0) {
                    ERROR_BUF(ret);
                    qDebug() << "av_parser_parse2 error" << errbuf;
                    goto end;
                }
    
                // 跳过已经解析过的数据
                inData += ret;
                // 减去已经解析过的数据大小
                inLen -= ret;
    
                qDebug() << inEnd << pkt->size << ret;
    
                // 解码
                if (pkt->size > 0 && decode(ctx, pkt, frame, outFile) < 0) {
                    goto end;
                }
    
                // 如果到了文件尾部
                if (inEnd) break;
            }
        } while (!inEnd);
    

    结果对比:

    -rw-r--r--  1 songlin  staff  345600000 Jun 14 08:58 mp4Command.yuv
    -rw-r--r--  1 songlin  staff  344217600 Jun 14 09:37 test-program.yuv
    -rw-r--r--  1 songlin  staff  345600000 Jun 14 09:46 after-program.yuv --- 更改之后
    

    可以发现数据已经正确了,好了,h264的解码到此结束

    相关文章

      网友评论

          本文标题:H264解码实战

          本文链接:https://www.haomeiwen.com/subject/mqxieltx.html