【问题标题】:Live video broadcasting视频直播
【发布时间】:2012-07-20 06:26:24
【问题描述】:
我将开发一个基于聊天的移动应用程序,它允许视频聊天。我正在使用 HTML5、javascript 和 PhoneGap。使用phoneGap,我可以访问手机摄像头,捕捉视频,保存视频并将其上传到服务器。我已经为android做了。但我需要视频的现场直播。有什么解决办法吗?
注意:它不是任何安卓原生应用。
【问题讨论】:
标签:
javascript
jquery
html
cordova
html5-video
【解决方案1】:
您没有指定当前用于视频捕获的设施。 AFAIK,当前的 WebView 尚不支持 WebRTC,这是 w3 标准,它将很快使您能够访问 HTML5 代码中的视频帧。所以我假设你正在使用 PhoneGap 的 navigator.device.capture.captureVideo 设施。
在 Android 上,captureVideo 创建 3gp 文件。 3gp 的问题在于它们在捕获时无法流式传输或播放:解析其中的视频帧需要文件的 MOOV atom,并且仅在文件中的所有帧都已编码后才写入。因此,您必须先停止录制,然后才能使用该文件。
在 HTML5 中最好的方法是实现一个循环,捕获一个视频短片(3-5 秒?),然后在捕获下一个块时将其发送到服务器。服务器将需要将剪辑连接到可以通过流服务器广播的单个文件。这将使广播的延迟增加几秒钟,并且您很可能会在两个单独的块捕获之间的间隙处丢失帧。对于某些用例(例如安全摄像头)来说,这可能就足够了。
如果您的应用程序无法承受丢帧,我认为没有其他选择,只能在 Java 中实现视频捕获和流式传输,作为 PhoneGap 插件。
【讨论】:
-
非常感谢您的回答。现在我要做的是,我正在使用 phonegap,但是每当用户尝试视频通话时,我都会将控制权转移到 android 本机功能。我正在使用 Android Mediarecorder 捕获视频,通过它我可以完全控制录制。但我只能将视频保存在本地文件中。我需要流式传输它。有没有办法做到这一点。我找到了一种解决方案Here。但我还没试过。
-
任何使用 3GP 或 MP4 作为文件格式的解决方案都将成为直播流媒体的问题,因为这些文件在完成之前无法播放(MOOV atom 需要完成帧偏移信息) .我见过一个项目可以将视频转换为 FLV,这是一种可以实时传输的文件格式:code.google.com/p/ipcamera-for-android - 但请注意,它 (1) 是 GPL 并且 (2) 使用 JNI