资讯专栏INFORMATION COLUMN

使用 WebSockets 进行 HTML5 视频直播

blastz / 2269人阅读

摘要:但所有这些方案都是将视频分成小片,由浏览器多带带下载,因此会产生最小五秒钟的延迟。对笔者来说这是最好的树莓派视频方案。确保用来分发视频流的服务器安装了。在树莓派上你可能需要将分辨率降至来确保编码速度仍能维持。

这篇文章是2014年发的,已经过时了!不要再评论了!
最近在做的一个小项目需要用到相关技术,找到这篇文章貌似不错,于是就翻译转载上来了。
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 的帧率实时编码 320x240 视频不成问题。对笔者来说这是最好的树莓派视频方案。

下面是构建步骤。首先你需要取得最新版本的 ffmpeg,最新的安装包可以从 deb-multimedia 获得。如果你使用 Linux,你的摄像头应该在位于 /dev/video0/dev/video1;在 OS X 或 Windows 上你可以用 VLC。

确保用来分发视频流的服务器安装了 Node.js。下载 phoboslab/jsmpeg 项目的 stream-server.js 脚本。安装 WebSocket 包 ws 并启动服务器:

npm install ws
node stream-server.js 你的密码

这里的密码是用来确保不会有好奇宝宝来劫持你的视频流用的。如果服务器运行正常,你应该会看到这样的输出:

Listening for MPEG Stream on http://127.0.0.1:8082///
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/

这条命令会开始从摄像头捕捉 640x480 的视频,并编码成 30fps 码率 800kbps 的 MPEG 视频。编码后的视频会通过 HTTP 被发送到所指定的服务器和端口。确保密码正确,URL 中的长和宽也需要正确指定,否则服务器无法正确判断当前的分辨率。

在树莓派上你可能需要将分辨率降至 320x240 来确保编码速度仍能维持 30fps。

要观看直播,需要从前文提到的 jsmpeg 项目中下载 stream-example.html 和 jsmpg.js 文件,更改 stream-example.html 中的 WebSocket URL 为你的服务器地址,并使用你喜欢的浏览器打开。

如果一切正常,你就能看到少于 100ms 延迟的流畅的摄像头画面。很好很强大对不?

更便捷的方案请围观原文的 Instant Webcam。

只是备忘一下,近期会再发一篇博文来总结一下各个方案的实际使用效果。

重复一次原文地址 / Original post:
HTML5 Live Video Streaming via WebSockets - PhobosLab

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34571.html

相关文章

  • 使用 WebSockets 进行 HTML5 视频直播

    摘要:但所有这些方案都是将视频分成小片,由浏览器单独下载,因此会产生最小五秒钟的延迟。对笔者来说这是最好的树莓派视频方案。确保用来分发视频流的服务器安装了。在树莓派上你可能需要将分辨率降至来确保编码速度仍能维持。 这篇文章是2014年发的,已经过时了!不要再评论了! 最近在做的一个小项目需要用到相关技术,找到这篇文章貌似不错,于是就翻译转载上来了。Recently Im interestin...

    fuchenxuan 评论0 收藏0
  • 使用 WebSockets 进行 HTML5 视频直播

    摘要:但所有这些方案都是将视频分成小片,由浏览器单独下载,因此会产生最小五秒钟的延迟。对笔者来说这是最好的树莓派视频方案。确保用来分发视频流的服务器安装了。在树莓派上你可能需要将分辨率降至来确保编码速度仍能维持。 这篇文章是2014年发的,已经过时了!不要再评论了! 最近在做的一个小项目需要用到相关技术,找到这篇文章貌似不错,于是就翻译转载上来了。Recently Im interestin...

    褰辩话 评论0 收藏0
  • htm5新特性(转)

    摘要:转自今天来谈谈前端面试中基本上每次一面都会被问到的一个问题,那就是的新特性了。元素,表示生成密匙。和通过设置和特性,可以将输入框的数值输入范围限定在最低值和最高值之间。一旦为某输入型控件设置了特性,那么此项必填,否则无法提交表单。 转自:http://hyuhan.com/2017/07/06/... 今天来谈谈前端面试中基本上每次一面都会被问到的一个问题,那就是html5的新特性了。...

    Eirunye 评论0 收藏0
  • htm5新特性(转)

    摘要:转自今天来谈谈前端面试中基本上每次一面都会被问到的一个问题,那就是的新特性了。元素,表示生成密匙。和通过设置和特性,可以将输入框的数值输入范围限定在最低值和最高值之间。一旦为某输入型控件设置了特性,那么此项必填,否则无法提交表单。 转自:http://hyuhan.com/2017/07/06/... 今天来谈谈前端面试中基本上每次一面都会被问到的一个问题,那就是html5的新特性了。...

    focusj 评论0 收藏0
  • 前端面试之htm5新特性

    摘要:今天来谈谈前端面试中基本上每次一面的时候都会被问到的一个问题,那就是的新特性。新表单元素元素,表示电话号码。和通过设置和特性,可以将输入框的数值输入范围限定在最低值和最高值之间。一旦为某输入型控件设置了特性,那么此项必填,否则无法提交表单。 今天来谈谈前端面试中基本上每次一面的时候都会被问到的一个问题,那就是html5的新特性。这个是学习前端必须掌握的基础知识。 新增的元素 html5...

    teren 评论0 收藏0

发表评论

0条评论

blastz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<