无延迟直播/超低延迟直播快速接入的示例

news2024/11/28 4:47:45

简要说明

接入无延迟直播/超低延迟直播播放前,需确保直播间频道是无延迟频道,SDK中使用无延迟与常规播放无异,只需加入若干配置就可以快速接入。

 

什么是无延迟/超低延迟直播,可参见我的这篇文章:

无延时直播/超低延时直播画面同步性测试(实测组图)_阿酷tony的博客-CSDN博客无延时直播/超低延时常见应用场景:在线教学、企业培训、MR直播、教学场景下视频连麦互动,支持基于纯html5页面的web直播,支持PC端谷歌浏览器、360浏览器等https://blog.csdn.net/ffffffff8/article/details/128115097


快速开始

// 初始化SDK
var liveSdk = new PolyvLiveSdk({
  channelId: channelId,
  sign: sign, // 频道验证签名
  timestamp: timestamp, // 毫秒级时间戳
  appId: appId, // polyv 后台的appId
  user: {
    userId: userId,
    userName: 'polyv-test',
    pic: 'https://livestatic.videocc.net/assets/wimages/missing_face.png'
  }
});

// 监听频道信息并初始化播放器,并加入lowLatency参数开启无延迟观看
liveSdk.on(PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT, (event, data) => {
  liveSdk.setupPlayer({
    pptEl: '#ppt',
    el: '#player',
    type: 'live',
    lowLatency: true // 必须添加该参数
  });
});  

相关API

liveSdk.setupPlayer 方法增加参数
lowLatency: boolean: 是否使用无延迟播放,开启后若当前频道为无延迟频道并且当前设备支持无延迟播放则使用无延迟播放 lowLatencyConfig?: { controls: boolean; hideNickname: boolean; drag: boolean; }: 无延迟播放设置

liveSdk.setupPlayer({
  // ...
  lowLatency: true,
  lowLatencyConfig: {
    // 是否显示频道中每个人(讲师、嘉宾、其他连麦者)的控制栏, 默认显示,如果没有视频流或者关闭摄像头则固定显示
    controls: true,
    //是否隐藏控制栏的昵称, 默认显示
    hideNickname: false,
    /* 
    * 默认按非无延迟直播的主讲模式排版,在人数少于13包含13人时非主讲按播放器 1/6 宽度,16:9的比例显示,大于6人时分行显示
    * 大于13人时非主讲按播放器 1/8 宽度,16:9的比例显示,大于8人时分行显示
    * 设置后非主讲按每个人宽 1/3, 宽高 16/9显示,在一行显示,鼠标或者左右滑切换,建议在小尺寸和移动端使用
    */
    drag: isMobile
  }
  // ...
});

查询是否支持连麦
PolyvLiveSdk.checkSystemRequirements(): boolean;

查询是否播放无延迟
liveSdk.player.lowLatency: boolean; 当前是否正在播放无延迟

查询是否支持无延迟观看
liveSdk.checkSupportLowLatency(): boolean; 需要PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT事件触发后调用

切换到常规cdn拉流播放
liveSdk.player.switchToCDNPlayer(onSuccess?: () => void, onError?: (err: any) => void): Promse;

切换失败会继续使用无延迟模式观看

if (liveSdk.player.lowLatency) {
  liveSdk.player.switchToCDNPlayer(function() {
    console.log('切换成功')
  }, function(err) {
    console.error(err); // 切换失败,可能是cdn播放器加载失败,可能是当前正在播cdn
  });
}

监听无延迟网络状态

// interface Stats { downlink: 1|2|3 }
// downlink为1时代表网络状态良好,
// 2代表网络状态不佳,可能存在卡顿情况 
// 3代表网络状态糟糕,可提示用户切换网络观看或者尝试降级到cdn播放
// 事件大约20秒触发一次,注意多次调用的情况,只在无延迟状态下回调
liveSdk.player.on('networkQuality', function(Stats) {
    if (Stats.downlink === 3) {
      console.log('当前网络状态较差,建议切换网络观看');
    }
});

无延迟下视频区域人数更新, 如本地流被切换到第一画面该人数也会包含本地流。
在当前频道主讲、嘉宾以及其他连麦者总人数变化时触发,这时可根据人做做一下样式调整以便有更好的显示效果 

liveSdk.player.on('rtcUsersUpdated', function(data) {
  // 可根据人数设置界面样式
  // 比如设置lowLatencyConfig.drag = true 后可在人数大于1时将播放器区域设置为4:3,等于1时设置为16:9
  // data = { users: 3, hasLocalStream: true }
  console.log('当前视频区域人数为', data.users);
  console.log('是否包含本地流', data.hasLocalStream);
});

连麦实例初始化完成

// 连麦实例初始化完成,可以进行连麦相关代码调用,无延迟,普通直播并支持连麦的情况下会回调
liveSdk.player.on('rtcInitialized', function(rtc){
  // 也可以这样获取实例 liveSdk.player.rtcInstance
  console.log('连麦sdk实例', rtc);
  // 连麦sdk加载后调用相关代码
});

在无延迟模式下sdk会自行订阅用户流所以不会广播'USER_STREAM_ADDED', 'SWITCH_MASTER', 'USER_PEER_LEAVE'事件

注意事项

lowLatency 参数设置后sdk会根据当前频道是否开启无延迟频道,当前浏览器环境是否支持来选择是否播放无延迟,若不支持则播放常规的直播
播放后可查询 liveSdk.player.lowLatency: boolean 查询播放的是否是无延迟直播
必须使用https或者在本地使用localhost播放,否则会播放常规直播
转播频道只需要初始化sdk的时候channelId使用接受转播的频道即可
因为设备限制,部分机型或者浏览器上可能存在无法自动播放的问题
iOS 13以下因为兼容性较差并且无法支持多人播放所以降级为CDN观看
ios 14.2.x 版本因为ios系统存在问题,会导致声音有异常,所以降级为CDN播放

 

 MR虚拟直播

  • MR直播实例(混合现实直播)高品质企业直播
  • 企业年会直播来个虚拟舞台场景如何?
  • MR直播(混合现实直播)做一场高品质企业培训
  • MR场景直播-帮助企业高效开展更有意思的员工培训
  • 企业多会场视频直播(主会场、分会场直播)实例效果
  • 虚拟直播(虚拟场景直播)要怎么做?

无延迟直播

  • 无延时直播/超低延时直播画面同步性测试(实测组图)
  • 搞定企业视频直播:硬件设备、直播网络环境和设备连接说明
  • 无延时/无延迟视频直播实例效果案例
  • OBS无延迟视频直播完整教程(组图)
  • 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)

视频加密与安全

  • 企业培训视频如何防止被下载和盗用?
  • 在线教育机构视频加密防下载和防盗用的方法有哪些可以借鉴
  • 上新:视频加密功能增加防录屏(随机水印)功能
  • 两种实现视频倍速播放的方法(视频播放器倍速1.5x/2x)
  • 教育培训机构教学课程内容视频加密是如何做的?

在线导播台

  • 在线导播台(网页导播台)混流效果
  • OBS Studio导播台多画面使用实测
  • 软件导播台多画面切换支持多人连麦实测(实测组图)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基础进阶篇(十四)—— File类常用方法

File 类的对象代表操作系统的文件(文件、文件夹),File 类在 java.io.File 包下。 File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件…

【软件测试与质量保证】期末复习2(HITWH)(软件测试部分)

更多复习资料在下方链接获取;包括复习笔记(有具体习题)、习题答案以及设计题示例 链接:复习资料 复习笔记里的习题不包含答案,具体答案在【云班课答案】文件夹中,顺序都是一一对应的,喜欢刷题可…

进程间通信之管道篇

🏆一、进程间通信目的 1.1什么是通信 进程是具有独立性的,而我们要实现进程间通信的目标,是需要开辟空间和创造方法的。 通信目的: 1、数据传输:一个进程需要将它的数据发送给另一个进程 2、资源共享:…

CSAPP 第六章存储器的结构层次

源程序 执行程序 空间代码都要存在外存上,程序运行的时候操作系统要把外存的东西加载到内存里,CPU要从内存一行一行的读、译码和分析 我们来看一个例子: 指令位于内存中的代码段中,必须从内存中读出来进行译码分析之后才能运行 指…

细说java动态代理及使用场景

一、定义 Java代理模式是一种结构型设计模式,它允许通过创建一个代理对象来间接访问另一个对象,从而控制对原始对象的访问。 1.1 作用 1、在访问原始对象时增加额外功能,如访问前或访问后添加一些额外的行为。 2、控制对原始对象的访问。 J…

热水智能控制系统有什么优点?

热水智能控制系统是一种先进的技术,可以极大地提高家庭和商业场所的热水使用效率,降低能源消耗和运营成本。这种系统利用现代化的传感器、控制器和通讯技术,可以智能地监测和控制热水的温度、流量和使用情况,并根据实际需求来调节…

ASEMI代理ADI亚德诺ADM706SARZ-REEL原厂芯片

编辑-Z ADM706SARZ-REEL参数描述: 型号:ADM706SARZ-REEL VCC工作电压范围:1.0-5.5V 电源电流:100μA 重置阈值滞后:20 mV 复位脉冲宽度:200 ms PFI输入阈值:1.25V PFI输入电流&#xff…

Linux 部署 scrapydweb

一、 创建虚拟环境,在虚拟环境下操作 1、安装scrapyd pip install scrapyd2、安装scrapyd-client pip install scrapyd-client3、安装scrapydweb pip install scrapydweb4、安装Logparser pip install Logparser二、新建一个scracyd的配置文件 sudo mkdir /etc/scr…

MySql.Data.dll 因版本问题造成报错的处理

NetCore 链接MySQL 报 Character set ‘utf8mb3‘ is not supported by .Net Framework 异常解决_character set utf8mb3_csdn_aspnet的博客-CSDN博客 查看mysql版本号,两种办法: 第一种在数据库中执行查询:SELECT version; 第二种使用工具…

数据治理和合规性:如何确保大数据应用遵守法规和标准

第一章:引言 在数字时代,大数据的应用日益普遍,对企业和组织的决策、运营和创新产生了深远的影响。然而,随着数据规模的不断增长,以及数据泄露和滥用事件的频繁发生,数据治理和合规性问题愈发突显。企业和…

推荐系统用户长序列建模

目录 一、背景 二、技术方案 2.1 DIN 简介 论文细节 优缺点 2.2 DINE 简介 论文细节 2.3 MIMN 简介 论文细节 2.4 SIM 简介 论文细节 优缺点 2.5 DSIN 简介 论文细节 一、背景 阿里巴巴的精排模型从传统lr,到深度学习,再到对用户长历…

使用云服务器可以做什么?十大使用场景举例说明

使用阿里云服务器可以做什么?阿里云百科分享使用阿里云服务器常用的十大使用场景,说是十大场景实际上用途有很多,阿里云百科分享常见的云服务器使用场景,如本地搭建ChatGPT、个人网站或博客、运维测试、学习Linux、跑Python、小程…

6年测试,不断磨炼升级打怪自动化测试,一路晋升他终于冲出月35k+

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

ViT 论文逐段精读

https://www.bilibili.com/video/BV15P4y137jb Vision Transformer 挑战了 CNN 在 CV 中绝对的统治地位。Vision Transformer 得出的结论是如果在足够多的数据上做预训练,在不依赖 CNN 的基础上,直接用自然语言上的 Transformer 也能 CV 问题解决得很好…

如何学习web前端开发?这样学前端事半功倍,能救一个是一个!

非常理解想要自学前端的伙伴,因为好程序员的学员一开始也是自学插画的,很多同学,自学到最后真的非常枯燥乏味,且走了很多弯路。小源想着能帮一把是一把的原则,这两天整理了一份前端的高效学习路线,想学web前…

接口测试常用工具及测试方法(基础篇)

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给…

Windows管理内存的3种方式——堆、虚拟内存、共享内存

一、操作系统管理内存概述 在 Windows 操作系统中,每个进程都被分配了 4GB 的虚拟地址空间,这被称为进程的虚拟地址空间。虚拟地址空间提供了一个抽象的地址空间,使得每个进程都可以认为它拥有自己的独立内存空间。这个虚拟地址空间被分为两…

720度沉浸式体验,VR虚拟展馆的价值有哪些?

展馆作为一个展示商品、会议交流、信息传播、经济贸易的场所,能够创造巨大的经济效益和社会效益。什么是VR虚拟展馆呢?VR虚拟展馆是基于VR全景技术打造的线上展厅,可以应用在多种领域中展示各式的商品和内容,观众通过VR虚拟展馆可…

ubuntu系统下使用ros控制UR真实机械臂,逻辑清晰,亲测有效

梳理一下在ubuntu系统使用ros控制UR真实机械臂的思路,逻辑清晰,亲测有效,并记录踩过的坑。从0开始,使用ros控制真实UR机械臂。 环境:ubuntu18.04 ros版本:melodic 机械臂型号:UR5e 一&#xff…

当我与单链表分手后,在酒吧邂逅了双向循环链表.....

链表的种类有8种,但我们最常用的为无头单向非循环链表和带头双向循环链表。 带头双向循环链表 当带头双向循环链表只有哨兵位头的时候,双向链表的指向如下图。 head->pre和head->next都是指向自己,这个是有巨大优势的,代码…