私はコードを持っています:
private MediaRecorder recorder;
String hostname = "192.168.1.125";
int port = 1935;
Socket socket;
ParcelFileDescriptor pfd;
public void start()
{
try {
socket = new Socket(InetAddress.getByName(hostname), port);
pfd = ParcelFileDescriptor.fromSocket(socket);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
recorder.setOutputFile(pfd.getFileDescriptor());
// String filename = String.format("/sdcard/%d.mp4", System.currentTimeMillis());
//
// recorder.setOutputFile(filename);
try
{
recorder.prepare();
recorder.start();
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
そしてサーバー側:
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)
{
try
{
System.out.println("create sock");
ServerSocket svsock = new ServerSocket(1935);
System.out.println("accept");
Socket sock = svsock.accept();
System.out.println("buffer read");
FileOutputStream outFile = null;
String filename = String.format("%d.mp4", System.currentTimeMillis());
try {
outFile = new FileOutputStream(filename);
System.out.println(filename);
} catch (IOException e1) {
e1.printStackTrace();
}
InputStream is = new DataInputStream(sock.getInputStream());
byte[] byteBuffer = new byte[1024];
int allsize = 0;
while(sock.isConnected()) {
int size = is.read(byteBuffer);
if (size == -1){
break;
} else {
outFile.write(byteBuffer, 0, size);
}
allsize += size;
}
System.out.println("close size=" + allsize);
outFile.close();
sock.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("endmain");
}
}
Android 2.2.2 (HTC quiet bright) でテストしたところ、すべて正常に動作しました。「開始」ボタンを押すと、サーバーがファイルを作成し、ストリームからファイルにデータを記録します。このファイルの後、VLCプレーヤーなどで正常に再生されます。
しかし、Android 4.0.4(Galaxy S2)サーバーでテストすると、ファイルが作成され、ストリームからファイルにデータが記録されますが、VLC(および他のプレーヤーも)で再生されず、エラーが発生します
mp4 エラー: MP4 プラグインが破棄されました (moov、foov、moof ボックスがありません) avcodec エラー: コーデックを開けませんでした demux エラー: 指定されたイベント オブジェクト ハンドルが無効です ps エラー: ピークを確認できません メイン エラー: `file/:/ に適した demux モジュールがありません//C:/1345461283455.mp4'
このファイルをYouTubeにもアップロードしようとしましたが、YouTubeをアップロードした後、ファイル形式がサポートされていないなどのエラーが表示されます。
しかし、Android 4.0.4(Galaxy S2)は、ファイルを電話のメモリに保存すると(サーバーにストリーミングしないで)、ファイルを正常に作成して再生します
おそらくサーバー側の問題か、Android 4.0.4で何かが変更されたと思います。
私を助けてください。前もって感謝します。