携帯電話のカメラから PC サーバーにビデオをストリーミングするために Android アプリケーションを使用しており、それらを HDD 上のファイルに保存する必要があります。そのため、ファイルが作成され、ストリームが正常に保存されましたが、結果のファイルはビデオ プレーヤー (GOM、KMP、Windows Media Player、VLC など) で再生できません。画像も音声も再生エラーのみです。
私は自分の Android アプリケーションを電話でテストしましたが、この場合、キャプチャしたビデオは電話の SD カードに正常に保存され、PC に転送した後、エラーなしで再生されたので、私のコードは正しいと言えます。
最終的に、ビデオ コンテナの問題に気付きました。データは携帯電話から MP4 形式でストリーミングされ、PC では *.mp4 ファイルに保存されます。この場合、ビデオ プレーヤーでの再生にはファイルが正しくない可能性があります。ストリーミングビデオをファイルに正しく保存する方法を誰か提案できますか?
ストリーム データを処理および保存するコードがあります (簡素化するためのエラー処理はありません)。
// getOutputMediaFile() returns a new File object
DataInputStream in = new DataInputStream (server.getInputStream());
FileOutputStream videoFile = new FileOutputStream(getOutputMediaFile());
int len;
byte buffer[] = new byte[8192];
while((len = in.read(buffer)) != -1) {
videoFile.write(buffer, 0, len);
}
videoFile.close();
server.close();
また、メディア ストリームの保存に対処する際に考えられる「落とし穴」について誰かが話してくれれば幸いです。
ありがとう、私はあなたの助けを願っています!
アレックス。
更新:
ビデオを電話のストレージにローカルに記録するには、次を使用します。
//targetFile - new File object, represents a file on phone SD card
myMediaRecorder.setOutputFile(targetFile);
そしてそれをPCにストリーミングするため(エラー処理を簡素化することなく)
ParcelFileDescriptor pfd = null;
Socket socket = null;
String hostname = "my IP";
int port = 8081;
socket = new Socket(InetAddress.getByName(hostname), port);
pfd = ParcelFileDescriptor.fromSocket(socket);
myMediaRecorder.setOutputFile(pfd.getFileDescriptor());