0.解码流程图
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
}
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
#include
extern "C" {
#include
#include
#include
}
#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/[email protected]/
//
// 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
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
#include "ffmpegs.h"
extern "C" {
#include
}
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
#include
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/[email protected]/
按照这个方法,我们将写入数据的循环更改为:
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的解码到此结束