社区
多媒体/流媒体开发
帖子详情
用MP4V2库封装MP4时,时间戳怎么转换呢?
qingfeng_happy7
2016-05-31 09:10:28
使用场景是软件实时采集摄像机信号,然后将视频编码为H.264,音频编码为AAC,然后用MP4V2库将音视频封装成MP4文件保存。现在遇到的问题是调用MP4V2的接口时,时间戳不知道该怎么转换。不做转换的话我试了一下,播放出来音视频严重不同步。
编码完的H.264和AAC数据帧的时间基应该都是基于90000的,有资料上说封装MP4时音视频是采用不同的时间基,分别是什么?在写入H264和AAC数据时,写入规则是什么样的,是哪个时间戳小就先写入哪个吗?
...全文
732
7
打赏
收藏
用MP4V2库封装MP4时,时间戳怎么转换呢?
使用场景是软件实时采集摄像机信号,然后将视频编码为H.264,音频编码为AAC,然后用MP4V2库将音视频封装成MP4文件保存。现在遇到的问题是调用MP4V2的接口时,时间戳不知道该怎么转换。不做转换的话我试了一下,播放出来音视频严重不同步。 编码完的H.264和AAC数据帧的时间基应该都是基于90000的,有资料上说封装MP4时音视频是采用不同的时间基,分别是什么?在写入H264和AAC数据时,写入规则是什么样的,是哪个时间戳小就先写入哪个吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
boy_going
2018-07-17
打赏
举报
回复
能否指教一下音频怎么播放的,我用mp4v2转换的mp4无法播放音频,查了很多资料都没看出哪有问题
chenchao_shenzhen
2016-06-21
打赏
举报
回复
http://blog.csdn.net/chenchao_shenzhen/article/details/51720005
chenchao_shenzhen
2016-06-21
打赏
举报
回复
所有问题的答案都在这里有详尽解答: http://edu.csdn.net/course/detail/2314
rightorwrong
2016-06-01
打赏
举报
回复
视频设置的是帧率,音频那个字段是什么,设置的多少
qingfeng_happy7
2016-05-31
打赏
举报
回复
自己顶一下。
qingfeng_happy7
2016-05-31
打赏
举报
回复
引用 2 楼 rightorwrong 的回复:
好像是有个文件头,设置个时间信息,然后数据直接写就可以了
我试过了,那样做音视频都可以正常播放,但不同步。
rightorwrong
2016-05-31
打赏
举报
回复
好像是有个文件头,设置个时间信息,然后数据直接写就可以了
使用
mp4
v2
将h264和aac
封装
成
mp4
我们通过编码得到的h264和aac数据通常需要
封装
成
mp4
文件,可以使用
mp4
v2
实现这样的
封装
,
封装
的
时
候需要注意一些细节,比如读取sps、pps,判断idr、音频固定
时
间戳
等。文章附件资源,原文链接:https://blog.csdn.net/u013113678/article/details/122833036
封装
h264,/mpeg4 为
MP4
文件
封装
了开源工程,
mp4
v2
, mpeg4ip代码, /******************************************/ /* Name:
Mp4
Interface.h /* Mark:
mp4
封装
解析接口 /* author: machh /* date:2012.5.12. /******************************************/ #ifndef _
MP4
_INTERFACE_ #define _
MP4
_INTERFACE_ #include "
MP4
Writer.h" #include "
MP4
Reader.h" typedef struct _tagPACKET_HEADER_ { _tagPACKET_HEADER_() { nType = 0; nLen = 0; nTime = 0; } unsigned long nTime; // 不依赖于I帧的参考
时
间 int nLen; // 不包括该头结构本身大小 int nType; }PACKET_HEADER; enum FILE_OPEN_MODEL { OPEN_MODEL_W, // 写文件 OPEN_MODEL_R // 读文件 r+b }; class
Mp4
Interface { public:
Mp4
Interface(void); ~
Mp4
Interface(void); public: /* * @mark 打开文件 * @param[in] nModel文件打开方式,如果nModel为OPEN_MODEL_W 则创建文件 * @param[in] nMediaType 值为
MP4
_VIDEOTYPE_H264/
MP4
_VIDEOTYPE_MPEG4 * @return 操作结果 */ int OpenFile(const char* strPath, FILE_OPEN_MODEL nModel, int nMediaType ); /* * @Name:Close * @mark: 读写操作结束之后,必须调用此函数 */ int Close(); public: //写操作 /* * @mark: 添加视频轨道 * @param[out] nTrackId 轨道ID * @param[in] nWidth,nHeight 画面宽高 * @param[out] fps 帧率 */ int AddVideoTrack (int& nTrackId, const int nWidth, const int nHeight, const double fps ); /* * @mark: 写一帧数据 * @param[in] lpData 要写入的数据 * @param[in] nSize 要写入的数据大小 * @param[in] nTimestamp
时
间戳
*/ BOOL WriteFrame( const int nTrackId, const uint8_t* const lpData, const int nSize, const
MP4
Timestamp nTimestamp, const
MP4
Duration nDuration = -1 ); /* * @mark: 添加音频轨道 aac * @param[out] nTrackId * @param[in] nSamplePerSec (timescale) */ int AddAudioTrack( int& nTrackId, const int nSamplePerSec, const int nSamplePerFrame = -1 ); public: //读操作 /* * @mark : 全局函数,读取整个
MP4
文件结构信息, * 函数内部会fopen/fclose,该函数应当在OpenFile之前调用 * @param[in] strFile 文件路径 * @param[out] lsTrackInfo 输出文件信息结构 */ bool static Get
MP4
FileInfo( const char* strFile,
MP4
_TRACKINFO_LIST& lsTrackInfo ); /* * @mark:SetReadTrackId设置轨道ID, */ int SetReadTrackId( int nTrackID ); /* * @mark:获取轨道信息,该函数必须在OpenFile(……)之后调用才有效 */ int GetTrackInfo(
MP4
_TRACK_INFO* pstTrackInfo ); /* * @mark: 读取一帧数据 */ int ReadFrameData( DWORD nSampleId, BYTE** ppFrame, DWORD* pnBufSize,int& nFrameType ); protected: int m_nOpenModel; int m_nMediaType; C
MP4
Writer * m_p
Mp4
Writer; C
MP4
Reader * m_p
Mp4
Reader; }; #endif// end
使用
mp4
v2
录制视频实现
时
钟同步
录制视频的
时
候,需要保证视频的声音和画面同步,通常是记录视频和音频的
时
间戳
,让它们
时
间关系匹配上。而h264和aac本身不包含
时
间戳
,只有写入
mp4
时
才需要
时
间戳
,本文将通过使用
mp4
v2
作为
mp4
的
封装
工具,来说明如何实现
时
钟同步。
使用
mp4
v2
将H264和AAC
封装
mp4
一、下载源码 国内源:https://launchpad.net/ubuntu/+source/
mp4
v2
国外源:https://code.google.com/p/
mp4
v2
/ 下载合适版本的mp2
v2
源码,我下载的是
mp4
v2
_2.0.0_dfsg0.orig.tar.bz2 二、编译 1、linux编译 tar jxf
mp4
v2
_2.0.0_dfsg0.orig.tar.bz2 cd
mp4
v2
-2.0.0 ./configure --disable-debug make
移植
mp4
v2
开源
库
,h264+g711a/g711u编码
mp4
1、
mp4
v2
移植 step1、下载:https://launchpad.net/ubuntu/+source/
mp4
v2
step2、编译 简单配置参数: ./configure --host=arm-linux CXX=arm-hisiv100nptl-linux-g++ CC=arm-hisiv10
多媒体/流媒体开发
2,543
社区成员
20,281
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章