私は、ポイントA(2.1アンドロイド携帯)からポイントB(私のサーバー)までリアルタイムでビデオストリームを取得しようとしています。どうすればいい?以下の詳細なは私の試みです(少し長いが、簡潔な!)stream記録中のMediaRecorderファイル
目標は、/一時停止ストリームを停止することなく、サーバーに電話で録画時間の長いビデオを取得することです。数分までの遅延は問題ではない。私は3つのアプローチ
- スレッドビデオ 先の のFileDescriptor「送信者ソケットの FDに
- コールMediaRecoder.setOutputFileから読み込むのFileInputStreamを試してみました。この ソケットは LocalSocketServerに接続します。宛先は が「受信者」ソケットです。
- は、残念ながら、両方の試みが失敗したそのFD
setOutputFile与えて自分のサーバーと にソケットを開きます。
- 私はRecorder.stop(呼び出すだけ 後FileInputStream.available()、 と実際のバイト数を呼び出す たびのみ
が私にこの美しく無用 スタックトレース
を与える)24のバイトを登録しますERROR/AndroidRuntime(18532):原因:java.lang.RuntimeException:起動に失敗しました。 ERROR/AndroidRuntime(18532):android.media.MediaRecorder.start(ネイティブメソッド) ERROR/AndroidRuntime(18532)にて:com.example.demovideo.DemoVideo.initializeCamera(...)で ...
同じエラー2つの
コードスニペット(省略部分)
1)
fileOut = new FileOutputStream(pathToFile);
...
recorder.setOutputFile(fileOut.getFD());
recorder.prepare()
recorder.start()
// in an Async Thread
fileIn = FileInputStream(fileOut.getFD);
while (recording) {
fos.flush();
Log.w("---", "bytesAvailable: " + fileIn.available()); //always returns 24
Thread.sleep(1000);
}
私が代わりに setOutputFile(pathToFile)を使用している場合2)
// in a Thread
server = new LocalServerSocket(SOCKET_ADDRESS);
while (true){
receiver = server.accept();
if (receiver != null){
InputStream input = receiver.getInputStream();
... // processing would go here
} }
sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
recorder.setOutputFile(sender.getFileDescriptor());
...
recorder.prepare();
recorder.start(); // <- error
- が正しく
- SD作品に破損していないビデオ が保存されます。私は
sender.getOutputStream().write(message.getBytes());
私は同じ機能を実装しようとしています。しかし、私はあなたの方法を取得しません。 recorder.setOutputFileを2回設定します.1回はファイルに、もう1回はソケットに設定します。私は、あなたが変更するたびに、複数のfileIDsではなく、新しいfileIDでレコーダーが動作すると思います。 – user1914692
1)と2)は別々の2つの例です – ebaum
別々の場合は、2つのタスクを同時にどのように実装しますか?実際にあなたが別々に2つのタスクを行う場合は、難しい問題でなければなりません。ストリーミングタスクについては、コードアド – user1914692