当前位置: 首页 > news >正文

麻涌网站建设/免费注册二级域名的网站

麻涌网站建设,免费注册二级域名的网站,做企业宣传网站,个人可以做下载类网站吗前提 前面我们学习了 将YUV数据读取到AVFrame,然后将AVFrame通过 h264编码器变成 AVPacket后,然后将avpacket直接存储到了本地就变成了h264文件。 这一节课,学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔,也就是变…

前提

前面我们学习了 将YUV数据读取到AVFrame,然后将AVFrame通过 h264编码器变成 AVPacket后,然后将avpacket直接存储到了本地就变成了h264文件。

这一节课,学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔,也就是变成avpacket,前面直接将avpacket存储就能变成h264文件,那么为什么h264文件需要进行帧分隔才能变成avpacket 呢?

这其实很容易理解,我在编码的时候,由于h264编码器在将avframe变成avpacket的时候就是按照h264的格式进行编码的,因此存储下来的就是一个一个的h264格式的编码结构(也就是NALU结构),因此一个avpacket就是一个NALU或者多个NALU,那么直接存储成h264文件,是OK的。

那么如果是我们本地的h264文件要转化成avpacket,我们需要通过 读取文件的形式 将 h264中的一段数据先读取到内存,然后将这段内存转化成avpacket。

问题

读取多少内存才刚好是一个avpacket呢?

如果不是h264,而是h265文件呢?

实际上这个avpacket的大小是不好定义的,更加明确的说明应该是 avpacket中的data 和size 到底是多大,是不好定义的。

ffmpeg 的解决方案:

ffmpeg指定一块内存,比如4096个字节。

每次从h264文件中都读取4096个字节。

然后通过 解析器 来解析这段内存,假设第一个avpacket大小为10000,不够一个avpacket,这时候怎么办呢?实际上 解析器内部是有缓存的,不够10000个字节,就不生成avpacket,还是会读取10000个字节到 解析器内部的缓存。

然后循环再去读 h264文件的下一个4096字节,直到够了10000个字节,就会生成一个avpacket。

假设中间的第一个avpacket大小为100,那么4096个字节中可能有多个avpacket,因此在读取4096字节后,解析器会找到该4096中的第一个avpacket,还需要有一个循环,该循环就是从剩下的3996个字节,在解析

循环的时候,会减去一个avpacket的大小,然后将指针指向减去avpacket大小的位置,再去解析 剩下来的 内存。

代码 mian.cpp

#include <iostream>
#include <fstream>
using namespace std;
extern "C" {#include "libavcodec/avcodec.h"
}char* const h264filename = (char* const)"1920_1080_25.h264";//我们的目的是从 h264文件中 截取avpacket,,也就是对h264进行帧分隔
int main(int argc, const char *argv[]) {ifstream ifs = ifstream(h264filename,ios_base::binary);cout << "main start" << endl;//找到解码器AVCodec* avcodec = avcodec_find_decoder(AV_CODEC_ID_H264);//找到解码器上下文AVCodecContext* avcodecContext = avcodec_alloc_context3(avcodec);//找到解析器上下文AVCodecParserContext*  avcodecParserContext = av_parser_init(AV_CODEC_ID_H264);//打开解码器上下文avcodec_open2(avcodecContext, NULL, NULL);//这里要加一个 AV_INPUT_BUFFER_PADDING_SIZE,是为了某些解码器的buf fix,是ffmepg的要求,但是不会给 AV_INPUT_BUFFER_PADDING_SIZE 中写入数据unsigned char buf[4096+ AV_INPUT_BUFFER_PADDING_SIZE] = { 0 };AVPacket *avpacket = av_packet_alloc();while (!ifs.eof()) {ifs.read((char *)buf, 4096);//打算每次从h264文件中读取4096个字节int realbufreadcount = ifs.gcount(); // 真正读取的字节数if (realbufreadcount<=0) { //如果读取的数据是<=0的,说明整个h264文件已经读取完成了,或者读取h264文件的时候出现了错误了,那么就要直接退出cout << "已经读取到h264文件的最后" << endl;break;}//需要对真正读取的字节数进行解析,有可能这4096个字节中有多个avpacket,//因此要有一个判断决定是否解析完毕了这4096个字节.//这个判断条件就是 读取到的字节数的复制体。int parsebufcount = realbufreadcount;int parseret = 0;auto tempbuf = buf;//让 tempbuf 指向 buf的指针。这里为什么不直接用buf呢?从功能实现上直接用buf也是可以的,但是这是C语言的基本功,尽量不要用原始指针。而是找一个复制的指针。while (parsebufcount > 0 ) {///av_parser_parse2方法解析了多少个字节,从那个指针开始解析(第五个参数),解析多少个字节(第六个参数)parseret = av_parser_parse2(avcodecParserContext,avcodecContext,&avpacket->data,&avpacket->size,tempbuf,parsebufcount,AV_NOPTS_VALUE,AV_NOPTS_VALUE,0);cout << "realbufreadcount = " << realbufreadcount << "  parseret = " << parseret << " avpacket->size = " << avpacket->size << endl;parsebufcount = parsebufcount - parseret; //将解析过的字节减去tempbuf = tempbuf - parseret;//将指针指向还没有解析过的字节的最开始//如果packet的size是大于0的,说明是正常截取了一段avpacket数据if (avpacket->size >0 ) {//如果avpacket 的size 大于0,说明已经有了avpacket了,也就是说,到这里,已经对h264进行了分离,得到了avpacket// 那么下来,我们就需要将 对avpacket进行处理, todo//avpacket数据变成avframe}}}if (ifs) {ifs.close();}if (avpacket!=nullptr) {av_packet_free(&avpacket);}if (avcodecParserContext != nullptr) {av_parser_close(avcodecParserContext);}if (avcodecContext != nullptr) {avcodec_free_context(&avcodecContext);}
}

运行结果:

main start
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1393 avpacket->size = 30065
realbufreadcount = 4096  parseret = 2703 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 297 avpacket->size = 3000
realbufreadcount = 4096  parseret = 594 avpacket->size = 594
realbufreadcount = 4096  parseret = 1188 avpacket->size = 1188
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 528 avpacket->size = 528
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1056 avpacket->size = 1056
realbufreadcount = 4096  parseret = 433 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1612 avpacket->size = 18429
realbufreadcount = 4096  parseret = 2484 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 956 avpacket->size = 3440
realbufreadcount = 4096  parseret = 1912 avpacket->size = 1912
realbufreadcount = 4096  parseret = 1228 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 255 avpacket->size = 1483
realbufreadcount = 4096  parseret = 752 avpacket->size = 752
realbufreadcount = 4096  parseret = 1504 avpacket->size = 1504
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 960 avpacket->size = 960
realbufreadcount = 4096  parseret = 625 avpacket->size = 0
realbufreadcount = 4096  parseret = 1393 avpacket->size = 2018
realbufreadcount = 4096  parseret = 2703 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 3390 avpacket->size = 6093
realbufreadcount = 4096  parseret = 706 avpacket->size = 0
realbufreadcount = 4096  parseret = 3097 avpacket->size = 3803
realbufreadcount = 4096  parseret = 999 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3993 avpacket->size = 13184
realbufreadcount = 4096  parseret = 103 avpacket->size = 0
realbufreadcount = 4096  parseret = 2962 avpacket->size = 3065
realbufreadcount = 4096  parseret = 1134 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1960 avpacket->size = 7190
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 409 avpacket->size = 409
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 818 avpacket->size = 818
realbufreadcount = 4096  parseret = 909 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2940 avpacket->size = 12041
realbufreadcount = 4096  parseret = 1156 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 487 avpacket->size = 1643
realbufreadcount = 4096  parseret = 3609 avpacket->size = 0
realbufreadcount = 4096  parseret = 2448 avpacket->size = 6057
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 897 avpacket->size = 897
realbufreadcount = 4096  parseret = 751 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 460 avpacket->size = 5307
realbufreadcount = 4096  parseret = 920 avpacket->size = 920
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1840 avpacket->size = 1840
realbufreadcount = 4096  parseret = 876 avpacket->size = 0
realbufreadcount = 4096  parseret = 2296 avpacket->size = 3172
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 745 avpacket->size = 745
realbufreadcount = 4096  parseret = 1055 avpacket->size = 0
realbufreadcount = 4096  parseret = 3746 avpacket->size = 4801
realbufreadcount = 4096  parseret = 350 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2298 avpacket->size = 6744
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 747 avpacket->size = 747
realbufreadcount = 4096  parseret = 1051 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 380 avpacket->size = 9623
realbufreadcount = 4096  parseret = 1053 avpacket->size = 1053
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2106 avpacket->size = 2106
realbufreadcount = 4096  parseret = 557 avpacket->size = 0
realbufreadcount = 4096  parseret = 2197 avpacket->size = 2754
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 646 avpacket->size = 646
realbufreadcount = 4096  parseret = 1253 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 3277 avpacket->size = 4530
realbufreadcount = 4096  parseret = 819 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2107 avpacket->size = 7022
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 556 avpacket->size = 556
[h264 @ 017D6740] non-existing PPS 1 referenced
realbufreadcount = 4096  parseret = 1112 avpacket->size = 1112
realbufreadcount = 4096  parseret = 321 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 127 referenced
realbufreadcount = 4096  parseret = 283 avpacket->size = 604
realbufreadcount = 4096  parseret = 3813 avpacket->size = 0
realbufreadcount = 4096  parseret = 2298 avpacket->size = 6111
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 747 avpacket->size = 747
realbufreadcount = 4096  parseret = 1051 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 337 avpacket->size = 5484
realbufreadcount = 4096  parseret = 967 avpacket->size = 967
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1934 avpacket->size = 1934
realbufreadcount = 4096  parseret = 858 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3922 avpacket->size = 8876
realbufreadcount = 4096  parseret = 150 avpacket->size = 150
realbufreadcount = 4096  parseret = 24 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1655 avpacket->size = 5775
realbufreadcount = 4096  parseret = 2441 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1471 avpacket->size = 3912
realbufreadcount = 4096  parseret = 2625 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 3177 avpacket->size = 5802
realbufreadcount = 4096  parseret = 919 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 436 avpacket->size = 5451
realbufreadcount = 4096  parseret = 872 avpacket->size = 872
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1744 avpacket->size = 1744
realbufreadcount = 4096  parseret = 1044 avpacket->size = 0
realbufreadcount = 4096  parseret = 2981 avpacket->size = 4025
realbufreadcount = 4096  parseret = 1115 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3134 avpacket->size = 8345
realbufreadcount = 4096  parseret = 962 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1134 avpacket->size = 6192
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2268 avpacket->size = 2268
realbufreadcount = 4096  parseret = 694 avpacket->size = 0
realbufreadcount = 4096  parseret = 2872 avpacket->size = 3566
realbufreadcount = 4096  parseret = 1224 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 766 avpacket->size = 6086
realbufreadcount = 4096  parseret = 1852 avpacket->size = 1852
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1067 avpacket->size = 1067
realbufreadcount = 4096  parseret = 411 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2142 avpacket->size = 6649
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 591 avpacket->size = 591
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1182 avpacket->size = 1182
realbufreadcount = 4096  parseret = 143 avpacket->size = 143
realbufreadcount = 4096  parseret = 38 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 16 avpacket->size = 4150
realbufreadcount = 4096  parseret = 329 avpacket->size = 329
realbufreadcount = 4096  parseret = 658 avpacket->size = 658
realbufreadcount = 4096  parseret = 1316 avpacket->size = 1316
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 768 avpacket->size = 768
realbufreadcount = 4096  parseret = 1009 avpacket->size = 0
realbufreadcount = 4096  parseret = 1189 avpacket->size = 2198
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2378 avpacket->size = 2378
realbufreadcount = 4096  parseret = 529 avpacket->size = 0
realbufreadcount = 4096  parseret = 3621 avpacket->size = 4150
realbufreadcount = 4096  parseret = 475 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3932 avpacket->size = 8503
realbufreadcount = 4096  parseret = 164 avpacket->size = 0
realbufreadcount = 4096  parseret = 0 avpacket->size = 160
[h264 @ 017D6740] non-existing PPS 2 referenced
realbufreadcount = 4096  parseret = 109 avpacket->size = 113
realbufreadcount = 4096  parseret = 511 avpacket->size = 511
realbufreadcount = 4096  parseret = 1022 avpacket->size = 1022
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2044 avpacket->size = 2044
realbufreadcount = 4096  parseret = 410 avpacket->size = 0
realbufreadcount = 4096  parseret = 1913 avpacket->size = 2323
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 362 avpacket->size = 362
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 724 avpacket->size = 724
realbufreadcount = 4096  parseret = 1097 avpacket->size = 0
realbufreadcount = 4096  parseret = 3498 avpacket->size = 4595
realbufreadcount = 4096  parseret = 598 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1626 avpacket->size = 6320
realbufreadcount = 4096  parseret = 2470 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2310 avpacket->size = 8876
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 759 avpacket->size = 759
realbufreadcount = 4096  parseret = 1027 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 981 avpacket->size = 10200
realbufreadcount = 4096  parseret = 2326 avpacket->size = 2326
realbufreadcount = 4096  parseret = 789 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1160 avpacket->size = 6045
realbufreadcount = 4096  parseret = 2936 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1034 avpacket->size = 8066
realbufreadcount = 4096  parseret = 3062 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2286 avpacket->size = 5348
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 735 avpacket->size = 735
realbufreadcount = 4096  parseret = 1075 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 462 avpacket->size = 5633
realbufreadcount = 4096  parseret = 924 avpacket->size = 924
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 1848 avpacket->size = 1848
realbufreadcount = 4096  parseret = 862 avpacket->size = 0
realbufreadcount = 4096  parseret = 2596 avpacket->size = 3458
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1045 avpacket->size = 1045
realbufreadcount = 4096  parseret = 455 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 620 avpacket->size = 5171
realbufreadcount = 4096  parseret = 1240 avpacket->size = 1240
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 309 avpacket->size = 309
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 618 avpacket->size = 618
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1236 avpacket->size = 1236
realbufreadcount = 4096  parseret = 73 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3233 avpacket->size = 7402
realbufreadcount = 4096  parseret = 863 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 967 avpacket->size = 10022
realbufreadcount = 4096  parseret = 3129 avpacket->size = 0
realbufreadcount = 4096  parseret = 1010 avpacket->size = 4139
realbufreadcount = 4096  parseret = 2306 avpacket->size = 2306
realbufreadcount = 4096  parseret = 780 avpacket->size = 0
realbufreadcount = 4096  parseret = 3158 avpacket->size = 3938
realbufreadcount = 4096  parseret = 938 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 3040 avpacket->size = 12170
realbufreadcount = 4096  parseret = 1056 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2174 avpacket->size = 11422
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 623 avpacket->size = 623
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1246 avpacket->size = 1246
realbufreadcount = 4096  parseret = 53 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2431 avpacket->size = 6580
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 880 avpacket->size = 880
realbufreadcount = 4096  parseret = 785 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1181 avpacket->size = 10158
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2362 avpacket->size = 2362
realbufreadcount = 4096  parseret = 553 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 324 avpacket->size = 13165
realbufreadcount = 4096  parseret = 3772 avpacket->size = 0
realbufreadcount = 4096  parseret = 1810 avpacket->size = 5582
realbufreadcount = 4096  parseret = 2286 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 3615 avpacket->size = 9997
realbufreadcount = 4096  parseret = 481 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1004 avpacket->size = 9677
realbufreadcount = 4096  parseret = 2388 avpacket->size = 2388
realbufreadcount = 4096  parseret = 704 avpacket->size = 0
realbufreadcount = 4096  parseret = 3793 avpacket->size = 4497
realbufreadcount = 4096  parseret = 303 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 127 referenced
realbufreadcount = 4096  parseret = 245 avpacket->size = 548
realbufreadcount = 4096  parseret = 737 avpacket->size = 737
realbufreadcount = 4096  parseret = 1474 avpacket->size = 1474
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 905 avpacket->size = 905
realbufreadcount = 4096  parseret = 735 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 1293 avpacket->size = 10220
realbufreadcount = 4096  parseret = 2803 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 644 avpacket->size = 3447
realbufreadcount = 4096  parseret = 1696 avpacket->size = 1696
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 789 avpacket->size = 789
realbufreadcount = 4096  parseret = 967 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 489 avpacket->size = 9648
realbufreadcount = 4096  parseret = 1332 avpacket->size = 1332
realbufreadcount = 4096  parseret = 2275 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2952 avpacket->size = 9323
realbufreadcount = 4096  parseret = 1144 avpacket->size = 0
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 2549 avpacket->size = 3693
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 998 avpacket->size = 998
realbufreadcount = 4096  parseret = 549 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 2765 avpacket->size = 7410
[h264 @ 017D6740] non-existing PPS 6 referenced
realbufreadcount = 4096  parseret = 1214 avpacket->size = 1214
realbufreadcount = 4096  parseret = 117 avpacket->size = 0
realbufreadcount = 4096  parseret = 4096 avpacket->size = 0
realbufreadcount = 4096  parseret = 131 avpacket->size = 4344
realbufreadcount = 4096  parseret = 515 avpacket->size = 515
realbufreadcount = 4096  parseret = 1030 avpacket->size = 1030
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2060 avpacket->size = 2060
realbufreadcount = 4096  parseret = 360 avpacket->size = 0
realbufreadcount = 4096  parseret = 1041 avpacket->size = 1401
[h264 @ 017D6740] FMO is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
realbufreadcount = 4096  parseret = 2082 avpacket->size = 2082
realbufreadcount = 4096  parseret = 973 avpacket->size = 0
realbufreadcount = 1335  parseret = 1335 avpacket->size = 0

注意的点:

在看 ffmpeg的例子的时候,发现 视频从 h264分帧成为avpacket的代码

和 将 aac 分帧成为 avframe的代码会有不同。

这里要注意。这个区别,在于 在aac分帧的时候,当读取aac文件小于某一个数值的时候,会给内存中不停的加数据,实际上测试对于aac数据 按照视频的写法也是可以的。之所以这么写,是对于其他格式的会有问题,aac实际上没有问题。

相关文章:

FFmpeg 4.3 音视频-多路H265监控录放C++开发十五,解码相关,将h264文件进行帧分隔变成avpacket

前提 前面我们学习了 将YUV数据读取到AVFrame&#xff0c;然后将AVFrame通过 h264编码器变成 AVPacket后&#xff0c;然后将avpacket直接存储到了本地就变成了h264文件。 这一节课&#xff0c;学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔&#xff0c;也就是变…...

力扣 LeetCode 104. 二叉树的最大深度(Day7:二叉树)

解题思路&#xff1a; 采用后序遍历 首先要区别好什么是高度&#xff0c;什么是深度 最大深度实际上就是根节点的高度 高度的求法是从下往上传&#xff0c;从下往上传实际上就是左右中&#xff08;后序遍历&#xff09; 深度的求法是从上往下去寻找 所以采用从下往上 本…...

如何高效实现汤臣倍健营销云数据集成到SQLServer

新版订单同步-&#xff08;Life-Space&#xff09;江油泰熙&#xff1a;汤臣倍健营销云数据集成到SQL Server 在企业信息化建设中&#xff0c;数据的高效集成和管理是提升业务运营效率的关键。本文将分享一个实际案例——如何通过新版订单同步方案&#xff0c;将汤臣倍健营销云…...

Vue3中使用:deep修改element-plus的样式无效怎么办?

前言&#xff1a;当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效&#xff0c;遇到这种情况怎么办&#xff1f; 解决办法&#xff1a; 1.直接在 dialog 上面增加class 我试过&#xff0c;也不起作用&#xff0c;最后用这种…...

具身智能之Isaac Gym使用

0. 简介 Isaac Gym 是由 NVIDIA 提供的一个高性能仿真平台&#xff0c;专门用于大规模的机器人学习和强化学习&#xff08;RL&#xff09;任务。它结合了物理仿真、GPU加速、深度学习框架互操作性等特点&#xff0c;使得研究人员和开发者可以快速进行复杂的机器人仿真和训练。…...

【大数据学习 | Spark】spark-shell开发

spark的代码分为两种 本地代码在driver端直接解析执行没有后续 集群代码&#xff0c;会在driver端进行解析&#xff0c;然后让多个机器进行集群形式的执行计算 spark-shell --master spark://nn1:7077 --executor-cores 2 --executor-memory 2G sc.textFile("/home/ha…...

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果&#xff1a; – 使用Pygame模拟粒子运动&#xff0c;粒子会以爱心的轨迹分布并运动。爱心公式&#xff1a; 爱心的数学公式&#xff1a; x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果&#xff1a; 粒子…...

Jmeter 如何导入证书并调用https请求

Jmeter 如何导入证书并调用https请求 通过SSL管理器添加证书文件 支持添加的文件为.p12&#xff0c;.pfx&#xff0c;.jks 如何将pem文件转换为pfx文件&#xff1f; 在公司内部通常会提供3个pem文件。 ca.pem&#xff1a;可以理解为是根证书&#xff0c;用于验证颁发的证…...

Python程序15个提速优化方法

目录 Python程序15个提速优化方法1. 引言2. 方法一&#xff1a;使用内建函数代码示例&#xff1a;解释&#xff1a; 3. 方法二&#xff1a;避免使用全局变量代码示例&#xff1a;解释&#xff1a; 4. 方法三&#xff1a;使用局部变量代码示例&#xff1a;解释&#xff1a; 5. 方…...

足球虚拟越位线技术FIFA OT(二)

足球虚拟越位线技术FIFA OT&#xff08;二&#xff09; 在FIFA认证测试过程中&#xff0c;留给VAR系统绘制越位线的时间只有90秒&#xff08;在比赛中时间可能更短&#xff09;&#xff0c;那么90秒内要做什么事呢&#xff0c;首先场地上球员做出踢球动作&#xff0c;然后VAR要…...

centos7.9单机版安装K8s

1.安装docker [rootlocalhost ~]# hostnamectl set-hostname master [rootlocalhost ~]# bash [rootmaster ~]# mv /etc/yum.repos.d/* /home [rootmaster ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [rootmaster ~]# cu…...

图像编辑一些概念:Image Reconstruction与Image Re-generation

图像编辑本质上是在“图像重建”&#xff08;image reconstruction&#xff09;和“图像再生成”&#xff08;image re-generation&#xff09;之间寻找平衡。 1. Image Reconstruction&#xff08;图像重建&#xff09; 定义&#xff1a;图像重建通常是指从已有的图像中提取信…...

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…...

【Redis】Redis实现的消息队列

一、用list实现【这是数据类型所以支持持久化】 消息基于redis存储不会因为受jvm内存上限的限制&#xff0c;支持消息的有序性&#xff0c;基于redis的持久化机制&#xff0c;只支持单一消费者订阅&#xff0c;无法避免消息丢失。 二、用PubSub【这不是数据类型&#xff0c;是…...

# Spring事务

Spring事务 什么是spring的事务&#xff1f; 在Spring框架中&#xff0c;事务管理是一种控制数据库操作执行边界的技术&#xff0c;确保一系列操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而维护数据的一致性和完整性。Spring的事务管理主要关注以下几点&#xf…...

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

一&#xff0c;数组翻转 1.概述:数组对称索引位置上的元素互换&#xff0c;最大值数组序号是数组长度减一 创建跳板temp&#xff0c;进行min和max的互换&#xff0c;然后min自增&#xff0c;max自减&#xff0c;当min>max的时候停止互换&#xff0c;代表到中间值 用代码实…...

ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)

文章目录 1、ARM 架构ARM 架构的特点ARM 架构的应用ARM 架构的未来发展 2、RISCRISC 的基本概念RISC 的优势RISC 的应用RISC 与 CISC 的对比总结 1、ARM 架构 ARM 架构是一种低功耗、高性能的处理器架构&#xff0c;广泛应用于移动设备、嵌入式系统以及越来越多的服务器和桌面…...

7.STM32之通信接口《精讲》之USART通信---多字节数据收发(数据包的模式:HEX数据包和文本数据包)

根据上一节的HEX数据包的设计完成&#xff0c;本节将完成文本数据包的编写&#xff0c;&#xff08;HEX数据包其实本质就是原始数据&#xff0c;文本数据包我么要接收到还要对照ASCll进行解析封装&#xff09; 有不懂的可参考上一节的讲解&#xff01;&#xff01;&#xff…...

基于Vue+SpringBoot的求职招聘平台

平台概述 本平台是一个高效、便捷的人才与职位匹配系统&#xff0c;旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色&#xff1a;求职者、招聘者以及超级管理员&#xff0c;每个角色拥有独特的功能模块&#xff0c;确保用户能够轻松完成从信息获取到最终录用的整个…...

WebRTC 和 WebSocket

WebRTC 和 WebSocket 是两种不同的技术&#xff0c;虽然它们都用于在浏览器之间进行通信&#xff0c;但它们的设计目标和使用场景有所不同。以下是它们之间的主要区别&#xff1a; 目的和使用场景 WebRTC: 主要用于实现实时音视频通信。 支持点对点&#xff08;P2P&#xff09…...

小车综合玩法--5.画地为牢

一、实验准备 前面我们利用四路巡线模块巡线&#xff0c;现在我们利用这个特性&#xff0c;用黑线将小车围起来&#xff0c;让小车一直在我们围的圈内运动。 1.小车接线已安装&#xff0c;且安装正确 2.调试四路巡线模块遇黑线时指示灯亮。不是黑线时指示灯灭。 二、实验原理…...

数据库课程设计全流程:方法与实例解析

--- ### 一、数据库课程设计概述 数据库课程设计是学习数据库理论知识的重要实践环节&#xff0c;旨在帮助学生掌握数据库设计和应用系统开发的完整流程&#xff0c;包括需求分析、数据库设计、功能实现以及性能优化。 #### **设计目标** 1. 掌握数据库设计的基本步骤和原则…...

用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。

测试准备&#xff1a;从江河湖海到代码世界的奇妙之旅 亲爱的朋友们&#xff0c;你们好&#xff01;今天我要带你们进入一个神奇的世界——测试的世界。在这里&#xff0c;我们将会看到各种各样的测试用例&#xff0c;它们就像江河湖海一样&#xff0c;汇聚在一起&#xff0c;…...

跳表 | 基本概念 | 代码实现

文章目录 1.跳表的基本概念2.跳表的结构3.跳表的增删改查4.完整代码 1.跳表的基本概念 跳表的本质是一种查找结构&#xff0c;一般查找问题的解法分为两个大类&#xff1a;一个是基于各种平衡树&#xff0c;一个是基于哈希表&#xff0c;跳表比较的特殊&#xff0c;它独成一派…...

分数加减

#include <stdio.h> #include <stdlib.h>// 求最大公因数 int gcd(int a, int b) {return b 0? a : gcd(b, a % b); }// 化简分数 void simplify(int *num, int *den) {int g gcd(*num, *den);*num / g;*den / g;if (*den < 0) {*num * -1;*den * -1;} }//…...

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示&#xff1a; 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面&#xff08;pytorch框架 python源码&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的皮肤病识…...

QT与嵌入式——获取网络实时时间

目录 1、使用QT通过网络API接口获取网络实时时间 1.1、首先在网上找一个获取实时时间的API接口 1.2、 根据第一步获取的链接来发送请求 1.3、通过connect链接信号与槽 注意的点&#xff1a; 2、为什么需要网络实时时间 3、获取本机的实时时间 4、顺带提一句 1、使用QT通过…...

优化装配,提升品质:虚拟装配在汽车制造中的关键作用

汽车是各种零部件的有机结合体&#xff0c;因此汽车的装配工艺水平和装配质量直接影响着汽车的质量与性能。在汽车装配过程中&#xff0c;经常会发生零部件间干涉或装配顺序不合理等现象&#xff0c;且许多零部件制造阶段产生的质量隐患要等到实际装配阶段才能显现出来&#xf…...

Bug的严重等级和优先级别与分类

目录 前言 1. Bug的严重等级定义 2.Bug的优先等级 3.一般 BUG 的正规的处理流程 4.BUG严重等级划分 5.BUG紧急程度定义 前言 Bug是指在软件开发或者系统运行过程中出现的错误、缺陷或者异常情况。它可能导致系统无法正常工作、功能不完整、数据错误或者界面异常等问题。 …...

游戏引擎学习第13天

视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…...