前言: 随着3G的到来,带宽大了流量费便宜了,手机电视等多媒体应用必将有很大发展, 本人总结以往经验,跟大家讨论一下如何建立一个手机视频点播的方案,最后给出了一个初步的客户端实现效果。欢迎大家讨论。
先说架构,出于便于管理和扩展,带宽限制和多用户并发的考虑,商用方案都会采用流媒体服务器+WEB服务器+中转服务器+手机客户端的方案,其中
流媒体服务器(streaming server)负责采集视频源并压缩编码并随时等待来自客户端的rtsp连接请求;
WEB服务器(web server)便于发布和管理视频信息;
中转服务器(transmission server)是可选的,用于把来自client的RTSP请求转发给server,并把服务器端的实时流转给client,这样的好处是在相同带宽下支持更多的用户同时观看;
手机客户端(client)可以用手机内置的播放器(如nokia上的realplayer)或者自己开发的独立播放器,前者的好处是降低用户使用门槛,便于大规模应用;后者方便扩展和定制,满足更多的功能。
streaming server是整个方案的核心,目前主流的流媒体服务器解决方案如下:
helix server :借助Real公司的强大实力,这是目前最流行的方案, 可以支持所有音视频格式,性能稳定,是唯一可以横跨 Windows Mac 及 Linux, Solaris ,HP/UX 使用者流媒体服务的平台,支持在手机自带播放器播放。helix server免费的版本只支持1M流量,企业版很贵。当然你要破解就是另外一回事了:)
darwin server: 这是apple公司推出的开源的流媒体解决方案,支持格式没helix那么多,但由于是开源的免费的,对于开发者有很大的开发空间。
live555 media server:性能稳定,但支持格式比较少(只有mp3,amr,aac,mpeg4 es等几种流),很少独立使用而一般作为系统的一部分。
Windows Media Server:仅限微软平台,就不考虑了。
手机端框架流程如下:
手机客户端与服务器端的传输协议目前有HTTP,RTSP两种,早期的手机电视多用的HTTP,HTTP的优点有不用特殊的服务器软件,有IIS即可,不用考虑防火墙NAT,但HTTP不支持实时流,也会浪费带宽; RTSP则是当前流媒体传输的主流标准,连微软都抛弃了MMS而转而支持RTSP, RTSP可以支持客户端暂停回放停止等操作,基本不用考虑音视频同步问题(因为音频视频分别从不同RTP PORT读入缓冲)。值得说明的是,RTSP成功后,就开始RTP传输,分为RTP OVER TCP和RTP OVER UDP,前者保证每个数据包都能收到,如果没收到就重传,而且不用考虑防火墙NAT;后者只保证尽最大努力的传输,不会重传丢帧,实时性好,要解决防火墙NAT问题。如果对帧率要求比较高的手机电视,推荐采用UDP传输,因为延迟较大的重传数据对用户是没有意义的,宁可丢弃。
我在网络部分采用强大的开源库live555实现RTSP/RTP协议,其性能稳定而且支持大多数音视频格式的传输。(当然ffmpeg也实现了网络传输部分,经过改动后也能用)对live555经过裁剪后移植到symbian和windows mobile,这部分工作在symbian真机调试比较费时。
视频解码部分当然还是采用ffmpeg,移植了mpeg4 sp/h.264解码器,在没有任何优化的情况下可支持32K,CIF,5-10fps的效果,对于一般的流媒体应用足够了。以后还要经过算法和汇编优化。解码后还需要经过yuv2rgb和scale,需要注意的是ffmpeg的解码有消隐区的说法,即qcif的图像其linesize不是176而是192,如果你发现解码后图像呈绿色,需用img_convert()转一下(目的格式也是PIX_FMT_YUV420P)。symbian上用DSA直接写屏就行。windows mobile上可以用sdl.
音频解码主要包括AAC,AMRNB,AMRWB。AAC和AMRNB是gprs和edge带宽支持的音频(aac效果比amrnb好),AMRWB是3G后的音频格式。在ffmpeg 0.5 release中已经支持amrnb/wb的fixed point解码,很强大。
在symbian和windows mobile真机均测试通过,6122c真机和Windows mobile5.0模拟器上效果如下:
演示视频地址为rtsp://v.starv.tv/later.3gp,视频为mpeg4 sp,音频为amrwb。目前只能看到图像,音频还没加。
注意做流媒体应用接入点一般是cmnet,cmwap只用来浏览网页之类的低数据量应用。
程序还在进一步完善中,有兴趣的可以跟我一起交流, lius1984@gmail.com
2010.05.15: 程序还在进一步完善, 目前在S60 3rd/5th上已支持手机浏览器+播放器,支持h264/mpeg4, aac/amrnb。
目前支持WM, SYMBIAN, MTK平台
分享到:
相关推荐
基于RTSP协议网络监控系统的研究与实现.pdf
介绍了基于RTSP协议的VOD系统中间件实现。
分析讨论了实时流协议的协议格式、特点和参数,并介绍了H.264编解码技术,基于开源项目Live555实现了多媒体服务端,具备网络监控系统的实时播放和回放模式。与基于HTTP协议的网络监控系统进行性能比较,在针对帧率...
rtsp协议的主要实现代码,里面的函数值得参考。
现在rtsp视频流是前端页面的技术难题,使用该插件可以实现网页实时流显示
基于live555实现的rtsp点播客户端,并将实时视频流转存为H264文件
基于RK3399平台,利用MPP实现RTSP视频流的硬件解码,输入视频流格式为H.264
本项目基于vlc源码实现rtsp播放视频。 修改了一些代码。 可以显示进度条、和播放当前时间和总时间。以及拖动进度条实现快进快退和点击暂停播放的效果。
基于RTSP协议的实时视频服务器实现.pdf
描述了实时流协议RTSP(Real Time Streaming Protoco1)和相关流媒体协议的原理以及...在此基础上,进一步分析了RTSP/RTP流媒体视频服务器的设计原理和具体实现。最后,介绍了一个基于RTSP服务器开 发的视频监控系统。
环境为Qt5.9.6+MinGW32环境,可以实现三通道视频播放和截图
基于RTSP_RTP嵌入式流媒体服务器的实现
在同一局域网中,Android推流端(比如平板)内置RTSP/RTMP服务器,Android推流端将摄像头的画面...手机端支持对RTSP/RTMP视频流的播放 具体可以看我的博客 : https://blog.csdn.net/EthanCo/article/details/130387829
RTSP(Real Time Streaming Protocol),参考标准为RFC2326,实时流传输协议,是TCP/IP协议体系中的一个 应用层协议提供播放、暂停、后退、前进等操作。 主要用来控制具有实时特性的数据的发送,但其本身并不用于...
rtsp协议解析实现音实时传输
关于前端无法播放RTSP视频流的实现方案
基于 curl 库实现与 rtsp server 建立语音对讲会话,需要安装 libcurl 。编译命令是 gcc main.c -o main `pkg-config --cflags --libs libcurl`
在对传统点播视频系统进行比较分析的基础上,给出了一种支持服务器集群的视频点播系统的设 计模型、功能与特点,并重点介绍了该系统实现的关键技术和方法.
deepstream-test1-app_rtsp-master基于Deepstream实现RTSP视频流的读取,c++源代码
基于easydarwin实现rtsp拉流的转发流媒体服务器,支持多路同时拉取一个视频源,内部做分发处理