[转载]基于rtsp的手机视频点播实现和研究

基于rtsp的手机视频点播实现和研究收藏
作者:K歌之王

前言: 随着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只用来浏览网页之类的低数据量应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现RTSP(Real-Time Streaming Protocol)视频点播功能,可以使用Java语言结合第三方库来完成。 首先,需要选择一个适合的RTSP库,例如使用net.sf.fmj.media.rtsp包中的RTSPURLConnection类,它提供了RTSP连接和交互的功能。 在Java中,可以使用Socket类建立与RTSP服务器的TCP连接,并通过Socket的InputStream和OutputStream发送和接收RTSP请求和响应。可以借助RTSPURLConnection类来解析RTSP响应,以获取视频流信息。 接下来,需要发送RTSP SETUP请求,通过RTSP传输控制通道(RTSP-TCP)建立媒体通道,可以选择使用RTP协议或者TCP来传输视频数据。 然后,发送RTSP PLAY请求,开始播放视频。在获取到视频数据后,可以使用FFmpeg、VLCj等库来解码和播放视频。可以利用JavaFX或者Swing等图形库创建视频播放界面,并通过Java的多线程实现实时播放。 另外,为了提供更好的用户体验,可以在播放器中添加暂停、快进、快退等功能,需要发送相应的RTSP PAUSE、FAST FORWARD、REVERSE等请求来控制视频播放。 最后,当视频播放结束或用户手动停止播放时,需要发送RTSP TEARDOWN请求来关闭媒体通道,并断开与RTSP服务器的连接。 总结来说,通过选择适合的RTSP库,建立与RTSP服务器的TCP连接,发送RTSP请求并解析响应,以及使用第三方库来解码和播放视频,就可以实现Java的RTSP视频点播功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为毛呀

非常感谢你对我的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值