织梦CMS - 轻松建站从此开始!

罗索

如何在Ophone平台上实现rtsp流媒体播放

jackyhwei 发布于 2012-01-05 09:39 点击:次 
RTSP能够很好的被主流的播放器所支持,随着手机智能化的发展,越来越多的手机开始支持RTSP协议。本文主要讨论在Ophone上实现RTSP播放的两种方式。
TAG:

RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。

RTSP能够很好的被主流的播放器所支持,随着手机智能化的发展,越来越多的手机开始支持RTSP协议。本文主要讨论在Ophone上实现RTSP播放的两种方式。

方式一. 调用系统的播放器进行rtsp播放

主要用到VideoView这个类。VideoView类可以从不同的数据源当中加载图像,比如资源文件,网络地址等。并且通过计算VideoView窗口的大小,可以很方便的实现视频的缩放旋转等操作。

下面给出实现播放的过程

  • 修改maim.xml文件,添加VideoView控件

<VideoView

android:id="@+id/VideoViewDisplay" android:layout_width="fill_parent" android:layout_height=" fill_parent ">

</VideoView>

  • 修改源文件,添加播放等代码 

public void PlayRtsp()

{

String path = "rtsp://210.21.229.142:1113/stream2";

VideoView mVideoView = (VideoView) findViewById(R.id.VideoViewDisplay);

mVideoView.setVideoPath(path);

mVideoView.requestFocus();

mVideoView.start();

}

调用PlayRtsp函数即可实现rtsp流媒体的播放,并且通过测试,可以支持多个rtsp流的播放,只需要在main.xml文件当中添加多个VideoView控件即可。另外关键一点模拟器上没办法播放RTSP流,需要在真机上进行测试

 

方式二. 通过代码实现RTSP协议,并且自己完成视频数据的解码和显示 

RTSP协议的传输过程可以理解为客户端和服务器协商的过程,所以RTSP的消息主要可以分为请求消息(request)和回应消息(response)两大类。

下面给出简单的一个协商过程描述:

  • 客户端向服务器发送OPTION命令,询问服务器支持哪些命令

String strMessage = String.format("OPTIONS %s RTSP/1.0/r/nCSeq: %d/r/nUser-Agent: %s/r/n/r/n", m_strRtspAddress,iSeqCount++, "rtsp test player");

 

  • 服务器返回包括支持命令的回应信息

RTSP/1.0 200 OK

CSeq: 0

Date: Thu, Sep 16 2010 15:34:56 GMT

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

 

  • 客户端向服务器发送DESCRIBE命令,获取会话描述信息SDP

  String strMessage = String.format("DESCRIBE %s RTSP/1.0/r/nCSeq: %d/r/nAccept: application/sdp/r/nUser-Agent: %s/r/n/r/n",m_strRtspAddress,iSeqCount++, "rtsp test player");

 

  • 服务器返回包括SDP信息的回应信息

RTSP/1.0 200 OK

CSeq: 1

Date: Thu, Sep 16 2010 15:34:56 GMT

Content-Base: rtsp://192.168.3.145:1113/stream2/

Content-Type: application/sdp

Content-Length: 513

 

v=0

o=- 1284650808045835 1 IN IP4 192.168.3.145

s=Session streamed by Rtsp

i=stream2

t=0 0

a=tool:LIVE555 Streaming Media v2009.04.20

a=type:broadcast

a=range:npt=0-

a=x-qt-text-nam:Session streamed by Rtsp

a=x-qt-text-inf:stream2

m=video 0 RTP/AVP 96

c=IN IP4 0.0.0.0

a=rtpmap:96 H264/8000

a=fmtp:96 packetization-mode=1;profile-level-id=42001E;sprop-parameter-sets=Z0IAHukCg/I=,aM44gA==

a=control:track1

m=audio 0 RTP/AVP 97

c=IN IP4 0.0.0.0

a=rtpmap:97 L8/8000

a=control:track2

 

  • 客户端向服务器发送SETUP命令,确定传输的数据类型和传输方式

String strMessage = String.format("SETUP %s/track1 RTSP/1.0/r/nTransport: RTP/AVP/TCP;unicast;interleaved=0-1/r/nCSeq: %d/r/nUser-Agent: %s/r/n/r/n",m_strRtspAddress,iSeqCount++, "rtsp test player");

 

  • 服务器回应SETUP信息

RTSP/1.0 200 OK

CSeq: 2

Date: Thu, Sep 16 2010 15:34:56 GMT

Transport: RTP/AVP/TCP;unicast;destination=192.168.3.141;source=192.168.3.145;interleaved=0-1

Session: 4

 

  • 客户端向服务器发送PLAY命令,请求传输数据

String strMessage = String.format("PLAY %s/track1 RTSP/1.0/r/nSession: %s/r/nCSeq: %d/r/nUser-Agent: %s/r/n/r/n", m_strRtspAddress,strSession,iSeqCount++, "rtsp test player");

 

  • 服务器响应PLAY消息

RTSP/1.0 200 OK

CSeq: 3

Date: Thu, Sep 16 2010 15:34:57 GMT

Session: 4

RTP-Info: url=rtsp://192.168.3.145:1113/stream2/track1/track1;seq=28261;rtptime=3184617004

以上就是大概的一个建立RTSP连接的协商过程,不难看出RTSP协议的命令格式和HTTP有着几分相似的地方。当上述的协商的过程完成后,下面就是RTP包数据的接收和解析的一个过程,这里就不详细的写出具体的解析过程,读者可以参考RFC3984的文档。

视频的解码和显示可以参考我的另外一篇文章《在OPhone上实现视频监控》

总结:

上述两种方式均可以在Ophone上实现RTSP流的播放,但是耗费的精力却完全不一样。第一种方式很简单,而且调用了系统的播放器,软件运行的效率很高,但是存在如果服务器端的RTSP服务非标准,可能会导致协商失败。第二种方式完全是用代码重现了整个过程,从协议的解码,视频的解码显示,界面的控制均需要自己完成。但是如果能够完全的解决这些问题,相信读者会对Ophone平台有更深的了解。

(asddg67)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201201/15590.html]
本文出处:CSDN博客 作者:asddg67 原文
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容