该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
具体的技术介绍本人是根据这篇博客了解的:
http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html
技术点列表以及解决方案:
1、采集视频源和音频源的数据
视频数据采用jmf或者opencv,本人实际开发中jmf对mac系统支持的不是很好所以放弃
opencv是全平台支持、并且原生支持部分java调用接口
所以视频采集选用opencv实现
声音采集这个暂时没有做,不过可以通过java原声的声音api可以实现采集
2、对原始数据进行H264编码和AAC编码
本人没有详细了解h264编码的格式,采用了Jcodec框架进行编码
该框架缺点是文档太少楼主只实现了将opencv采集到的图片数据合成为MP4格式的文件
声音采集没有做,不过实现起来较为简单,网上很多aac声音采集例子
3、视频和音频数据封装为MPEG-TS包
封装为TS包这个推荐使用ffmpeg这个工具,转换起来要通过runtime调命令格式的
楼主原本思考用c++封装为jni调用,但是与命令行调用的效率差不多所以没有采用
该工具也可以将声音文件与视频文件合并为TS文件
简化了声音处理过程
4、HLS分段生成策略及m3u8索引文件
一个直播的m3u8文件格式为:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:5
#EXTINF:5,
ts file url
#EXTINF:5,
ts file url
#EXTINF:5,
ts file url
ts file url为ts视频文件的绝对路径
如你的ts文件请求地址为http://127.0.0.1/1.ts
则file url为/1.ts
#EXT-X-MEDIA-SEQUENCE:1
为分段序列
客户端会根据该序列决定下一个该播放那个TS文件
#EXT-X-TARGETDURATION:5
为分段视频长度
建议3 - 10秒之间
时间越短播放延迟越小
理论延迟应为分段长度
但实际上本人测试发现2秒钟分段的TS文件延迟时间为10秒左右
可能是客户端有缓存或者是其他情况 具体的正在详细探究
5、HTTP传输协议
这个就好说了 吧里基本上都是写web的 随便找一个就可以
我采用的是jetty