2011-03-01 158 views
9

我正在開發一款Android應用程序,該應用程序應該能夠將視頻流式傳輸到本地網絡上的本地服務器,而無需將其存儲在SD卡上。Android MediaRecorder setOutPutFile()使用套接字流式傳輸

爲此,我已在C#簡單的socket應用程序,偵聽特定IP:使用套接字端口:端口

在Android上一部分,我已經設置setOutputFile()這個IP。

此應用程序在Android手機上完美啓動,但不顯示預覽,當我開始錄製時,它無任何例外退出。它也不會向網絡發送任何數據流。

當我將setOutPutFile()設置爲SD卡時,它可以很好地工作並記錄視頻。

對於服務器部分,當我從任何其他應用程序(從PC)發送數據到相同的IP:PORT時,它會接收數據。

總之,我想建立PC和Android之間使用socket進行流媒體的通信渠道。

這裏是我的Android代碼:

Socket soc=new Socket("192.168.1.3",8210); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(soc); 
... 
... 
// other Recorder setup steps 
... 
... 
Recorder.setOutputFile(pfd.getFileDescriptor()); // working fine for sdcard 
Recorder.setPreviewDisplay(holder.getSurface()); 
Recorder.prepare(); 

這裏是我的服務器應用程序,在C#中,運行於PC:

socketForServer = new TcpClient("192.168.1.3", 8210); 
NetworkStream networkStream = socketForServer.GetStream(); 
byte[] rData = new byte[1024]; 
networkStream.Read(rData, 0, 1024); 
... 
... 
// process rData 
... 
... 

我無法理解問題這是發生在這裏。我正朝着正確的方向嗎?

+0

維諾德·你好,你能放開Android應用程序的源代碼?我嘗試做同樣的事情,但視頻凍結,我不知道爲什麼......謝謝。 – Rob 2011-05-03 06:12:37

+0

嗨,對不起,我無法發佈代碼,因爲它來自商業項目。如果您可以向我發送您的代碼,我會嘗試解決此問題。謝謝 – 2011-05-03 07:33:13

+0

我基本上和你做同樣的事情,但我在格式上苦苦掙扎......我收到了一些東西,但沒有我想到的好頭。我的問題在這裏很好地描述(http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system),但我不知道如何處理。 你可以只顯示一小部分? 謝謝。 – Rob 2011-05-05 07:37:47

回答

5

我的服務器代碼有問題。我不得不使用TcpListener代替TcpClient

下面是正確的代碼:

TcpListener listener = new TcpListener(ipAddress, 8210); 
Socket s = listener.AcceptSocket(); 
NetworkStream ns = new NetworkStream(s); 
. 
. 
. 
//reading the data from stream 
. 
. 
. 
+1

嗨維諾德,我想要做同樣的事情,但.NET服務器端在我的情況下工作不正常,任何機會得到你的工作代碼? – Giuseppe 2013-04-12 05:58:22

+0

@Giuseppe該代碼現在是一個IP,所以我不能分享代碼,但如果你可以詳細說明你的問題,那麼我可以幫忙。 – 2013-04-12 06:20:54

+1

因此,您可以通過Socket的方式從Android MediaPlayer與PFD - > FD進行流式傳輸? – ChiefTwoPencils 2014-08-23 06:19:04