我怎么知道任何h264文件的持续时间?

我怎么知道任何h264文件的持续时间?,第1张

概述我有一个文件,其中只有h264帧以NAL单位的形式存在. 所以现在有什么方法可以计算该文件的持续时间吗? 我不知道文件中有多少帧. 我只有文件大小. PS:我想做的就是使用C语言和Linux平台. 你的问题毫无意义,这就是为什么有人向你投票. 容器文件 首先,没有H264文件这样的东西.可以存在容纳H264编码视频的容器文件(MP4,AVI,MKV).该容器格式通常还包含告诉您包含的视频持续时间的 我有一个文件,其中只有h264帧以NAL单位的形式存在.
所以现在有什么方法可以计算该文件的持续时间吗?

我不知道文件中有多少帧.
我只有文件大小.

PS:我想做的就是使用C语言和Linux平台.

解决方法 你的问题毫无意义,这就是为什么有人向你投票.

容器文件

首先,没有H264文件这样的东西.可以存在容纳H264编码视频的容器文件(MP4,AVI,MKV).该容器格式通常还包含告诉您包含的视频持续时间的数据.因此,您必须解析该文件,检查格式文档以查看保存持续时间的位置,然后将其解压缩.

最简单的方法是使用像Augusto建议的FFMPEG.

NAL字节流

如果您的文件只是一个接一个地保存的NAL单位,就像在NAL字节流中一样,那么您就无法获得视频持续时间!由于H264编码图像不保存定时信息.

如果是这种情况,如果您知道视频FPS,您仍然可以进行近似…您需要计算文件中的所有帧,不包括:

>序列参数集
>图片参数集
>结束流
>序列结束
>过滤数据
>访问单元分隔符

然后进行数学运算:NUMBER_OF_FRAMES / FPS = DURATION_IN_SECONDS

RTP流

如果您错了并且每个NAL单元顶部都有RTP标头,您可以通过检查每个RTP标头的RTP时间轻松获得视频持续时间. RTP header中的字节含义是什么,你可以在这里找到:http://www.networksorcery.com/enp/protocol/rtp.htm.你想从每个中获取TIMESTAMP部分(4个字节整数).代码应该这样做:

int last_timestamp = GetNextTimestamp();double duration_in_ms = 0;while(true){    int next = GetNextTimestamp();    duration_in_ms += (next - last_timestamp)/90000.0;    last_timestamp = next;}
总结

以上是内存溢出为你收集整理的我怎么知道任何h264文件的持续时间?全部内容,希望文章能够帮你解决我怎么知道任何h264文件的持续时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1214152.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存