我有两个简单的程序,服务器和客户机,都在localhost上。我想要做的是通过套接字将视频从服务器端流式传输到客户端,客户端可以使用套接字的filediscriptor进行播放。首先,我尝试发送一些消息,客户端可以接收它。之后,我从服务器的d卡向客户端发送了几个字节的视频。客户端可以接收这些字节,但不能播放它。有人知道怎么解决这个问题吗?
下面是我的服务器和客户端代码片段:
服务器:
//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();
发布于 2010-11-20 08:54:33
这不会起作用,因为3gp
(和其他avi
派生的文件,如mp4
等)在文件的末尾有标题(sic)。所以任何玩家都必须有权访问整个文件。
目前,RTSP/RTP
是播放视频的唯一途径。HTTP自适应流传输正在进行中。
此外,如果您正在尝试制作p2p视频(设备到设备),您应该知道运营商网络上的所有设备都位于NAT防火墙之后。他们只能打开出站连接。您将需要使用某种NAT穿透。
发布于 2010-11-30 15:35:44
我尝试将ffmpeg移植到android上,以解决android的视频和流媒体格式的问题。但是我发现用所有的网络东西为android构建ffmpeg是相当困难的。
RTSP有很多流的配置,我设法用MediaPlayer之类的东西得到了你想要的东西,你应该试着更好地了解你流媒体的格式(在这种情况下是vlc)。
另外,在darwin流媒体服务器上使用了很多,它很容易配置,我可以使用它来流媒体到android设备上。
https://stackoverflow.com/questions/4231793
复制