Video-streaming über socket und die Wiedergabe vom client
Habe ich zwei einfache Programme, server und client, die beide auf localhost. Was ich will zu tun ist, um streaming-video von dem server zu dem client über socket und client spielen kann es durch die Verwendung filediscriptor der Steckdose. Zuerst habe ich versucht Sie uns eine Nachricht, und der client Sie empfangen können. Danach sende ich ein paar bytes an das video von dem server'sd-Karte an den client. Erhält der Kunde diese bytes aber nicht wiedergeben kann. Wer weiß, wie das problem zu lösen?
Hier ist meine server-und client-code-snippets:
Server:
//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");
Client:
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();
Schauen Sie meine- stackoverflow.com/questions/6116880/...
InformationsquelleAutor charlie | 2010-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das wird nicht funktionieren, weil
3gp
(und andereavi
abgeleiteten Dateien wiemp4
etc) header (sic) am Ende der Datei. Also jeder Spieler muss Zugriff auf die ganze Datei.RTSP/RTP
ist der einzige Weg, das video zu streamen, zumindest im moment. HTTP adaptive streaming ist in den Werken.Auch wenn Sie versuchen zu tun, p2p video (Gerät zu Gerät) Sie sollten wissen, dass alle Geräte in Mobilfunknetzen sind hinter der NAT-firewall. Sie können nur öffnen Sie ausgehende verbindungen. Sie müssen eine Art von NAT-piercing.
Im moment ist android noch nicht unterstützt (adaptive) http-streaming. Es verwendet HTTP, aber nur die Datei herunterlädt. Aber wenn Sie VLC verwenden, die funktionieren könnte - habe ich keine Erfahrung mit VLC-so konnte ich nicht geben Ihnen Ratschläge hier.
InformationsquelleAutor Peter Knego
Ich versuchte, port ffmpeg auf android zu lösen das problem der video-und streaming-Formate für android. Aber ich fand heraus, dass die Gebäude ffmpeg für android mit der ganzen Netzwerk-Zeug ist ziemlich hart.
RTSP hat eine Menge von Konfiguration für das streaming habe ich es geschafft, etwas zu bekommen, wie Sie wollen, mit dem MediaPlayer und Sachen, die Sie sollten versuchen, um zu wissen, die Formate, die Sie für das streaming von (vlc in diesem Fall) ein bisschen besser.
Außerdem nehmen Sie eine Menge an einem darwin streaming server seine einfach zu konfigurieren, ich war in der Lage zu streamen auf ein android-Gerät verwenden.
InformationsquelleAutor renam.antunes