由于Android 不像iPhone有http live streaming的端到到方案(方便提供海量服务),暂时用开源的feng(http://lscube.org/feng,支持mp4(H264+AAC))搭建一个RTSP/RTP直播服务器用来测试,feng相对于darwin、live555等流媒体服务器的优势很容易增加新的媒体文件解析器,按照其中demux_avf.c结构利用ffmpeg API就可以demux出不同container媒体文件(如avi,3gp,mov),将音视频数据分别传到客户端。
1. 先安装feng streaming server的依赖库
1) 安装glib-2.20.0 , ./configure --prefix=/usr && make && sudo make install
2) 安装AAC的编解码faac/faad2 (http://www.audiocoding.com/downloads.html) ./configure --prefix=/usr , make && make install
3) 安装ffmpeg-0.6 ./configure --prefix=/usr --enable-libfaac --enable-gpl --enable-libfaad --enable-nonfree CXXFLAGS=-D__STDC_CONSTANT_MACROS , make && sudo make install
4) 安装libev-4.01, ./configure=prefix=/usr make & sudo make install
5) 安装netembryo-0.1.1, ./configure --prefix=/usr make &make install
2. 安装feng-2.1.0_rc1.和 flux-1.1 ( ./configure --prefix=/usr , make & make install )
feng 负责RTSP/sdp/RTP协议解析和音视频数据的RTP封包工作,flux负责RTP直播流的管理,如将摄像头的实时数据流映射到某个端口上去,flux -c udp://2900*live*mq:///audio -c udp://2902*live*mq:///video
3.启动feng, 如果传输媒体文件,直接把文件放到/usr/var/feng/avroot
sudo feng -v 出现如下信息表示启动成功:
feng - Feng 2.1.0_rc1
LScube Project - Politecnico di Torino
[Fri Dec 24 00:05:04 2010] Listening to port 554 (TCP) on all interfaces
[Fri Dec 24 00:05:04 2010] [warning] Cannot get group feng id, Success
[Fri Dec 24 00:05:04 2010] [warning] Cannot get user feng id, Success
1)先用vlc播放器测试下RTSP连接:
就可以通过feng的log信息清晰的看到RTSP协议控制完整流程(OPTIONS,DESCRIBE,SETUP,PLAY),其中OPTIONS阶段主要是通过sdp协议传递媒体参数信息,如h264的payload type=96(a=rtpmap:96 H264/90000)
2)在客户端可以用Android 的测试程序(通过VideoView控件实现媒体播放器)开始播放