我最近爲android編譯了ffmpeg和live555,並構建了我自己的媒體客戶端包裝器。整個系統在所有其他系統(Windows和Linux)中都能很好地工作,但在android中卻不行,只有不可能收到UDP數據包。 RTSP通信正常工作,它使用TCP連接。會話成功啓動,並繼續在服務器中運行。在搜索相似的主題後,我發現我似乎必須首先獲得帶有wifi的多播許可。所以我做:
- 認沽權限在AndroidManifest.xml用NDK編譯的Android rtsp客戶端無法接收任何UDP數據包
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE""/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
- 把下面的android系統中活動的Java代碼:在OnCreate()
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(wm != null) {
mMCLock = wm.createMulticastLock(TAG);
mMCLock.acquire();
}
但它仍然不工作,結果在模擬器中都是一樣的,在Galaxy S2 Phone和Galaxy Tab 10.1中的 。即使我停用live555模塊,只使用ffmpeg(ffmpeg也有其內置的rtsp客戶端,但不像live555那樣穩定,因此我將live555移植到android中)。結果是一樣的,rtsp ok,rtp不,rtp使用udp作爲基礎載體。
在DDMS是一個錯誤註冊:
地址族不受協議支持
我認爲,問題是,UDP端口仍然受阻。可能在 java中獲取多播鎖,對於在android的用戶內核中運行的本機代碼是不夠的。
有沒有人有想法?
Steven
謝謝,我打算在live555模塊中查看它。 BTW。我現在切換我的客戶端通過tcp請求發送rtp,然後每件事情都可以正常工作,只是udp請求仍然無效。 UDP連接爲實時媒體播放器提供了更好的性能,在TCP數據包到達TCP堆棧之前,TCP在網絡接口中丟失了大量數據包。 – Steven 2012-04-24 13:31:25