xiaoluer 2014-03-19
原文出自:http://blog.csdn.net/xiaoliouc/article/details/8600244
过年后继续工作,在去年已经实现h263、h264、amr硬编码rtp打包发送到服务器,服务器是自己用java语言简单实现的rtsp server,VLC通过rtsp请求服务器得到实时音视频流。代码参考spydroid实现,缺点是只能一路上传,一路播放,扩展性很差。
现在考虑多部android手机录制上传,客户端多路观看。用以前写的代码很多技术难点不好实现,于是决定改变思路,采用rtmp协议来实现手机直播系统。
流程:
1、android录制编码,打算移植ffmpeg编码库到android上,通过编译ffmpeg得到so文件,jni调用来实现音视频编码。暂时视频编码定为h264,采用ffmpeg的x264库,音频编码定为aac,采用ffmpeg的faac库。
2、把得到的h264,aac通过rtmp协议规范打包封装,发布rtmp流到流媒体服务器上。android客户端连接流媒体服务器暂时用破解的juv-rtmp-client测试,以后用ffmpeg的librtmp库或者rtmpdump库。
3、流媒体服务器,暂定为Red5,免费开源,java语言开发,使用自带的OflaDemo测试。流媒体服务器实现直播和点播功能,直播就是所谓的live模式了,点播即为record模式。且直播流会以flv文件保存到服务器端,方便以后查看历史视频。以后可以用nginx+red5模式,red5的并发量太小,用nginx反向代理,提高系统并发量。
4、web服务器,暂定为tomcat,与Red5结合,部署web项目,项目采用java中主流的S2SH框架。因为是多路音视频上传,实现用户管理,权限控制等功能。
5、数据库服务器,暂定为mysql,保存用户信息、视频信息等。以后考虑mysql cluster集群模式
6、接收端,浏览器端采用jw player播放flash视频,android通过嵌入flash player播放,而iphone采用ffplayer播放
大概流程是这样,慢慢做吧。