webrtc

WebRTC 系列之视频辅流

作者:网易云信资深客户端开发工程师 陶金亮

近几年,实时音视频领域越来越热,业界很多音视频引擎都是基于 WebRTC 进行实现的。本文主要介绍 WebRTC 在视频辅流上的需求背景以及相关技术实现。

WebRTC 中的 SDP 支持两种方案: PlanB 方案 和 Unified Plan 方案。早期我们使用多PeerConnection的 Plan B 方案中只支持一条视频流发送,这条视频流,我们称之为”主流”。目前我们使用单 PeerConnection 的 Unified Plan 方案,新增一条视频辅流,何为视频”辅流”?视频辅流是指第二条视频流,一般用于屏幕共享。…

来自具有低延迟的 RTSP IP 摄像机的基于浏览器的 WebRTC 流

来自具有低延迟的 RTSP IP 摄像机的基于浏览器的 WebRTC 流

rtsp-低延迟-webrtc

据报道,如今已安装数亿台视频监控 IP 摄像机。当然,并非所有这些都需要低延迟视频播放。视频监控通常是静态的——流记录到存储中并被分析以检测运动。有很多软件和硬件视频监控解决方案可以很好地完成它们的工作。

在本文中,我们将介绍IP 摄像机的稍微不同的用法,即 -需要低延迟通信的应用程序中的在线广播。

首先,让我们来解决关于网络摄像头和 IP 摄像头的常见术语误解。

 

网络摄像头是一种没有自己的 CPU 和网络接口的视频捕获设备。网络摄像头需要连接到计算机、智能手机或任何其他设备才能使用其网络功能和 CPU。

应用程序中的在线广播

IP 摄像机是一个独立的设备,具有自己的网络接口和一个 CPU,用于压缩捕获的视频并将其发送到网络。因此,IP 摄像机是一台独立的微型计算机,可以连接到网络,不需要任何其他设备。也就是说,它直接向 Internet 广播。

低延迟是 IP 摄像机和在线广播的罕见要求。当视频信号源与该流的观众交互时,就会出现对低延迟连接的需求。

IP 摄像机和在线广播

低延迟通常是各种游戏使用场景的要求。例如:实时视频拍卖、真人荷官视频赌场、带主播的交互式在线电视节目、远程四轴飞行器控制等。

游戏使用场景

现场赌场经销商在工作。

    

在html5页面上播放 RTSP 的 7 种方法

在页面上流式传输 RTSP 的 7 种方法

在页面上流式传输 RTSP 的 7 种方法

在本文中,我们展示了 7 种不同的技术方法,用于在浏览器的网页上显示来自支持 RTSP 的 IP 摄像机的视频流。

通常,浏览器不支持 RTSP,因此使用中间服务器为浏览器转换视频流。

 

方法 1 – RTMP

浏览器不支持 RTMP 协议,但猜猜谁支持?忠实的老版Flash Player,虽然不支持所有浏览器,但运行良好,因此可以显示视频流。

Flash播放器

播放器的代码基于 Action Script 3 构建,如下所示:

1
2
3
var nc:NetConnection = nc.connect("rtmp://192.168.88.59/live",obj);
var subscribeStream:NetStream =
                    

WebTransport 与 WebCodecs 初探

什么是WebTransport?

WebTransport 是WebRTC体系下的一套浏览器API,提供低延迟,client和server之间双向通信的能力。 核心的能力点包括:

  • WebTransport 提供基于QUIC 和 HTTP3实现的API, 自动获得QUIC和HTTP3本身的特性,比如应用层的拥塞,避免队头阻塞。
  • 双向通信的能力,多个传输通道复用一个连接的能力,能够很好的替代WebSocket。
  • 提供发送/接受不可靠UDP的能力,这个是浏览器一直欠缺的能力,

相关的规范如下:

  • WebTransport overview 这个规范介绍了WebTransport整体的情况,
  • WebTransport over QUIC 这个规范介绍WebTransport over QUIC的实现规范, 目前版本(M89)的WebTransport实现是基于QUIC的。
  • WebTransport over HTTP/3 这个规范介绍WebTransport over HTTP/3的实现规范,目前版本(M89)还没有实现这这部分。 按照官方的说法是,WebTransport 最终会完全基于HTTP/3 实现,并移除基于QUIC的实现,这个还需要进一步关注。

在浏览器中可以通过URL 来实例化一个WebTransport 实例,比如:

const url = quic-
            

ios 微信自带浏览器 微信小程序 webrtc 或视频不能自动播放(黑屏)的解决方法

为iOS版微信浏览器刚刚支持webrtc的缘故,只有一则3月10多日的新闻说随着ios的更新,采用wkwebview的微信浏览器也已经支持webrtc,再没有其它有用的资料。

后来看了一个使用webrtc支持ios版微信浏览器的网站,发现玄机竟然是下面的代码…

网络摄像头RTSP视频流WEB端实时播放实现方案

IPC视频流怎么实时在WEB浏览器播放,视频流格式是RTSP。
下面我整理了自己实现的方案以及网上看到的一些方案

一、FFmpeg + nginx 将转 hls 通过 video.js 在支持h5浏览器播放(我实现的)

参见:Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

不足:hls延迟较rtmp、http-flv大

二、FFmpeg + nginx-rtmp-module + h5 video,rtsp转rtmp播放

https://blog.csdn.net/gui66497/article/details/78590190
https://blog.csdn.net/LLittleF/article/details/81111713

注:通过video.js播放rtmp流。需要将代码放到服务器,本地windows电脑无法播放

不足:需要浏览器开启flash

三、FFmpeg + nginx-http-flv-module + flv.js,rtsp转rtmp,直接播放flv格式

基于nginx-rtmp-module,通过配置将rtmp转为flv,最后通过flv.js播放。
https://github.com/winshining/nginx-http-flv-module/blob/master/README.CN.md
https://segmentfault.com/a/1190000016043297
https://blog.csdn.net/qq_22633333/article/details/96288603#comments

这种方式是最理想的,我目前找到的方案。当然单指不想花钱买收费方案的。

四、WebRTC

https://github.com/lulop-k/kurento-rtsp2webrtc
https://www.jianshu.com/p/1ddfa72de165

            

音频降噪音,回声消除,自动增益代码示例

json

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">

  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <style>
    html, body{
      height: 100%;
      width: 100%;
    }
    #video{
      height: 300px;
      width: 300px;
    }
  </style>
  <script>
    $(() => {
      var constraints =  {
        audio: {
          echoCancellationType: 'system',//browser|system
          echoCancellation: 
        

34 | 如何使用Nginx搭建最简单的直播服务器?

在前面三篇文章中,我们介绍了传统直播系统架构、HLS 协议、RTMP 协议相关的知识,那今天我们就来具体实操一下,根据前面所学到的知识搭建出一套最简单的音视频直播系统。
今天我们要搭建的这套直播系统相较于《31 | 一对多直播系统 RTMP/HLS,你该选哪个?》一文中介绍的直播系统要简单得多。该系统不包括客户端、没有 CDN 分发,只包括最基本的推流、转发及拉流功能。虽然它简单了一点,但麻雀虽小五脏俱全,通过这样一个实战操作,我们就可以将前面讲解的理论与实际结合到一起了。
当然,作为一个直播系统来说,客户端是必不可少的。但由于时间和篇幅的原因,我们只能借助一些现成的或者开源的客户端对我们的直播系统进行测试了,所以客户端的界面可能会简陋一些。也正因为如此,我才没有将它们算作咱们这个直播实验平台之中。
实际上,我们完全可以以这个直播系统实验平台为原型,逐步地将一些功能添加进去,这样很快就可以构建出一套商业可用的传统直播系统了。

直播系统架构

在正式开始实战之前,我们先来简要介绍一下这个直播系统的架构,如下图所示:
最简单的直播系统
这个直播架构非常简单,由两部分组成,即媒体服务器客户端
媒体服务器有两个功能:
推流功能,可以让客户端通过 RTMP 协议将音视频流推送到媒体服务器上;
拉流功能,可以让客户端从媒体服务器上拉取 RTMP/HLS 流。
实际上,这个架构与我们前面介绍的传统直播架构相比是有变化的,减少了信令服务器,同时将 CDN 网络变成了一台流媒体服务器。但理解了整个直播架构的原理后,我们就可以快速地将这个简单的直播架构恢复成一个正式的、可商用的直播系统。
那对于我们这个简化的直播系统来说,如何实现架构中的媒体服务器呢?
这里我们使用了目前最流行的 Nginx 来实现它。之所以选用 Nginx 主要出于以下两方面的原因:
Nginx 的性能是很优越。在众多的