h264 裸流打包成mp4 注意事项
需求: Android 端把网络摄像头的一段正在播放的视频流,截取保存成mp4(按录像按钮时开始录像)。
实现: ffmpeg + x264 + sdl;
h264 裸流 打包成MP4,在网上也有一大堆文章,ffmpeg 也有一个muxing 的 example,大致流程都是一样的,参考ffmpeg的muxing.c 就可以写一个。我这里把我在这个过程中遇到的问题写出来,这些问题困扰了我很久才解决,谁叫我是视频方面的小白呢。
这三个问题其实很简单,但如果对这方面不了解的话,耗掉的时间还是很多的。
1,dts,pts:
在write_frame()之前,每一个avpacket 数据都要设置 dts,pts,因为我的视频没有B帧,所以dts = pts 便可;pts 一开始我也不知道要怎么设, 参考muxing.c,设置成写入的帧数量便可(结合问题3);
2,sps,pps;
我接受到的裸流里面 sps +pps + i帧 是放在一个NALU 里面的,在保存成mp4时这个sps 非常重要,我一开始没有设置,打包后的Mp4 普通的播放器就不能识别;
sps 在创建 编码器时候传递给编码器; sps 是 00 00 00 01 后面的,不包含这个00 00 00 01 这个码;pps 我还没用到。
case AVMEDIA_TYPE_VIDEO:c->codec_id = codec_id;LOGE("add_stream AVMEDIA_TYPE_VIDEO c->time_base.num = %d",ost->st->codec->time_base.num);c->bit_rate = 400000;/* Resolution must be a multiple of two. */c->width = 352;c->height = 288;/* timebase: This is the fundamental unit of time (in seconds) in terms* of which frame timestamps are represented. For fixed-fps content,* timebase should be 1/framerate and timestamp increments should be* identical to 1. */ost->st->time_base = (AVRational){ 1, STREAM_FRAME_RATE};//STREAM_FRAME_RATE };c->time_base =ost->st->time_base;c->gop_size = 12; /* emit one intra frame every twelve frames at most */c->pix_fmt = STREAM_PIX_FMT;if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {/* just for testing, we also add B frames */c->max_b_frames = 2;}if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {/* Needed to avoid using macroblocks in which some coeffs overflow.* This does not happen with normal video, it just happens here as* the motion of the chroma plane does not match the luma plane. */c->mb_decision = 2;}c->extradata = spsinfo;c->extradata_size = 10;break;
3,fps:
在保存成mp4后,调试过程中各种fps都出来了,最后仔细看muxing.c ,发现其实要设置正确很简单:在pts 按1递增后,用一个很简单的函数就解决了这个问题。
c->time_base : 输入的帧率fps = 25 :{1,25},ost->st->time_base : 输出的帧率; 我这里设置和输入的一样就好了。
packet->pts = (ptsInc++);;// * (90000/STREAM_FRAME_RATE);packet->dts = packet->pts;// packet->duration = 8/1000000;// packet->pos = -1;//ptsInc;av_packet_rescale_ts(packet, c->time_base, ost->st->time_base);
https://blog.csdn.net/xqt8888/article/details/43152529
h264 裸流打包成mp4 注意事项相关推荐
- ffmpeg实现将H264裸流封装成.mp4或.avi文件
ffmpeg学习历程 由于我是移植到arm-linux环境(海思HI3521A),H264裸流直接从海思的编码模块VENC获取. H264数据流序列: SPS, PPS, SEI, I, P, ...
- 将H264码流打包成RTP包
分类: 流媒体(25) 版权声明:本文为博主原创文章,未经博主允许不得转载. H264码流打包成RTP包的代码如下: [cpp] view plaincopy #include <stdio.h ...
- H264码流打包成RTP包
http://blog.csdn.net/tanningzhong/article/details/53281986 H264码流打包成RTP包的代码如下: [cpp] view plaincopy ...
- H264和音频流打包成PS流 (MPEG2-PS)
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80736848 [本系列相关文章] H26 ...
- H264和音频流打包成TS流 (MPEG2-TS)
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80865920 [本系列相关文章] H26 ...
- FFmpeg解码H264裸流并转换成opencv Mat
感谢雷霄骅博士的在中文视频编解码的付出,http://blog.csdn.net/leixiaohua1020 最近要搞一些视频推流的事情,要解析H264裸流并且获取opencv格式的Mat数据给算法 ...
- H264码流打包分析(精华)
H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit" ...
- RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...
- 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...
最新文章
- Tslib移植与分析【转】
- 为什么集群要奇数_面试系列 redis数据删除amp;集群
- Careercup | Chapter 4
- U811.1接口EAI系列之一--通用把XML传送给EAI处理方法--PowerBuilder语言
- 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁
- 【Python】ffmpeg模块处理视频、音频信息
- 分享一下我制作的Bat批处理程序-PC Tools(含源码)
- Spring学习-Bean的理解
- 回文联对联大全_回文对联大全
- popupwindow拦截点击物理返回键
- 《UVM实战卷Ⅰ》学习笔记 第五章 UVM验证平台的运行
- 微信闪退的修复方法分享
- python数据分析实战之超市零售分析
- win12服务器文件设置只读,高手亲自讲解win10文件夹只读属性改不了的修复办法...
- win10安装keras theano
- 行云管家:专注多云混合云,树立一站式云管平台行业标杆
- POI生成word文档,再通过spire.doc.free 实现word转pdf
- Type-c 充电听歌二合一转接器方案
- 三年硬件工程师薪水_关于“硬件工程师工资不高”的几个真相
- 用户和用户组变成了数字
热门文章
- Python2和Python3除法差别
- 超市管理系统java swing+mysql报告_基于java+swing+mysql的超市管理系统
- 前端篇--------1.css学习笔记
- 【多线程】C++11进行多线程开发 (std::thread)
- Android Studio如何发布APK
- 统计学习笔记(1)——统计学习方法概论
- Git远程:分支的upstream
- 编码练习——Java-8-输入/输出
- Serializable java序列化
- 美团O2O排序解决方案——线下篇