使用本地套接字将实时视频录制保存到SD卡中 - 视频无法播放

24
尝试使用本地套接字以Mp4/3gp格式捕获视频并将其保存到SD卡中。能够逐字节写入SD卡,但视频文件无法播放。我已经查看了许多示例:

https://github.com/fyhertz/spydroid-ipcamera

https://github.com/mconf/sipdroid

还有许多其他问题。我注意到有人建议这可能是文件头的问题。我尝试跳过头部中的那些“mdat”数据:

private void skipHeader() throws IOException {
    // Skip all atoms preceding mdat atom
    byte[] buffer = new byte[3];
    while (true) {
        while (mReceiver.getInputStream().read() != 'm');
        mReceiver.getInputStream().read(buffer,0,3);
        if (buffer[0] == 'd' && buffer[1] == 'a' && buffer[2] == 't') break;
    }
}

最终,没有任何一种方法适用于我。我需要做什么额外的工作才能使用本地套接字播放这些视频文件?


本地套接字读取的是什么?它是Mp4/3gpp还是其他格式? - digitizedx
1
这个问题似乎已经有一些研究了 - 看看是否有适合您的替代方案 https://dev59.com/Ul4b5IYBdhLWcg3whSBC - Vrashabh Irde
你的优先选择是什么?是低延迟的流媒体还是尽可能少的帧丢失的录制? - PhilLab
想要在手机本地设备上录制同时直播到服务器上 - user1468129
1个回答

4
从您的解释中可以看出,您想要实现的是屏幕录制器。当然,您的意图是让系统将其作为您的软件所提供的技术的一部分实现。
在这种情况下,最好的方法是改进已经存在的内容,将代码与新功能或新性能结合起来,并给予您使用的原始源适当的信用 - 如预期的那样。这就是开源的美妙之处,它允许代码被重用、分发和改进。
在Github上有很多项目...正如您所知道的,有些很好,有些非常棒。对于您的特定情况,我的建议是使用现有的代码,使您的流媒体录制系统能够捕获视频,无需root设备,因为最终用户不会有兴趣为了运行您的软件而使新购买的设备失去保修。
还要实现良好的速度,至少每秒捕获20个屏幕,以便在Android不同屏幕尺寸上提供清晰的分辨率和低CPU使用率。所有这些特征都将使您的解决方案稳定且看起来非常可靠。
我认为您可以采取的最佳方法是将“sji-android-screen-capture”代码作为项目的一部分加入其中,这将为您节省时间和许多麻烦。如果您的目标设备是Android 4.2~4.4,则可以使用它支持这些Android版本。有关更多信息和源代码本身,请访问Github存储库。或者,您还可以使用Android ScreenCapture示例实时捕获设备屏幕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接