使用websocket做视频直播
来源:互联网 发布:大数据对教育的影响 编辑:程序博客网 时间:2024/05/16 14:09
最近在做的一个小项目需要用到相关技术,找到这篇文章貌似不错,于是就翻译转载上来了。
Recently I’m interesting in these technologies and I’m working on a project related to it. I’ve found this useful article so I translated and posted it here.原文地址 / Original post:
HTML5 Live Video Streaming via WebSockets – PhobosLab
笔者之前做一个实时监控应用的时候,曾搜索过一些将 iPhone 的摄像头拍摄的画面实时传输到浏览器的方案,一个都没有。
就 HTML5 来说,视频(实时)直播是一个很悲催的活,HTML5 视频目前还没有一个正式的流式传输支持,Safari 支持很蹩脚的 HTTP Live Streaming 并且也即将有 Media Source Extension 规范和 MPEG-DASH。但所有这些方案都是将视频分成小片,由浏览器单独下载,因此会产生最小五秒钟的延迟。
下面是一个完全不同的方案,可以支持所有现代浏览器:Firefox、Chrome、Safari、Mobile Safari、Android 版 Chrome 甚至是 IE10。
这套方案向后兼容,没有用到什么新奇技术,目前暂时不支持音频。但它出乎意料地好用。
来自摄像头的视频被 ffmpeg 编码,然后通过 HTTP 传递给一个 Node.js 写的小脚本;脚本会将这条 MPEG 视频流通过 WebSockets 分发给所有链接的浏览器;浏览器使用 JavaScript 解码 MPEG 视频流并将解码后的画面渲染到 Canvas 元素上。
你甚至可以用树莓派来传输视频。可能会有点慢,但是笔者测试过以 30fps 的帧率实时编码 320×240 视频不成问题。对笔者来说这是最好的树莓派视频方案。
下面是构建步骤。首先你需要取得最新版本的 ffmpeg,最新的安装包可以从 deb-multimedia 获得。如果你使用 Linux,你的摄像头应该在位于 /dev/video0
或 /dev/video1
;在 OS X 或 Windows 上你可以用VLC。
确保用来分发视频流的服务器安装了 Node.js。下载 phoboslab/jsmpeg 项目的 stream-server.js 脚本。安装 WebSocket 包 ws
并启动服务器:
npm install wsnode stream-server.js 你的密码
这里的密码是用来确保不会有好奇宝宝来劫持你的视频流用的。如果服务器运行正常,你应该会看到这样的输出:
Listening for MPEG Stream on http://127.0.0.1:8082/<secret>/<width>/<height>Awaiting WebSocket connections on ws://127.0.0.1:8084/
服务器启动后,你就可以启动 ffmpeg 并将它指向到正在运行的这个域名和端口了:
ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -f mpeg1video -b 800k -r 30 http://example.com:8082/你的密码/640/480/
这条命令会开始从摄像头捕捉 640×480 的视频,并编码成 30fps 码率 800kbps 的 MPEG 视频。编码后的视频会通过 HTTP 被发送到所指定的服务器和端口。确保密码正确,URL 中的长和宽也需要正确指定,否则服务器无法正确判断当前的分辨率。
在树莓派上你可能需要将分辨率降至 320×240 来确保编码速度仍能维持 30fps。
要观看直播,需要从前文提到的 jsmpeg 项目中下载 stream-example.html 和 jsmpg.js 文件,更改 stream-example.html 中的 WebSocket URL 为你的服务器地址,并使用你喜欢的浏览器打开。
如果一切正常,你就能看到少于 100ms 延迟的流畅的摄像头画面。很好很强大对不?
更便捷的方案请围观原文的 Instant Webcam。
只是备忘一下,近期会再发一篇博文来总结一下各个方案的实际使用效果。
重复一次原文地址 / Original post:
HTML5 Live Video Streaming via WebSockets – PhobosLab
- 使用websocket做视频直播
- 使用websocket做视频直播
- 使用WebSocket实现图文直播功能
- Live555做本地采集视频直播
- 做移动视频直播应用的思路
- 想做一个视频在线直播系统
- 年会视频直播如何做
- 视频直播如何做回放(教程)
- [RED5]用red5做视频直播(red5流媒体直播)
- [视频直播平台]从零开始做直播平台_OBS----1
- 如何做电视节目的视频直播(电视台节目直播)
- 使用vitamio做直播demo
- 手机视频采集直播 bambuser.com 轻松一个手机,就可以做视频直播!
- 手把手教你做视频直播:音视频直播的实现
- 做视频直播时如何实现对观看直播的用户做登记?
- 微信视频直播如何做收费直播(如何做付费的微信直播)图文教程
- java使用websocket和WebRTC视频通话
- 使用ffmpeg直播监控的视频
- Android开发中应该避免的内存泄露
- 【C#】【JSON】JSON转C#的写法(含嵌套对象)
- 不要在Android的Application对象中缓存数据!
- Photos(PHCollection)
- Android开发中无处不在的设计模式——工厂模式
- 使用websocket做视频直播
- 这些年的一些人和一些事。
- 数据存取之File浅析
- 浏览内核CPU不收敛问题定位和分析
- oracle修改序列
- 让背景在文字的后面移动
- ios strong weak
- java多文件上传plupload控件实现多图片上传(一)
- Swoole:重新定义PHP