RTSP流媒体播放问题总结

什么是rtsp?

RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而且允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,还可以支持多方视频会议(Video  onference)。因为与HTTP1.1的运作方式相似,所以代理服务器《Proxy》的快取功能《Cache》也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

 

RTSP URL的语法结构

一个终端用户是通过在播放器中输入URL地址开始进行观看流媒体业务的第一步,而对于使用RTSP协议的移动流媒体点播而言,URL的一般写法如下:

一个以“rtsp”或是“rtspu”开始的URL链接用于指定当前使用的是RTSP协议。RTSP URL的语法结构如下:

rtsp_url =(“rtsp:”| “rtspu:”) “//” host [“:”port”] /[abs_path]/content_name

host:可以是一个有效的域名或是IP地址。

port:端口号,对于RTSP协议来说,缺省的端口号为554。当我们在确认流媒体服务器提供的端口号为554时,此项可以省略说明:当HMS服务器使用的端口号为554时,我们在写点播链接时,可以不用写明端口号,但当使用非554端口时,在RTSP URL中一定要指定相应的端口。

abs_path: 为RTSPServer中的媒体流资源标识 

RTSPURL用来标识RTSPServer的媒体流资源,可以标识单一的媒体流资源,也可以标 识多个媒体流资源的集合。 

 

Ø  问题1浏览器测试中,无法打开移动要求的网址“http://121.42.239.152/list/rtsp.jsp”,无法播放流媒体视频。

解决方法:

AndroidManifest.xml 修改:

在接收Action android.intent.action.VIEW 的Activity中添加:

<!-- for support RTSP -->

 <intent-filter>

                <actionandroid:name="android.intent.action.VIEW" />

                <categoryandroid:name="android.intent.category.DEFAULT" />

                <categoryandroid:name="android.intent.category.BROWSABLE" />

                <dataandroid:scheme="rtsp" />

 </intent-filter>

 

在解析URI 的java文件中的修改:

 

 ParseResult resolveThirdPartyUri(Context context, Uri uri, String type){

       ParseResult resultSet = new ParseResult();

       resultSet.mOriginalUri = uri;

       if (type == null) {

           resultSet.mMimeType = "*/*";

           if ("rtsp".equalsIgnoreCase(uri.getScheme())) {

                resultSet.mMimeType ="video/*";

           }

       } else {

           resultSet.mMimeType = type;

           // Add for support SDP format video

           if ("application/sdp".equalsIgnoreCase(type)) {

                resultSet.mMimeType ="video/*";

           }

       }

 

……

}

 

 

Ø  问题2

[SDP][Video Streaming]It can't choose apk to play SDP video streaming.

 

SDP(Session Description Protocol)是一个用来描述多媒体会话的应用层控制协议,为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述;它是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围;SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现。

 

解决方法:

AndroidManifest.xml 修改:

在接收Action android.intent.action.VIEW 的Activity中添加:

<!-- for support SDP video -->

           <intent-filter>

                <actionandroid:name="android.intent.action.VIEW" />

                <categoryandroid:name="android.intent.category.DEFAULT" />

               <categoryandroid:name="android.intent.category.BROWSABLE" />

                <dataandroid:mimeType="application/sdp" />

 </intent-filter>

 

在SIP协议的包含内容是SDP时,Content-Type是application/sdp,所以

在解析URI 的java文件中的修改:

 

           // Add for support SDP format video

           if ("application/sdp".equalsIgnoreCase(type)) {

                resultSet.mMimeType ="video/*";

           }

 

Ø  问题3:

Can't play SDP format video with gallery

解决方法:

和Mtk 沟通过,mtk的答复是:新平台对 local sdp文件的播放不再支持了。

使用Chrome 浏览器打开SDP 链接,其后台是先下载再播放的,这种情况下使用Gallery和 Google Photos 都不能播放。这个问题属于平台限制,无法解决。

使用TurboBrowser浏览器打开SDP链接,是可以播放的,不属于Local,因此可以通过这个浏览器验证播放SDP类型的流媒体。

阅读更多
上一篇android MediaPlayer 的SeekTo 方法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭