视频流通过套接字和从客户端播放

时间:2010-11-20 08:03:18

标签: android

我有两个简单的程序,服务器和客户端,都在localhost。我想要做的是通过套接字将视频从服务器流式传输到客户端,客户端可以使用套接字的filediscriptor来播放它。首先,我尝试发送一些消息,客户端可以接收它。之后,我将视频的几个字节从服务器的卡发送到客户端。客户端可以接收这些字节但无法播放。有谁知道如何解决这个问题?

以下是我的服务器和客户端代码段:

服务器:

        //Receive request from client.
     Socket client=serversocket.accept();
     System.out.println("accept");

     //Receive client message.
     BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
     String str=in.readLine();
     System.out.println("read:"+str);

     //Send message to client.
     //PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
     //out.println("server message");
     FileInputStream fis=new FileInputStream("/sdcard/toystory3.3gp");
     byte buffer[]=new byte[2000];
     fis.read(buffer,0,20);
     DataOutputStream out=new DataOutputStream(client.getOutputStream());
     out.write(buffer,0,20);
     in.close();
     out.close();
     client.close();
     System.out.println("close");

客户端:

 Socket socket=new Socket("127.0.0.1",4444);
 String message="Initial"+"\r\n";
 //Send message to server.
 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
 out.println(message);

 //Receive message from server.
 BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
 String msg=br.readLine();
 //ParcelFileDescriptor pfd=ParcelFileDescriptor.fromSocket(socket);
 //MediaPlayer m=new MediaPlayer();
 //m.setDataSource(pfd.getFileDescriptor());
 //m.prepare();
 //m.start();

 if(msg!=null)
 {
  System.out.println("Data received.");
  System.out.println(msg);
 }
 else
 {
  System.out.println("Data not received.");
 }
 out.close();
 br.close();
 socket.close();

2 个答案:

答案 0 :(得分:5)

这不起作用,因为3gp(和其他avi派生文件(如mp4等)在文件末尾有标题(sic)。所以任何玩家都必须能够访问整个文件。

RTSP/RTP是目前流式传输视频的唯一方式。 HTTP自适应流媒体正在开发中。

此外,如果您尝试执行p2p视频(设备到设备),您应该知道运营商网络上的所有设备都在NAT防火墙后面。他们只能打开出站连接。你需要使用某种NAT穿孔。

答案 1 :(得分:0)

我试图将ffmpeg移植到android来解决Android的视频和流格式问题。但我发现用所有网络构建android的ffmpeg非常困难。

RTSP有很多用于流式传输的配置,我设法通过MediaPlayer获得了你想要的东西,你应该尝试更好地了解你流式传输的格式(在这种情况下是vlc)。

另外,在darwin流媒体服务器上花了很多钱,它易于配置,我能够使用它流式传输到Android设备。