2012-04-16 70 views
3

大家好,我希望你能幫助我解決這個問題。在Android上解碼RTP流(MPEG4)

問題: 我有一個RTP流,我在我的專用網絡(WiFi)上進行組播。我想使用一些Android平板電腦來顯示流。平板電腦的數量不能受到限制,質量不應隨着客戶數量的增加而降低。這解釋了爲什麼我需要多播而不是單播。

的方法: 理論上通過創建服務器端的RTSP或HTTP流我應該能夠對影片給我的客戶。然而,我的理解是,當有太多的客戶端同時連接時,服務器會受到性能影響,這是我需要避免的。理想情況下,我希望所有客戶都只是在監聽相同的多播。這樣,客戶端數量就不會對服務器性能產生影響。 [注:IP是本地和TTL設置爲0/1所以沒有堵塞任何東西比我自己的網絡與多播數據包的危險。]

實施 爲了實現上面的方法我認爲在Android中編寫一個多播客戶端,它接收RTP數據包並將這些數據流縫合在一起。我試圖用JPEG有效載荷,它工作得很好。然而,JPEG的問題是調用來解碼每幀的代價是非常昂貴的(幾乎100ms!),這大大限制了幀速率。由於JPEG不是一個好的視頻流協議,因此網絡上的負載也很高。

我想要做的是爲視頻做什麼,我已經爲圖片做了什麼,即將來自RTP數據包的有效載荷流(例如MPEG4)拼接在一起並將其饋送到「某物」。最初我以爲VideoView可以處理原始輸入流,但我錯了,VV似乎只能使用rtsp或http url(正確?)。

解決方案? 現在,我有什麼選擇?我想避免從原始RTP流設置RTSP服務器,並出於上述原因爲所有平板電腦提供服務。我查了兩天,檢查了在網上和網上提出的所有解決方案,但似乎沒有什麼適用於我的問題(在大多數情況下,RTSP url或單播是解決方案,但我認爲我不能使用它),所以我認爲是時候問這個問題了。

任何幫助非常感謝!

歡呼

回答

0

我們必須試圖在Android上玩RTSP蒸MJPEG的一個問題。我們所擁有的多播視頻服務器無法通過HTTP發送MJPEG,我們也不希望因爲延遲而在RTSP上使用H.264。該應用程序是一個ROV將現場視頻發送回Droid進行顯示。 只是爲了節省很多麻煩,如果我正確地理解了這個問題,你根本無法使用Android SDK中的任何東西,比如MediaPlayer等。最後,我們通過付錢讓一個人做了一些自定義代碼使用MPlayer,ffmpeg和Live555。 希望這有助於。

1

再次閱讀您的文章後,我拿起了我第一次錯過的東西。我使用BitmapFactory.decodeByteArray從Axis相機組播中通過HTTP傳輸MJPEG。該呼叫可以在幾ms內完成。存在的問題是,它通常希望每次調用都創建一個新的位圖。有一種方法可以使位圖保持不變,並且可以縮短時間。我只是不記得這個電話,我正常的開發電腦目前正在銷燬......錯誤,由我們的IT'升級',所以我不能告訴你我的頭頂,但你應該找到它,如果你搜索一下。我能夠在Xoom和Galaxy Tab 10.1上獲得30fps,而其他一些則沒有問題。

馬克謝恩 [email protected]

1

OK,我檢查,我使用的重載BitmapFactory.decodeByteArray使用一個不變的位圖與BitmapFactory.Options設置InBitmap標誌。可能是我必須爲Bitmap本身做的其他事情,可能至少使它成爲Static。也許還有一些其他的標誌也設置好了,但你現在應該有足夠的耐心。

+0

非常感謝,我會給它更多的想法 – Lele 2012-05-25 12:44:29