相关疑难解决方法(0)

从Android Media Recorder流式传输后修复3GP文件

我试图通过本地unix socket从android摄像头流式传输视频,并将文件从流写入sdcard.一切正常,除了文件不能播放任何播放器.这是因为Android没有填补文件中的一些空白,因为socket不可寻找.据我所知,我需要在视频流结束后进行一些修改.我在这里,这里这里读过几篇文章,但没有一篇能帮到我.我正在使用十六进制编辑器来学习如何手动完成它,所以之后在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
Run Code Online (Sandbox Code Playgroud)

然后我用以下命令找到mdat和moov原子的起始位置:

grep -aobE "ftyp|mdat|moov" sample_not_playable.3gp
Run Code Online (Sandbox Code Playgroud)

它给了我以下输出:

4:ftyp
28:mdat
1414676:moov
Run Code Online (Sandbox Code Playgroud)

然后做 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 …
Run Code Online (Sandbox Code Playgroud)

video android 3gp video-streaming android-mediarecorder

12
推荐指数
1
解决办法
7661
查看次数

从MediaRecorder通过LocalSocket流式传输视频

我正试图通过本地Socket从Android的MediaRecorder发送h264/AAC视频.目标是通过RTMP或RTSP将视频发送到WOWZA服务器,但它给我带来了很多麻烦,而现在我只是试图将数据写入LocalServerSocket中的文件.

这是一些代码.对不起,它不是很干净,但我花了好几个小时测试很多东西,现在我的项目很乱.

在Camera活动中,输出文件设置:

LocalSocket outSocket = new LocalSocket();

try {
    outSocket.connect(new LocalSocketAddress(LOCAL_SOCKET));
} catch (Exception e) {
    Log.i(LOG_TAG, "Error connecting socket: "+e);
}
mMediaRecorder.setOutputFile(outSocket.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

LocalServerSocket实现:

try {
    mLocalServerSocket = new LocalServerSocket(mName);
} catch (Exception e) {
    Log.e(LOG_TAG, "Error creating server socket: "+e);
    return;
}

while (true) {

    File out = null;
    FileOutputStream fop = null;
    try {
        mLocalClientSocket = mLocalServerSocket.accept();

        InputStream in = mLocalClientSocket.getInputStream();

        out = new File(mContext.getExternalFilesDir(null), "testfile.mp4");
        fop = new FileOutputStream(out);

        int len = 0;
        byte[] buffer = …
Run Code Online (Sandbox Code Playgroud)

sockets video android

6
推荐指数
1
解决办法
7380
查看次数