直播到浏览器

时间:2014-04-28 18:52:32

标签: javascript html video-streaming html5-video html5-audio

我的智慧结束了。

我想将实时视频直播流式传输到网络浏览器。

目前我使用ffmpeg将一个directshow实时源作为webm流流式传输到node.js,然后将该流转发给来自<video>元素的http请求。到目前为止一切正常。

直播源 - &gt; ffmpeg - &gt; POST [webm] - &gt; node.js - &gt; GET [webm] - &gt;视频标签

我的问题是源时钟和Web客户端时钟并不完全匹配(不是那么令人惊讶)。对于视频而言,这不是问题,不时地删除或复制帧不明显。然而,对于音频,这是另一个问题。从我迄今为止所能解决的问题来看,Chrome(或任何其他浏览器)不执行任何形式的音频重采样补偿(例如来自ffmpeg的swr_set_compensation)以补偿这种不匹配。相反,当播放缓冲区用完样本时,我会听到非常可听见的音频失真(响亮的嘟嘟声)。

我的问题是,是否可以在网络浏览器中实现正常播放的正确播放(使用音频)?

我还没有尝试过使用silverlight或flash进行播放。这可能会更好吗?

1 个答案:

答案 0 :(得分:4)

流媒体(音频或/和视频)流式传输到网络浏览器已经有几年了,尽管它至今仍在取得进展。对于网络媒体来说,这是下一个重要的事情,像Youtube这样的许多平台已经在网上。

典型的实时媒体流方案是:

音频/视频Feed&gt;转码&gt;流媒体&gt;播放器

在每一步中,您都有多种技术可能性。但是我应该在这里提到,实时媒体流的道路是用专有技术铺平的。

  • 音频/视频供稿:原始或非常轻微压缩的媒体格式,无法上传到互联网。你需要对它进行转码。您可能必须使用诸如PCI Express卡或USB /霹雳设备之类的抓取设备将您的摄像头安装到计算机上。
  • 转码:您拥有软件(ffmpeg,Flash媒体直播编码器,Wirecast)或硬件解决方案(streamingmedia.com有关于此主题的大量信息,如here)。 H264 / AAC是当前的媒体专业标准,流经常被转码为多种格式(比特率)以适应不同的网络条件。
  • 流式传输:您很可能需要定位多台设备才能投放直播。并非所有设备都支持相同的流协议。 HLS适用于Apple设备和Android&gt; 4.1。 HDS或RTMP适用于Flash,Silverlight中的Smooth流媒体。您无法使用一种协议访问所有设备,因此在这种情况下,您需要一台流媒体服务器,如Wowza或Red5。流式传输服务器将转码后的直播流作为输入,并为跨设备传输做好准备,同时维持大量的同时连接(现在一千多个并不罕见)。它还可以添加DVR或DRM等功能。截至今天,努力围绕HTTP自适应比特率传递。大公司为全球交付增加了CDN支持。
  • 播放器:使用各种选项显示您的直播,例如自定义布局,隐藏式字幕,广告,聊天模块等。到目前为止,Flash在桌面上的实时媒体流方面一直处于领先地位。您可以在支持HLS的iOS和Android上使用HTML5视频。

快速进入MPEG DASH并且可以与HTML5视频一起使用。有JS lib支持直播。我已经对它进行了测试,虽然我可能不会将它用于生产案例场景,因为它仍然有点笨重(按需支持更好)并且浏览器支持目前很窄(截至2013年8月30日) ,桌面Chrome,桌面Internet Explorer 11和Android版移动Chrome测试版是唯一支持的浏览器。

我不能对你的解决方案发表太多评论,因为我没有使用node.js进行流媒体播放,但这听起来像是一项有趣的工作。我将使用与您的案例相关的典型解决方案:

设备&gt; ffmpeg(H264 / AAC)&gt; Wowza&gt;混合播放器(Flash + HTML5)。

而不是Wowza你可以使用Red5(免费/开源 - 但最近没有多少活动)。您还可以在RTMP之上查看支持HLS和MPEG DASH的Nginx RTMP module

对于Flash,我使用Adobe的Strobe支持实时流式传输,并且易于设置和回退到不支持Flash的HTML5。我使用SWFObject lib来检测Flash支持,并将HLS URL提供给移动设备的HTML5视频标记。您可以使用RTSP for Android&lt; 4.1和其他移动设备。

我应该提到的另一件事是实时通讯。对于视频/音频会议,您可以查看WebRTC。这两篇文章应该让你走上正轨。 Herehere。 WebRTC将适用于一对一,一对一,几对少。如果您需要支持更多并发连接,可以查看Licodetokbox