H264解碼實戰(zhàn)

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原始數(shù)據(jù),接下來看看代碼實現(xiàn)

2.程序?qū)嵺`

  • 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));

// 輸入緩沖區(qū)的大小
#define IN_DATA_SIZE 4096

FFmpegs::FFmpegs() {

}

static int frameIdx = 0;

static int decode(AVCodecContext *ctx,
                  AVPacket *pkt,
                  AVFrame *frame,
                  QFile &outFile) {
    // 發(fā)送壓縮數(shù)據(jù)到解碼器
    int ret = avcodec_send_packet(ctx, pkt);
    if (ret < 0) {
        ERROR_BUF(ret);
        qDebug() << "avcodec_send_packet error" << errbuf;
        return ret;
    }

    while (true) {
        // 獲取解碼后的數(shù)據(jù)
        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 << "幀";

        // 將解碼后的數(shù)據(jù)寫入文件
        // 寫入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); 連續(xù)內(nèi)存地址
//                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];

//        // 將解碼后的數(shù)據(jù)寫入文件(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;

    // 用來存放讀取的輸入文件數(shù)據(jù)(h264)
    // 加上AV_INPUT_BUFFER_PADDING_SIZE是為了防止某些優(yōu)化過的reader一次性讀取過多導致越界
    char inDataArray[IN_DATA_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
    char *inData = inDataArray;

    // 每次從輸入文件中讀取的長度(h264)
    // 輸入緩沖區(qū)中,剩下的等待進行解碼的有效數(shù)據(jù)長度
    int inLen;
    // 是否已經(jīng)讀取到了輸入文件的尾部
    int inEnd = 0;

    // 文件
    QFile inFile(inFilename);
    QFile outFile(out.filename);

    // 解碼器
    AVCodec *codec = nullptr;
    // 上下文
    AVCodecContext *ctx = nullptr;
    // 解析器上下文
    AVCodecParserContext *parserCtx = nullptr;

    // 存放解碼前的數(shù)據(jù)(h264)
    AVPacket *pkt = nullptr;
    // 存放解碼后的數(shù)據(jù)(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;
    }

    // 創(chuàng)建上下文
    ctx = avcodec_alloc_context3(codec);
    if (!ctx) {
        qDebug() << "avcodec_alloc_context3 error";
        goto end;
    }

    // 創(chuàng)建AVPacket
    pkt = av_packet_alloc();
    if (!pkt) {
        qDebug() << "av_packet_alloc error";
        goto end;
    }

    // 創(chuàng)建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;
    }

    // 讀取文件數(shù)據(jù)
    do {
        inLen = inFile.read(inDataArray, IN_DATA_SIZE);
        // 設置是否到了文件尾部
        inEnd = !inLen;

        // 讓inData指向數(shù)組的首元素
        inData = inDataArray;

        // 只要輸入緩沖區(qū)中還有等待進行解碼的數(shù)據(jù)
        while (inLen > 0 || inEnd) {
            // 到了文件尾部(雖然沒有讀取任何數(shù)據(jù),但也要調(diào)用av_parser_parse2,修復bug)

            // 經(jīng)過解析器解析
            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;
            }

            // 跳過已經(jīng)解析過的數(shù)據(jù)
            inData += ret;
            // 減去已經(jīng)解析過的數(shù)據(jù)大小
            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指向數(shù)組的首元素
//            inData = inDataArray;
//            while (inLen > 0) {
//                // 經(jīng)過解析器解析
//                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;
//                }

//                // 跳過已經(jīng)解析過的數(shù)據(jù)
//                inData += ret;
//                // 減去已經(jīng)解析過的數(shù)據(jù)大小
//                inLen -= ret;

//                // 解碼
//                if (pkt->size > 0 && decode(ctx, pkt, frame, outFile) < 0) {
//                    goto end;
//                }
//            }
//        }

    // 刷新緩沖區(qū)
    //    pkt->data = nullptr;
    //    pkt->size = 0;
    //    decode(ctx, pkt, frame, outFile);
    decode(ctx, nullptr, frame, outFile);

    // 賦值輸出參數(shù)
    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指向數(shù)組的首元素
//    inData = inDataArray;
//            // 經(jīng)過解析器解析
//            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;
//            }

//            // 跳過已經(jīng)解析過的數(shù)據(jù)
//            inData += ret;
//            // 減去已經(jīng)解析過的數(shù)據(jù)大小
//            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)
{
    // 當監(jiān)聽到線程結束時(finished),就調(diào)用deleteLater回收內(nèi)存
        connect(this, &AudioThread::finished,
                this, &AudioThread::deleteLater);
}

AudioThread::~AudioThread() {
    // 斷開所有的連接
    disconnect();
    // 內(nèi)存回收之前,正常結束線程
    requestInterruption();
    // 安全退出
    quit();
    wait();
    qDebug() << this << "析構(內(nèi)存被回收)";
}

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) 析構(內(nèi)存被回收)

我們來驗證一下這些參數(shù)是否正確,首先查看一幁的數(shù)據(jù)是多大

  • 驗證1 整數(shù)據(jù)大小是否和輸出一致
352 * 288 * 1.5 = 152064
這個大小和輸出的一致,說明計算的一幁大小是沒有問題的
  • 驗證2 程序運行和終端運行產(chǎn)出文件是否一致
-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 字節(jié)
另外計算寫入總的大小=幁數(shù) 152064 * 299 = 45467136,這三個大小感覺相差不大,但是為什么會有差值呢?猜測會不會是沒有將一幁的數(shù)據(jù)大小完全寫進去,或者沒有寫完全部幁數(shù)呢,這些和指向YUV的內(nèi)存地址是否連續(xù)有很大的相關性,所以我們對上述的內(nèi)存地址做一次計算,取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]小,按道理來講數(shù)組的內(nèi)存應該是連續(xù)且變大的,但是這里明顯不是?
經(jīng)過一天的摸索,發(fā)現(xiàn)可能是原視頻本身存在問題導致的,所以決定用一個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) 析構(內(nèi)存被回收)

大小對比

-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 -- 程序

可以明顯發(fā)現(xiàn)程序跑出來的比命令行的要小,這個時候接著上面的分析,取出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
如何檢查這個內(nèi)存是否連續(xù)呢?

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(計算方式和存儲方式有關)

出現(xiàn)這種YUV內(nèi)存不連續(xù)的情況,如果按照這樣去寫進文件中,肯定是有問題的,因為有可能我讀到一幁的數(shù)據(jù)是1382400,寫進去的Y數(shù)據(jù)有可能只是921600,這樣就會導致寫進去的數(shù)據(jù)偏小,針對這種情況,我們可以使用直接將Y U V 數(shù)據(jù)大小寫進去測試看看


                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

發(fā)現(xiàn)這樣寫進去的,兩者之間的數(shù)據(jù)更接近了,相減得出1382400 字節(jié),剛剛是差了一幁字節(jié),這一幁字節(jié)是在哪里缺少的呢?緩沖區(qū)又已經(jīng)刷新了,那么只能是里面的while循環(huán)導致的,在網(wǎng)上也能找到的確是會出現(xiàn)這個問題,并且已經(jīng)修復(ffmpeg源碼也是我們代碼這樣寫,有可能在以后的版本中修復了,但是沒有在源碼中更新)https://patchwork.ffmpeg.org/project/ffmpeg/patch/tencent_609A2E9F73AB634ED670392DD89A63400008@qq.com/
按照這個方法,我們將寫入數(shù)據(jù)的循環(huán)更改為:

    do {
        inLen = inFile.read(inDataArray, IN_DATA_SIZE);
        // 設置是否到了文件尾部
        inEnd = !inLen;

        // 讓inData指向數(shù)組的首元素
        inData = inDataArray;

        // 只要輸入緩沖區(qū)中還有等待進行解碼的數(shù)據(jù)
        while (inLen > 0 || inEnd) {
            // 到了文件尾部(雖然沒有讀取任何數(shù)據(jù),但也要調(diào)用av_parser_parse2,修復bug)

            // 經(jīng)過解析器解析
            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;
            }

            // 跳過已經(jīng)解析過的數(shù)據(jù)
            inData += ret;
            // 減去已經(jīng)解析過的數(shù)據(jù)大小
            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 --- 更改之后

可以發(fā)現(xiàn)數(shù)據(jù)已經(jīng)正確了,好了,h264的解碼到此結束

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容