我将开发一个基于聊天的移动应用程序,它允许视频聊天。我正在使用 HTML5、javascript 和 PhoneGap。使用phoneGap,我可以访问手机摄像头,捕捉视频,保存视频并将其上传到服务器。我已经为android做了。但我需要视频的现场直播。有什么解决办法吗?注意:它不是任何安卓原生应用。
2 回答
您没有指定当前用于视频捕获的设施。AFAIK,当前的 WebView 尚不支持 WebRTC,这是 w3 标准,它将很快使您能够访问 HTML5 代码中的视频帧。所以我假设你正在使用PhoneGap的navigator.device.capture.captureVideo
设施。
在 Android 上,captureVideo
创建 3gp 文件。3gp 的问题在于它们在捕获时无法流式传输或播放:解析其中的视频帧需要文件的 MOOV atom,并且仅在文件中的所有帧都已编码后才写入。因此,您必须先停止录制,然后才能使用该文件。
您在 HTML5 中最好的方法是实现一个循环,捕获一个短片段(3-5 秒?)视频,然后在捕获下一个块时将其发送到服务器。服务器需要将剪辑连接到可以通过流服务器广播的单个文件。这将使广播的延迟增加几秒钟,并且您很可能会在两个单独的块捕获之间的间隙处丢失帧。对于某些用例(例如安全摄像头)来说,这可能就足够了。
如果您的应用程序无法承受丢帧的后果,我认为没有其他选择,只能在 Java 中实现视频捕获和流式传输,作为 PhoneGap 插件。
请参阅 Spydroid http://code.google.com/p/spydroid-ipcamera/
它使用您找到的特殊 FileDescriptor 的解决方案。基本上,他们让视频编码器将带有 H.264 的 .mp4 写入特殊文件描述符,该文件描述符在写入时调用您的代码。然后他们剥离 MP4 标头并将 H.264 NALU 转换为 RTP 数据包。