live555保存文件的问题
小菜_默 2010-01-05 03:53:34 各位大哥,小菜现在遇到问题了:
用live555保存的文件不可以用vlc播放,在网上查找到了很多的这种问题,就是没有一个完整的答案。
通过查找,说在每个包的前面加上00 00 00 01 但是我在liveMedia/H264VideoFileSink.cpp的 void afterGettingFrame1函数中发现了unsigned char start_code[4] = {0x00, 0x00, 0x00, 0x01}; addData(start_code, 4, presentationTime);这两句,我的理解是在包里面live555自己已经加上了,有的说在保存文件的时候把sps和pps通过Base64解码写到文件中,这种说法也都不一样,有些人说只在文件的开头写上就行,有的说在每个I帧前面加上,有的说只写sps,有的说全都写。
虽然说的方法是很多,但是只有这样冷统的说法,对于初学者来说,根本就不会理解的,比如,sps和pps是怎么得到的?解答的人说在SDP中,SDP从RTSP流中提取,还要通过Base64进行解码,如果你是初学者,你会吗?我不会。在解出sps和pps后怎么和addData的写文件结合?牛X的人会说,自己看,代码写的很清楚。live555不是个小的东西把,它的结构很大,类继承的也很深,不是一朝一夕就可以看会的,也许真的很简单,初学者也会钻牛角尖,不是吗?
希望有经验的人可以指点一下小菜,谢谢!我的问题有这么几个:
1、我知道调用MediaSubsession类中的fmtp_spropparametersets方法可以得到SDP中的sps和pps,但是在什么地方得到才是最好的?就是说在什么地方得到sps和pps与文件结合最方便。
2、在什么地方调用Base64去对sps和pps解码?
3、是在文件的开头些sps和pps还是在每一个I帧前面写?如果在每个I帧前面写怎样判断是I帧?
4、在代码的什么地方保存文件好?还是在addData中?
5、在什么地方sps和pps与文件结合?
6、或者有什么更好的方法呢?
谢谢各位大哥的讲解,当问题解决后我会总结出一个详细的方案更大家一起学习,谢谢!(该贴会继续加分)