先谈一下HLS,这个协议接触得最早,自己的个人理解,如果要开发一套准实时的手机音视频直播系统,需要支持iphone,android,windows phone等多款手机,这个协议真心不错。为什么是准实时呢,因为客户端播放的是最新切割的ts文件,它的延迟取决于切片的大小。
参考文章http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html ,其思路步骤:
1、采集视频源和音频源的数据
2、对原始数据进行H264编码和AAC编码
3、视频和音频数据封装为MPEG-TS包
4、HLS分段生成策略及m3u8索引文件
5、HTTP传输协议
这里面的很多步骤需要用到ffmpeg编解码库,比如编码, 切片等。方便之处是可以使用普通的http服务器就ok了,推荐使用nginx,这是一款功能无比强大的web服务器,其反向代理,性能好的不可言喻。
http://blog.csdn.net/simongyley/article/details/8560025
RTSP协议,这应该是实时性最好的了,如果要想实时性要求很高,比如0.5s以内,这个是不错的选择。前阵子模仿spydroid写了个建议的rtsp服务器,其实就是options,describe,setup,play,pause,teardown这几步了,这个协议用的最广泛,网上介绍也比较多。要想真正深入了解rtsp协议,c++语言功底好的可以查看live555 。
RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的协议。这是一个标准的,未加密的实时消息传递协议,默认端口是1935,如果未指定连接端口,那么flash客户端会尝试连接其他端口,其尝试连接顺序按照下列顺序依次连接:1935、443、80(RTMP), 80(RTMPT).RTMP协议是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询HTTP协议之上。
下面贴出一些RTMP值得看的博客文章:
1、android
Android 实时视频采集—Cameara预览采集
http://www.cnblogs.com/skyseraph/archive/2012/03/26/2418665.html
Android : 录音实现之AudioRecord类 http://blog.sina.com.cn/s/blog_4c070656010127tn.html
2、android音视频编码
Android NDK r8b 和 FFmpeg 0.11.2 移植 http://my.oschina.net/wangqin/blog/80345
HelloWorld App of ffmpeg JNI http://my.oschina.net/wangqin/blog/80347
H264解码器源码(Android 1.6 版) http://www.cnblogs.com/mcodec/articles/1780598.html
3、rtmp协议封装
Rtmp数据流转h264的详细转码过程 http://wenku.baidu.com/view/b57c1b1aa21614791711284f.html
4、Red5的安装与配置
Red5安装及web播放流媒体视频实例 http://wenku.baidu.com/view/76ce5802cc1755270722083d.html
red5搭建流媒体直播系统
http://blog.sina.com.cn/s/blog_4829b9400100rmz0.html
d音视频采集