クライアント間でライブ ビデオをストリーミングするピア ツー ピア アプリケーションを開発しようとしています。クライアントが参加し、ストリーミングできるようになります。
以下のコードはクラッシュしませんが、ストリーミングは許可されません。何が問題なのか知りたいので教えてください。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.Buffer;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.VideoView;
public class StreamingclienttestActivity extends Activity {
/** Called when the activity is first created. */
StreamingMediaPlayer smp;
boolean paused = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Add Activity as callback for SurfaceView
final VideoView vv = (VideoView) findViewById(R.id.videoView1);
try {
//The IP of the streaming server and the port number
Socket sock = new Socket("10.68.50.63",3333);
//Get the input stream from the socket
final InputStream is = sock.getInputStream();
if (is == null)
throw new RuntimeException("stream is null");
final File temp = File.createTempFile("mediaplayertmp", "dat",new File("/sdcard/"));
String tempPath = temp.getAbsolutePath();
final FileOutputStream out = null;
new Thread(new Runnable() {
public void run() {
byte buf[] = new byte[1024];
do {
int numread = -1;
try {
numread = is.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (numread <= 0)
break;
try {
out.write(buf, 0, numread);
out.equals(temp) ;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (true);
//Start the StreamingMediaPlayer with the input stream
smp = new StreamingMediaPlayer("temp",vv);
//Trigger playback
smp.play();
}
}
).start();
}
catch (Exception e) {
Log.w("StreamingcliettestActivity", "Exception while instantiating smp.");
e.printStackTrace();
}
new Thread(new Runnable() {
public void run() {
try {
ServerSocket ssock = new ServerSocket(3333);
//Log.w(LOGTAG, "Waiting for connection");
Socket s = ssock.accept();
BufferedOutputStream outStream = new BufferedOutputStream(s.getOutputStream());
FileInputStream fileInput = new FileInputStream(new File("sdcard/temp"));
//Log.w(LOGTAG, "Start sending data");
byte[] buff = new byte[1024];
int read = -1;
while ((read = fileInput.read(buff)) != -1) {
outStream.write(buff, 0, read);
}
outStream.flush();
outStream.close();
//Log.w(LOGTAG, "Closed connection");
} catch (Exception e) {
Log.w("StreamingcliettestActivity", "Exception while instantiating smp.");
e.printStackTrace();
}
}
}).start();
}
// public class StreamingclientSERVERtestActivity extends StreamingclienttestActivity {
// private static final String LOGTAG = "StreamingClientServer";
// public void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
@Override
public void onConfigurationChanged(Configuration newCfg) {
//ignore orientation change
super.onConfigurationChanged(newCfg);
}
@Override
public void onDestroy() {
smp.close();
super.onDestroy();
}
}
書かれているように、入力ストリームから読み取るソケットを開こうとしています。この入力ストリームをファイル (0 バイトとして作成されています!!) に書き込もうとしていますが、何もありません。この既存のストリームのこの部分を別のクライアントに使用しようとしています。
助けてください