live555 264视频时间戳问题

qixing1115 2013-04-23 06:00:59
//注意!注意!注意!此处计算时间戳!!     
186: if (thisNALUnitEndsAccessUnit) {
187: usingSource()->fPictureEndMarker = True;
188: ++usingSource()->fPictureCount;
189:
190: // Note that the presentation time for the next NAL unit will be different:
191: struct timeval& nextPT = usingSource()->fNextPresentationTime; // alias
192: nextPT = usingSource()->fPresentationTime;
193: double nextFraction = nextPT.tv_usec / 1000000.0
194: + 1 / usingSource()->fFrameRate;
195: unsigned nextSecsIncrement = (long) nextFraction;
196: nextPT.tv_sec += (long) nextSecsIncrement;
197: nextPT.tv_usec = (long) ((nextFraction - nextSecsIncrement)
198: * 1000000);
199: }
200: setParseState();


time_scale
H264VideoStreamParser
::analyze_seq_parameter_set_data(unsigned& num_units_in_tick, unsigned& time_scale, unsigned& fixed_frame_rate_flag) {
num_units_in_tick = time_scale = fixed_frame_rate_flag = 0; // default values
analyze_vui_parameters(bv,num_units_in_tick, time_scale, fixed_frame_rate_flag);
time_scale = bv.getBits(32);
这里我跟踪的一些步骤,
请问time_scale 这个东西是和计算时间戳有关的么,这个数据是存在h264文件里的么
...全文
628 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝉鸣如海 2014-11-12
  • 打赏
  • 举报
回复
不是time_scale/num_units_in_tick或者time_scale/num_units_in_tick/2吗,怎么你们都反着来
JGF_NTU 2013-04-29
  • 打赏
  • 举报
回复
JGF_NTU 2013-04-29
  • 打赏
  • 举报
回复
推荐一款软件给你们,elecard stream tool的工具,可以分析h264、mpeg2/4的语法语义,也就可以看到VUI中的nuit_field_based_flag的信息了 http://www.kuaipan.cn/file/id_71114062737440932.htm
dengzikun 2013-04-27
  • 打赏
  • 举报
回复
引用 9 楼 qixing1115 的回复:
[quote=引用 8 楼 dengzikun 的回复:] [quote=引用 7 楼 qixing1115 的回复:] 我在整个文件中搜索都没有这两个东西 analyze_vui_parameters: num_units_in_tick=33373(0x825D) analyze_vui_parameters: time_scale=2000000(0x1E8480)
如果不是从字节边界开始的,在文件中当然搜索不到,需要位组合。[/quote] 虽然不明白你是什么意思,但是我还是不会,所以请问怎么能搜到[/quote] 搜不到,可以通过计算得到。 举一个简单的例子,你在文件中看到两个连续的字节 0xFF 0xFF, 那么取第一个字节的二进制最后一位的值1,取第二个字节的二进制最高两位的值11, 组合之后就是0x07,这个0x07你直接看不到,是计算出来的。
CyberLogix 2013-04-27
  • 打赏
  • 举报
回复
引用 2 楼 dengzikun 的回复:
在H264中,如果VUI中的nuit_field_based_flag=0,那么 num_units_in_tic/time_scale表示帧率,如果nuit_field_based_flag=1,那么 num_units_in_tic/time_scale/2表示帧率。
楼上说的对。
qixing1115 2013-04-26
  • 打赏
  • 举报
回复
引用 8 楼 dengzikun 的回复:
[quote=引用 7 楼 qixing1115 的回复:] 我在整个文件中搜索都没有这两个东西 analyze_vui_parameters: num_units_in_tick=33373(0x825D) analyze_vui_parameters: time_scale=2000000(0x1E8480)
如果不是从字节边界开始的,在文件中当然搜索不到,需要位组合。[/quote] 虽然不明白你是什么意思,但是我还是不会,所以请问怎么能搜到
qixing1115 2013-04-25
  • 打赏
  • 举报
回复
我在整个文件中搜索都没有这两个东西 analyze_vui_parameters: num_units_in_tick=33373(0x825D) analyze_vui_parameters: time_scale=2000000(0x1E8480)
qixing1115 2013-04-25
  • 打赏
  • 举报
回复
引用 5 楼 dengzikun 的回复:
引用 4 楼 qixing1115 的回复:这是analyze_vui_parameters函数
num_units_in_tick = bv.getBits(32);
DEBUG_PRINT(num_units_in_tick);
time_scale = bv.getBits(32);
DEBUG_PRINT(time_scal……


我在整个文件中搜索都没有这两个东西
analyze_vui_parameters: num_units_in_tick=33373(0x825D)
analyze_vui_parameters: time_scale=2000000(0x1E8480)
dengzikun 2013-04-25
  • 打赏
  • 举报
回复
引用 4 楼 qixing1115 的回复:
这是analyze_vui_parameters函数 num_units_in_tick = bv.getBits(32); DEBUG_PRINT(num_units_in_tick); time_scale = bv.getBits(32); DEBUG_PRINT(time_scale); fixed_frame_rate_flag = bv……
因为这两个值在码流中可能并不是从字节边界开始的。
dengzikun 2013-04-25
  • 打赏
  • 举报
回复
引用 7 楼 qixing1115 的回复:
我在整个文件中搜索都没有这两个东西 analyze_vui_parameters: num_units_in_tick=33373(0x825D) analyze_vui_parameters: time_scale=2000000(0x1E8480)
如果不是从字节边界开始的,在文件中当然搜索不到,需要位组合。
qixing1115 2013-04-24
  • 打赏
  • 举报
回复
高手来啊高手来啊
qixing1115 2013-04-24
  • 打赏
  • 举报
回复
这是analyze_vui_parameters函数 num_units_in_tick = bv.getBits(32); DEBUG_PRINT(num_units_in_tick); time_scale = bv.getBits(32); DEBUG_PRINT(time_scale); fixed_frame_rate_flag = bv.get1Bit(); 运行结果 analyze_vui_parameters: num_units_in_tick=33373(0x825D) analyze_vui_parameters: time_scale=2000000(0x1E8480) 可是我用UE打开h.264文件后找不到这两个值是什么原因 <IMG src="file:///C:\Users\lenovo\AppData\Roaming\feiq\RichOle\3684899427.bmp">
qixing1115 2013-04-24
  • 打赏
  • 举报
回复
引用 2 楼 dengzikun 的回复:
在H264中,如果VUI中的nuit_field_based_flag=0,那么 num_units_in_tic/time_scale表示帧率,如果nuit_field_based_flag=1,那么 num_units_in_tic/time_scale/2表示帧率。
num_units_in_tic和time_scale信息都 是在264文件里边有么,都是在第几个字节知道么
dengzikun 2013-04-24
  • 打赏
  • 举报
回复
在H264中,如果VUI中的nuit_field_based_flag=0,那么 num_units_in_tic/time_scale表示帧率,如果nuit_field_based_flag=1,那么 num_units_in_tic/time_scale/2表示帧率。

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧