如何将H.264的流媒体文件保存为本地文件(录制)?

勇往直前之人 2012-05-08 05:45:30
各位大侠,我在将H.264的流媒体文件保存为本地文件时遇到这样一个问题:由于最初的两个I帧之间保存不对而导致了花屏。

客户端将采集以后的H.264数据采用RTP机制发送到服务器,我在服务器这边首先将收到的RTP包进行解析,获取到真正的H.264数据包。由于H.264数据包只有I帧与P帧。P帧需要2~4个socket包才能发送完成。I帧而需要10~30个socket包才能发送完毕。
在接收端,我对包进行解析并对包头判断:遇到十六进制00 00 00 67开头的包时,我开始保存(十六进制00 00 00 67开头的包后紧跟着十六进制00 00 00 68开头的包,再后面为多个十六进制00 00 00 65开头的包。三者分别代表SPS、PPS、I帧)。即我的思路为从I帧开始保存。另外,时戳则是按照帧来计算。目前发送端视频为25帧,所以在接收端按照40毫秒累加来对每一帧接收图像的时戳进行赋值。

保存以后的视频文件有花屏。我采用软件分析了一下,目前是第一个I帧和第二个I帧之间保存出错。第二个I帧以后的保存正确。请各位大侠给出宝贵意见。

如果谁有H.264流到文件转化的程序,能送给在下,在下将感激不尽!
...全文
691 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chentank 2012-08-17
  • 打赏
  • 举报
回复
高手~ 小弟借宝地问些很小白的问题:
我也在做实时视频浏览,我能从DVS上得到H.264的裸码流,如某帧开头如下:

00 00 00 01 61 F0 0F 14
28 13 AB FA 52 F2 95 1A
33 22 A8 60 AE 84 71 5B
87 6F 2E BD 44 E2 7D 77
8A C4 C4 EA 3B E2 39 B7
2D 6E 。。。。

请问:
一、我接收到的所有帧的开头都是00 00 00 01 ,应该如何保存为文件?
二、这样的裸码流发送给播放器能播放吗? 如果不能播放需要如何修改?
三、通过什么方案能让用户通过电脑和手机等客户端来实时浏览视频?
ArcRain 2012-05-09
  • 打赏
  • 举报
回复
思路对的,是应该从SPS,PPS,IDR或者SPS,PPS,I开始保存,IDR帧或者I帧关联的SPS,PPS都必须保存下来,少一个都有可能导致解码不正确。如果PPS与I帧之间有SEI,那么也需要保存下来。
CyberLogix 2012-05-09
  • 打赏
  • 举报
回复
你可以吧他满保存为.264文件
勇往直前之人 2012-05-08
  • 打赏
  • 举报
回复
接收包并未出错。是不是从SPS、PPS开始保存不对?请各位详解。
rightorwrong 2012-05-08
  • 打赏
  • 举报
回复
现在就是确定第一个和第二个I帧之间为什么会出错,网络接收问题?

2,553

社区成员

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

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