私はAndroidカメラからローカルUNIXソケットを介してビデオをストリーミングし、ストリームからSDカードにファイルを書き込もうとしています。ファイルがどのプレーヤーでも再生できないことを除いて、すべてが正常に機能します。これは、ソケットがシークできないため、Androidがファイルのギャップを埋めていないためです。私が理解しているように、ビデオストリームが終わった後、私はいくつかの変更を加える必要があります。私はここ、ここ、ここでいくつかの記事を読みましたが、どれも私を助けませんでした。私は手動でそれを行う方法を学ぶために16進エディターで遊んでいるので、後でAndroidコードで同じことをするのは簡単です。
ストリームから保存したサンプルファイルは次のとおりです:https ://dl.dropbox.com/u/17510473/sample_not_playable.3gp
誰かがそれをプレイ可能にして、彼がそれをどのようにしたかを伝えるために修正できますか?
編集:私は3gpファイルのヘッダーを消去し、次のように新しいものを書き込みます:
00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 00 00 00
次に、次のコマンドを使用して、mdatおよびmoovアトムの開始位置を見つけます。
grep -aobE "ftyp|mdat|moov" sample_not_playable.3gp
そしてそれは私に次の出力を与えます:
4:ftyp
28:mdat
1414676:moov
次に、1414676 - 28 = 1,414,648 = 0x1595F8
次に、mdatアトムの直前の25〜28バイトとして0x1595F8を書き込みます。したがって、私のヘッダーは次のようになります。
00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 15 95 F8
そして、mplayerで再生しようとすると、ビデオとオーディオの出力が破損します。mplayerの出力の一部を次に示します。
[amrwb @ 0x7f72ad652380]Frame too small (33 bytes). Truncated file?
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Frame too small (33 bytes). Truncated file?
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
A: 11.0 V: 1.4 A-V: 9.650 ct: 0.023 0/ 0 10% 1% 1.6% 0 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f72adeafc40]stream 1, offset 0x15e62b: partial file
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
A: 11.1 V: 1.5 A-V: 9.558 ct: 0.027 0/ 0 9% 1% 1.4% 0 0
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
私が間違っていることは何ですか?