如何在OPhone平台上實現rtsp流媒體播放

來源:互聯網
上載者:User

如何在OPhone平台上實現rtsp流媒體播放
RTSP(Real Time Streaming Protocol),即時資料流傳輸協議,是TCP/IP協議體系中的一個應用程式層協議。該協議定義了一對多應用程式如何有效地通過IP網路傳送多媒體資料。
RTSP能夠很好的被主流的播放器所支援,隨著手機智能化的發展,越來越多的手機開始支援RTSP協議。本文主要討論在OPhone上實現RTSP播放的兩種方式。

方式一. 調用系統的播放器進行rtsp播放
主要用到VideoView這個類。VideoView類可以從不同的資料來源當中載入映像,比如資源檔,網路地址等。並且通過計算VideoView視窗的大小,可以很方便的實現視頻的縮放旋轉等操作。
下面給出實現播放的過程
(1)修改maim.xml檔案,添加VideoView控制項

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

    (2)修改源檔案,添加播放等代碼

    public void PlayRtsp()<br />{<br /> String path = "rtsp://210.21.229.142:1113/stream2";<br />VideoView mVideoView = (VideoView) findViewById(R.id.VideoViewDisplay);<br />mVideoView.setVideoPath(path);<br />mVideoView.requestFocus();<br /> mVideoView.start();<br />}  

    調用PlayRtsp函數即可實現rtsp流媒體的播放,並且通過測試,可以支援多個rtsp流的播放,只需要在main.xml檔案當中添加多個VideoView控制項即可。另外關鍵一點模擬器上沒辦法播放RTSP流,需要在真機上進行測試
     
    方式二. 通過代碼實現RTSP協議,並且自己完成視頻資料的解碼和顯示

    RTSP協議的傳輸過程可以理解為用戶端和伺服器協商的過程,所以RTSP的訊息主要可以分為請求訊息(request)和回應訊息(response)兩大類。
    下面給出簡單的一個協商流程說明:
    (1)用戶端向伺服器發送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");  

    (2) 伺服器返回包括支援命令的回應資訊

    RTSP/1.0 200 OK<br />CSeq: 0<br />Date: Thu, Sep 16 2010 15:34:56 GMT<br />Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER  

    (3) 用戶端向伺服器發送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");  

    (4) 伺服器返回包括SDP資訊的回應資訊

    RTSP/1.0 200 OK<br />CSeq: 1<br />Date: Thu, Sep 16 2010 15:34:56 GMT<br />Content-Base: rtsp://192.168.3.145:1113/stream2/<br />Content-Type: application/sdp<br />Content-Length: 513 </p><p>v=0<br />o=- 1284650808045835 1 IN IP4 192.168.3.145<br />s=Session streamed by Rtsp<br />i=stream2<br />t=0 0<br />a=tool:LIVE555 Streaming Media v2009.04.20<br />a=type:broadcast<br />a=range:npt=0-<br />a=x-qt-text-nam:Session streamed by Rtsp<br />a=x-qt-text-inf:stream2<br />m=video 0 RTP/AVP 96<br />c=IN IP4 0.0.0.0<br />a=rtpmap:96 H264/8000<br />a=fmtp:96 packetization-mode=1;profile-level-id=42001E;sprop-parameter-sets=Z0IAHukCg/I=,aM44gA==<br />a=control:track1<br />m=audio 0 RTP/AVP 97<br />c=IN IP4 0.0.0.0<br />a=rtpmap:97 L8/8000<br />a=control:track2  

    (5) 用戶端向伺服器發送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");  

    (6)  伺服器回應SETUP資訊

    RTSP/1.0 200 OK<br />CSeq: 2<br />Date: Thu, Sep 16 2010 15:34:56 GMT<br />Transport: RTP/AVP/TCP;unicast;destination=192.168.3.141;source=192.168.3.145;interleaved=0-1<br />Session: 4  

    (7) 用戶端向伺服器發送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");  

    (8) 伺服器響應PLAY訊息

    RTSP/1.0 200 OK<br />CSeq: 3<br />Date: Thu, Sep 16 2010 15:34:57 GMT<br />Session: 4<br />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平台有更深的瞭解。

     

    《轉自OPhone SDN》

     

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.