2011-01-09 18 views
6

私は、ポイントA(2.1アンドロイド携帯)からポイントB(私のサーバー)までリアルタイムでビデオストリームを取得しようとしています。どうすればいい?以下の詳細なは私の試みです(少し長いが、簡潔な!)stream記録中のMediaRecorderファイル


目標は、/一時停止ストリームを停止することなく、サーバーに電話で録画時間の長いビデオを取得することです。数分までの遅延は問題ではない。私は3つのアプローチ

  1. スレッドビデオ 先の のFileDescriptor「送信者ソケットの FDに
  2. コールMediaRecoder.setOutputFileから読み込むのFileInputStreamを試してみました。この ソケットは LocalSocketServerに接続します。宛先は が「受信者」ソケットです。
  3. は、残念ながら、両方の試みが失敗したそのFD

setOutputFile与えて自分のサーバーと にソケットを開きます。

  1. 私はRecorder.stop(呼び出すだけ 後FileInputStream.available()、 と実際のバイト数を呼び出す たびのみ
  2. が私にこの美しく無用 スタックトレース

    を与える)24のバイトを登録します

    ERROR/AndroidRuntime(18532):原因:java.lang.RuntimeException:起動に失敗しました。 ERROR/AndroidRuntime(18532):android.media.MediaRecorder.start(ネイティブメソッド) ERROR/AndroidRuntime(18532)にて:com.example.demovideo.DemoVideo.initializeCamera(...)で ...

  3. 同じエラー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 
  1. が正しく
  2. SD作品に破損していないビデオ が保存されます。私は sender.getOutputStream().write(message.getBytes());
+0

私は同じ機能を実装しようとしています。しかし、私はあなたの方法を取得しません。 recorder.setOutputFileを2回設定します.1回はファイルに、もう1回はソケットに設定します。私は、あなたが変更するたびに、複数のfileIDsではなく、新しいfileIDでレコーダーが動作すると思います。 – user1914692

+0

1)と2)は別々の2つの例です – ebaum

+0

別々の場合は、2つのタスクを同時にどのように実装しますか?実際にあなたが別々に2つのタスクを行う場合は、難しい問題でなければなりません。ストリーミングタスクについては、コードアド – user1914692

答えて

2
  1. を実行したときに ソケットにも働く私は、このアプローチでモバイルからサーバーへのビデオストリーミングアプリを作成し、それが働きました。だからこれは正しいアプローチでなければなりません。後で私がこのプロジェクトに参加しなくなったとき、私は、このアプローチがいくつかの新しい携帯電話、特にSamsung Galaxy Sでは動作しないという報告を受けました。問題は、この携帯電話が1分に1回だけビデオデータを控えめにフラッシュしたことでした。あなたはこれをテストするためにどの電話を使用していますか?

  2. & 3. MediaRecorderはネイティブライブラリのラッパーです。私は、このライブラリが具体的なファイルをパイプではなく書きたいと思っています。ファイルシステムレベルのファイル&ではパイプは同じように見えますが、パイプへのランダムアクセス(シーク)はできません。

+0

のSpydroid-ipcameraを参照してください。私は...銀河のSを使用しています。私はこれが来るのを見たことがない、キャッチのためにありがとう! 受信ソケットをファイルに出力するように設定していた場合は、2または3が使えますか? – ebaum

+0

こんにちは、私も同じことをやろうとしています... Huawei IDEOSの電話機やHTC G1で偶然試しましたか?いいえの場合は、APKにアクセスしてテストできますか?ありがとう。 – Rob

+0

その時(約1.5年前)はG1で動作しましたが、他の携帯電話についてはわかりません。 apkはwww.livecliq.netにあります。私はプロジェクトの現在の状況について知らない。 –

関連する問題