2011-07-17 137 views
2

我試圖建立在Android是從流設備攝像頭視頻的流媒體服務器的應用程序。視頻流從Android設備的相機

我已經看過不同崗​​位和解決方案,這是我目前的狀態,用的幫助(我用Sipdroid,JBoss的,網狀,並分析數據包上的Wireshark)

  1. 我建立的RTSP協議棧和我成功地連接到服務器
    2.我能夠在理論上能夠創造一個RTP包,並將其發送到 服務器

我的問題是在拍攝框架和在RTP數據包發送的數據。 我有2個方向:

1-使用相機和AuidoRecorder捕捉原始媒體數據並使用rtp發送,問題是這些數據是否應根據RTSP ANNOUNCE中的.sdp文件描述進行編碼???按我的理解從攝像頭和麥克風的數據將是未編碼的原始數據 Anorther的事情是如何我在RTP分組制定好這個原始數據。

2-媒體記錄器已經對數據進行了編碼,我可以設置.sdp文件中定義的編碼..我試圖找到一種方法來從輸出文件中讀取,但這需要我轉換.mp4文件數據流數據,這似乎是一個複雜的任務。

我的問題是我在我的事情複雜化是它足以讓視頻和音頻的原始數據的RTP包和流媒體服務器將處理其餘部分???? 請我希望在這個問題上的任何幫助和指導..

感謝

+0

您能夠發起通過蜂窩連接?如果是這樣,你是如何克服手機上所有被阻塞的端口的問題的? – michael

+0

您是否找到解決方案? – Derzu

回答

1

,因爲它由.sdp文件中描述首先必須編碼數據。你想嘗試MediaRecorder而不是AuidoRecord? MediaRecorder允許您設置您將獲得的數據的編碼。

此外,我建議你用一個Socket創建FileDescriptor的,這樣的數據可以通過套接字流而不是靜態的文件傳輸。 代碼可能是這樣的:

Socket socket = new Socket(serverAddr, serverPort); 
socket.setTcpNoDelay(true); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
Camera camera = Camera.open(); 
camera.unlock(); 
MediaRecorder recorder = new MediaRecorder(); 
recorder.setCamera(camera); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); 
recorder.setVideoFrameRate(15); 
recorder.setVideoSize(480, 320); 
recorder.prepare(); 
recorder.start(); 

在RTP傳輸的方法正是現在困擾我。

+0

@ andro-delva,它工作嗎? – Derzu

+1

如何從ParcelFileDescriptor播放視頻或音頻pfd = ParcelFileDescriptor.fromSocket(socket); mediaPlayer.setDataSource(pfd.getFileDescriptor());它不適用於我,它顯示無法創建媒體播放器。我需要做什麼? – Aravi