我正在尝试通过本地的unix套接字从Android相机实时传输视频,并将流写入SD卡文件。一切都很顺利,但是任何播放器都无法播放文件。这是因为Android没有填补文件中的一些空隙,因为套接字不可寻址。据我了解,在视频流结束后,我需要进行一些修改。我阅读了几篇文章(here,here 和 here),但它们都没有帮助我。我正在使用十六进制编辑器进行探索,以便在之后可以轻松地在Android代码中执行相同的操作。
这是一个保存自流的示例文件:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp。
“有人能修复它使其可播放并告诉我他是如何做到的吗?”
“编辑:我删除了3gp文件的标题并写下了以下新标题:”
然后我使用以下命令找到mdat和moov原子的起始位置:
它给了我以下输出:
然后计算出
我做错了什么?
这是一个保存自流的示例文件: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
接着我将0x1595F8写成25-28字节,就在mdat原子之前。因此我的头文件现在看起来像这样: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!
我做错了什么?