永发信息网

如何调试H.264代码?

答案:2  悬赏:20  手机版
解决时间 2021-03-07 13:47
  • 提问者网友:wodetian
  • 2021-03-07 01:47
如何调试H.264代码?
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-03-07 02:16
我正在做这方面~时间有限,就按照我平时做的步骤来,不清楚的hi我~

1、下载并解压 JM 源代码
2、在源代码根目录下的 bin 文件夹中新建 backup 文件夹,将 bin 文件夹中所有文件移入该文件夹做备份
3、在源代码根目录下新建 encodtest 文件夹,作为编码使用。将编码过程所需要的文件,例如:编码配置文件(encoder_baseline.cfg),待编码视频序列文件
(foreman_part_qcif.yuv,对应为编码配置文件中 InputFile 参数的值)复制到该文件夹中
4、在源代码根目录下新建 decodtest 文件夹,作为解码使用。将解码过程所需要的文件,例如:解码配置文件(decoder.cfg)复制到该文件夹中
5、打开源代码根目录下的工作区 tml.dsw
编码:
6、鼠标左键选中 lencod 工程
7、打开 Project -> Settings -> Debug ,在 Working directory 选项中填写 ./encodtest ,在 Program arguments 选项中填写需要使用的编码配置文件(要与第3步所复制
的文件同名),例如:-d encoder_baseline.cfg ,然后确定修改
8、鼠标右键选中 lencod 工程,选择鼠标右键菜单 Set as Active Project
9、编译运行编码器,完成编码。这个时候会在源代码根目录下的 encodtest 文件夹中生成几个新文件,其中 test.264 (对应为编码配置文件中 OutputFile 参数的值)即为
压缩码流文件
解码:
10、鼠标左键选中 ldecod 工程
11、打开 Project -> Settings -> Debug ,在 Working directory 选项中填写 ./decodtest,在 Program arguments 选项中填写需要使用的解码配置文件(要与第4步所复制
的文件同名),例如:decoder.cfg ,然后确定修改
12、将编码生成的压缩码流文件 test.264 复制到 decodtest 文件夹中
13、鼠标右键选中 ldecod 工程,选择鼠标右键菜单 Set as Active Project
14、编译运行解码器,完成解码。这个时候会在源代码根目录下的 decodtest 文件夹中生成几个新文件,其中 test_dec.yuv(对应为解码配置文件中的第三个参数)即为解码
文件
另外:
可以不用打开 tml.dsw 工程,而直接打开单个工程,例如:打开 lencod.dsw 就可以进行编码,而打开 ldecod.dsw 就可以进行解码。单独打开工程所需要的设置与前述过程相
同。
全部回答
  • 1楼网友:煞尾
  • 2021-03-07 02:27
如果是对一个码流文件计算码率,那么先解码得到总帧数,然后看文件有多大。这样,有了总比特数(即文件大小)、总帧数和帧率,就可以算码率了。 h.264码流中一般没有帧率,比特率信息到使可以得到,你参考吗流语法, 但是有的吗流有vui信息,他里面有个标志 timing_info_present_flag 若等于1,则码流中有num_units_in_tick 和 time_scale。 framerate = time_scale/num_units_in_tick. 请问:h.264 的 framerate 应该怎样获取? [i=s] 本帖最后由 explorer_djz 于 2009-2-24 10:38 pm 编辑 [/i] h.264 的 framerate 应该怎样获取?需要用到哪些 nal 单元来完成? 一个 seqence 中 framerate 允许变化吗? 实时播放器播放时,会用到 framerate ?如果不用,播放器通过什么来判断一秒钟播放多少帧? firstime 发表于 2009-2-24 11:31 pm 1、你看看 2005 版标准的附录 d 和 e,那里面可能有帧率信息,我不确定; 2、一般来说一个应用的帧率是不需要发生变化的。当然可以允许变化; 3、视频文件中有一些额外的信息,通过这些信息播放器可以算出播放速度。这些信息是封装视频文件的时候按照相应的文件格式协议产生的。例如 3gpp 是按照 iso_iec_14496-12 封装而成的。 explorer_djz 发表于 2009-3-3 08:51 pm 谢谢版主!我在附录e 中确实找到了能算帧率的。如下:(中文版标准p320) vui 信息中有个标志 timing_info_present_flag 若等于1,则码流中有num_units_in_tick 和 time_scale。 framerate = time_scale/num_units_in_tick. 还有2个问题: 1. vui信息是可选项,若只有一段 es 流,且没有vui信息,那是不是就没法得到帧率信息了?在复用时就只能猜了吗? 2. 还是没有 vui 信息的 es 流,elecard streameye 分析后,framerate declared=0, 而 real = (var) 25.16,streameye 是怎么得到 real framerate 的? firstime 发表于 2009-3-3 09:05 pm 1、没有 vui,就没有帧率信息。既然是你在做复用,那么你一定知道帧率; 2、es 没有帧率信息,直接按正常速度显示就可以了。 explorer_djz 发表于 2009-3-7 08:44 pm 哦,差不多明白了。 谢谢楼上各位 对于帧历时(帧率)总结如下: 1. 有vui的话,可以解析此字段得到帧率(从而得到帧历时),这个得到的是平均帧率 2.无vui,那么帧历时可以从封装容器的时间标签得到(比如ts流的pts)转载仅供参考,版权属于原作者
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯