2012-05-23 160 views
8

我想要的是將broadcast安卓相機視頻發送到遠程位置,任何人都可以在他們的手機或網站上觀看該視頻。 我已經成功將unicast連接到我的電腦上的vlc播放器。 我試過red5服務器,Adobe media server, ffmpeg服務器但全部在vail。 他們每個人都只能從預先錄製的文件中獲得視頻broadcast,但不能從任何直播視頻流獲取視頻。 任何人都可以告訴我我做了什麼。廣播Android相機視頻

回答

7

我閱讀(我認爲它甚至在stackoverflow),你可以提供一個TCP連接的FileHandle MediaRecorder。然後,您可以收聽該連接,讀取數據,將其打包並重新發送爲RTSP/RTP-Stream。

如果碰巧找到原文,我會在這裏引用它。

編輯:

原來的職位是:Streaming Video From Android

約在文件描述符的部分是由:http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

以防萬一,我舉從博客中根據例子:

String hostname = "your.host.name"; 
int port = 1234; 
Socket socket = new Socket(InetAddress.getByName(hostname), port); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
MediaRecorder recorder = new MediaRecorder(); // Additional MediaRecorder setup (output format ... etc.) omitted 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.prepare(); 
recorder.start(); 

但是,這隻發送視頻Fi通過電線傳輸數據。您可以保存它,然後播放它。但如前所述,它不是一個流。

更新: 您甚至不必在第一步中使用TCP套接字。我剛剛通過「LocalSocket」(1)絆倒,這也讓你有一個FileHandle來爲MediaRecorder提供內容。這些本地套接字是「AF_LOCAL/UNIX域流套接字」。請參閱http://developer.android.com/reference/android/net/LocalSocket.html

從今天起,我還沒有嘗試過上述所有內容,但會很快。所以也許我可以在不久的將來有更多的幫助:)

(1)LocalSocket由於安全原因無法在較新的Android版本上使用!請參閱2015-11-25的更新。

UPDATE 2: 剛剛在Android Sources中看到了「OUTPUT_FORMAT_RTP_AVP」。但它隱藏:(所以我想這將是Android的未來的API版本219 https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java線:

public static final int OUTPUT_FORMAT_RTP_AVP = 7; 

我沒試過只是提供了一個硬編碼7欺騙隱藏...如果任何人都沒有,請發表評論在這裏

UPDATE 2015年11月25日

我只是碰到了libstreaming:https://github.com/fyhertz/libstreaming 我做不要深入研究它,但似乎有很多關於Android從這個項目中流式傳輸的知識(如果不僅僅是使用它)。我在那裏讀到,LocalSocket解決方案無效更新的Android版本:(但他們提出了一種替代方法:ParcelFileDescriptor。

+0

我能夠推動原始流到服務器這種方式,但從來沒有能夠做出任何意義它可以給它的客戶端套接字的處理,並推動一切到服務器 –

+0

我想它會在一些文件打包。所以你必須首先拆包它得到原始數據,然後重新打包成RTP包。注意: H264與Fileformat中的MPEG_4_SP不同 – Fildor

+0

在我的android上採用lokal存儲的音頻文件並將其通過RTP發送到我的PC(相同的wlan),我可以聽到它。做這個? – B770