七牛 Web 播放器 SDK 是七牛官方推出的用于开发网页播放器的软件开发工具包,为 Web 开发者提供简单、快捷的接口,帮助开发者在 Web 平台上快速开发播放器应用。

该文档面向考虑使用七牛 Web 播放器 SDK 进行开发并具备 JavaScript 语言基础的开发人员。

示例

引入

创建一个播放器

只要指定资源的播放地址和页面上的一个元素,SDK 就会自动在这个元素下面创建相应的播放器组件,目前支持的资源格式是 mp4、webm 和 m3u8。

const player = new QPlayer({

url: "http://xxx.xxxx.xxx.m3u8",

container: document.getElementById("xxx"),

});

其中构造参数的配置见下

QPlayerConfig {

url: string; // 视频源,目前支持 mp4、webm 和 m3u8

container: HTMLElement | HTMLVideoElement; // 一个 HTML 元素作为播放器的容器,播放器默认使用容器的宽高,也支持直接传入 video 元素

autoplay?: boolean; // 是否自动播放

muted?: boolean; // 是否静音

poster?: string; // 封面图片

hls?: {

DRMKey?: Uint8Array; // 七牛 HLS DRM 加密密钥

isG711?: boolean; // 是否是 G.711 编码的音频

};

mp4?: {

DRMCompanyKey?: Uint8Array; // 七牛 MP4 DRM 的 CompanyKey

};

isLive?: boolean; // 是否是直播流, 这个开启后播放器将不会渲染进度条和时间

loggerLevel?: number; // log 等级,0 info,1 debug, 2 只看错误,3 关闭 log,默认为 1

}

自动播放的注意事项

目前主流浏览器(Firefox/Chrome/Safari)都有各种规则禁止页面在没有用户交互前提下自动播放有声的媒体资源,所以即使这里设置了自动播放,也不能保证 100% 自动播放成功。

关于自动播放的细节可以参考这篇 Chrome 的对外声明 https://developers.google.com/web/updates/2017/09/autoplay-policy-changes

这里我们简单讨论一下如果您的页面非常依赖自动播放该如何应对这个策略。首先我们从刚刚的那句话中提炼出几个关键词,即 “没有用户交互”、“自动播放“ 和 ”有声媒体“,这里的逻辑关系是这样的 —— ”如果没有用户交互” 并且 “媒体是有声的” 那么 “无法自动播放“,这个是板上钉钉的规则写进浏览器层改不了的。既然规则改不了,我们只能利用规则来实现我们需求。

很简单,从规则来看自动播放失败需要 2 个条件,只要其中一个条件不满足,自动播放就可以完成。

首先第一个 ”没有用户交互“,显然我们只要在用户有交互动作之后再创建播放器或者再调用播放器的 play 方法就可以绕过这个限制了。那么什么是用户交互呢?就是我们通常所说的 “点击”/“触摸” 等操作,所以我们可以设计一个按钮/提示框,待用户有点击操作了之后再播放我们的媒体源就可以了。

那么第二个 “有声媒体”,也就是说,只要我们以 静音模式 创建播放器,就不会被自动播放策略所限制。如果您想综合这两者,那我们就当用户第一次进入页面时先静音自动播放,然后提供一个取消静音的按钮或者提示框之类的方案,待用户点击了什么东西之后再取消静音即可,这也是推特/脸书等大厂们采用的方案。

当用户在一个页面上手动播放次数超过一定次数后,Chrome 就会为这个页面接触自动播放限制。不过注意,这个自动播放限制的解除是本地白名单维护的。

播放器对象成员

player.currentTime

当前播放的时间,单位是秒

player.totalTime

视频总时长,在 ready 事件触发前这个值都是 0,单位是秒

player.isPlay

当前是否在播放状态

player.isPause

当前是否在暂停状态

player.isEnded

当前是否在结束状态

player.isMuted

当前是静音状态

player.volume

当前的音量,范围 0-1

player.isLoop

当前是否开启了循环播放

播放器对象方法

player.play()

播放视频源

player.pause()

暂停视频源

player.seek(time)

跳转到指定的时间点 time,time 的单位是秒

player.toggleFullscreen()

切换到全屏/非全屏模式

player.toggleMute()

切换静音状态

player.toggleLoop()

切换循环播放状态

player.setVolume(value)

设置音量, value 需要在 0 - 1 之间

player.setPlaybackRate(rate)

倍速播放,rate 为指定的倍率,需要 > 0

player.destroy()

释放当前播放器

播放器事件

SDK 基于 events 库实现了事件模型,通过以下方法注册绑定事件

// 注册 ready 的监听函数

player.on("ready", handleReady);

// 注册 ready 的监听函数,但是只会触发一次

player.once("ready", handleReady);

// 移除 ready 特定的监听函数

player.off("ready", handleReady);

// 移除 ready 的所有监听函数

myRoom.removeAllListeners("ready");

事件名称

事件介绍

事件参数

参数说明

ready

播放器准备完毕,可以播放

()

fullscreenchange

全屏状态改变

(isFullScreen: boolean)

是否全屏

error

播放过程中出现错误

(e)

错误对象,包含了错误代码

play

播放器开始播放

()

pause

播放器暂停

()

ended

播放结束

()

timeupdate

播放时间更新

(currentTime: number, totalTime: number)

分别为当前播放时间和总时间

durationchange

总播放时间更新

(totalTime: number)

总时间

loading

正在加载

()

seeked

播放器跳转完成

()

volumechange

播放器音量改或者 mute 状态改变

(volume: number, isMuted: boolean)

分别是当前音量和是否静音

错误代码

ErrorCode

描述

10000

浏览器不支持此视频源

10001

无法解析视频源的类型

10002

无法加载视频源

10003

浏览器不支持全屏功能

10006

视频播放失败

10007

配置参数格式非法

10008

unexpected error

10009

HLS engine错误

多码率媒体资源

多码率 HLS

SDK 支持多码率的 m3u8 文件,同时会根据 m3u8 文件上的分辨率、码率字段来生成对应码率媒体源在 UI 上的名称。您也可以手动传入每个码率的名称给到 SDK

const player = new QPlayer({

url: "http://7xlv47.com1.z0.glb.clouddn.com/xxx004.m3u8",

autoplay: true,

hls: {

qualityName: ["低清", "标清", "高清", "超清"],

},

});

多码率 MP4

SDK 允许用户同时传入不同码率的资源文件地址,然后在视图上手动切换码率。

const player = new QPlayer({

qualityList: [{

url: "http://pkeamo5ex.bkt.clouddn.com/snow_miku_qualities/starnight_snow_240p.mp4",

name: "低清240P",

}, {

url: "http://pkeamo5ex.bkt.clouddn.com/snow_miku_qualities/starnight_snow_480p.mp4",

name: "标清480P",

}, {

url: "http://pkeamo5ex.bkS.clouddn.com/snow_miku_qualities/starnight_snow_720p.mp4",

name: "高清720P",

}, {

url: "http://pkeamo5ex.bkt.clouddn.com/snow_miku_qualities/starnight_snow_1080p.mp4",

name: "超清1080P",

}],

});

自定义视图

SDK 的默认视图提供了一些配置选项用于给用户自定义视图,通过在创建播放器的参数中指定,例如下面的代码自定义了播放器的开始播放按钮

const player = new QPlayer({

url: "xxxx",

container: xxxx,

defaultViewConfig: {

playIcon: "https://xxx.xxx.xxx/play.png",

},

})

完整的 defaultViewConfig 见下:

DefaultViewConfig {

playIcon: string, // 播放按钮

pauseIcon: string, // 暂停按钮

fullscreenIcon: string, // 全屏按钮

fullscreenExitIcon: string, // 退出全屏按钮

volumeIcon: string, // 音量按钮

volumeOffIcon: string, // 静音按钮

settingsIcon: string, // 设置按钮

backIcon: string, // 返回按钮

closeIcon: string, // 关闭按钮

inactiveTimeout: number, // 控件隐藏的延迟

noControls: boolean, // 是否不渲染控件

showControls: boolean, // 是否一直显示控件

playerBarBackground: string, // 进度条背景 CSS

playerBarPlayedBackground: string, // 已播放进度条背景 CSS

playerBarBufferedBackground: string,// 已缓存进度条背景 CSS

}

播放 G.711 音频格式的 HLS

为了使浏览器可以播放 G.711 音频格式的 HLS 资源,SDK 需要额外加载一个外部依赖库。开发者在使用这个功能时,必须先将这个外部依赖库的地址传入到 SDK 之中。

请不要直接使用这个地址传入 SDK,我们不保证这个地址长期有效,推荐您将这个依赖库下载后存放在自己网站的存储空间中。

const player = new QPlayer({

url: "xxxxx",

hls: {

// 指明该资源为 G711 HLS

isG711: true,

},

// G711 外部依赖库的地址

g711Wasm: "http://sdk-release.qnsdk.com/aac_wasm.wasm",

});

云点播web端上传_Web 播放端 SDK相关推荐

  1. 阿里云点播录制,上传,播放使用说明及遇到的坑

    项目开发中使用阿里云的点播功能,从中遇到了一堆坑,特写此笔记.希望对使用阿里云点播的伙伴们有所帮助. 一.讲解录制功能 首先赋上阿里云的官方录制文档 https://help.aliyun.com/d ...

  2. 云演-Web文件上传-writeup

    getshell 看到这个猜到是文件包含型文件上传题了,后续操作确实也是这样,上传一个图片马,包含一下getshell,不过<?和?>被过滤了 改成 <script language ...

  3. php腾讯云+视频上传失败,腾讯云视频上传和播放尝试总结

    项目中需要用到腾讯云视频,做了一个完整的流程尝试,总结一下. 基本需求是通过后台管理页面上传视频,然后通过网页,Android和iOS播放视频. 腾讯视频分三大部分:视频上传,视频处理,视频播放,相应 ...

  4. 阿里云点播 web 播放器

    浅谈 最近遇到很多人使用阿里云点播 web 播放器,通过 STS 令牌的方式去播放 MTS 转码完成后的资源出现问题,"路见不平一声吼,写个过程先献丑",只是做了最基础的功能,看官 ...

  5. springboot阿里云视频点播服务实现上传视频和删除功能

    视频播放参照地址:https://www.cnblogs.com/konglxblog/p/15116534.html 一.开通视频点播云平台 1.选择视频点播服务(收费) 阿里云地址:https:/ ...

  6. STM32接入阿里云(FreeRTOS)-实现数据上传和命令下发

    功能介绍: 将传感器采集的数据上传到阿里云,同时可以下发控制板上的LED灯(PC13) 前期准备: 1.首先你得有一个阿里云的账号,没有的话就注册一个 2.在物联网平台创建产品和设备 主要硬件准备: ...

  7. Web文件上传方法总结大全

    文件上传在WEB开发中应用很广泛,我们经常发微博.发微信朋友圈都用到了图片上传功能. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 今天我给大家聊聊常见的文 ...

  8. 上传文件到云服务器存储路径,上传文件到云服务器存储路径

    上传文件到云服务器存储路径 内容精选 换一换 云容器引擎需要与其他云服务协同工作,云容器引擎需要获取如下云服务资源的权限. 一个存储库只可以绑定一个备份策略.一个存储库只可以绑定一个复制策略.一个存储 ...

  9. 向web服务器传文件,c++实现向web服务器上传文件

    [实例简介] vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件 [实例截图] [核心代码] c向web服务器上传文件 └── c++ 向web服务 ...

最新文章

  1. mybatis mysql 存储过程_Mysql 存储过程+Mybatis调用实现插入操作例子 | 学步园
  2. python学习软件-python软件学习从入门到精通
  3. 成功解决graphviz\backend.py, line 162, in pipe raise ExecutableNotFound(args) graphviz.backend.Executab
  4. 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
  5. java 字符串 数组互转
  6. c# xml文件新增同级节点_[C#.NET 拾遗补漏]08:强大的LINQ
  7. 常见问题及解决方案(前端篇)
  8. 魔百盒哪款型号配置高_松下负离子吹风机怎么样哪款好?推荐型号?2020年9月松下负离子电吹风选购攻略...
  9. 下拉选择_在管理Excel中实现联动下拉选择
  10. 艾拉物联CEO :物联网时代的到来让安全问题显得尤为突出
  11. Json的反序列化 .net Newtonsoft.Json
  12. drawforeground只有鼠标事件进入才刷新_罗技各系鼠标测评(2020年12月更新)
  13. 解决spring mybatis 整合后mapper接口注入失败
  14. VB.NET小程序:改变图片大小
  15. IP问问:高精度IP定位|IP查询工具内测(街道级别)
  16. 最简单的python爬虫案例,适合入门学习
  17. 未能加载程序集oracle.dataaccess 控制台,未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序...
  18. 宫崎骏最新动画——哈尔的移动城堡
  19. 虚拟机网卡(NAT模式)设置连接外网
  20. JQuery修改对象的属性值

热门文章

  1. 计算机硬盘扇区1在哪里,硬盘的第一个扇区(0道0头1扇区)
  2. ggplot柱状图geo 柱状图 geo分组柱状图带显著性分组柱状图加显著性 duqiang GSE32537 ipf 加p值 自建函数
  3. AI笔记: 关于回归、线性回归、预测残差、残差平方和
  4. Adobe Scout 使用参考说明
  5. (OK) 华为全网通 honor 5x - 成功 刷入 cm-13.0-20161223-NIGHTLY-kiwi.zip - OK - 成功
  6. java 输出赌赢unicod_JAVA基础整理-90.Java输入/输出(I/O)流
  7. RecyclerView中ViewHolder重用机制理解,解决网络图片错乱和闪烁问题
  8. 一元线性回归分析的残差诊断
  9. netflix会员和非会员的区别_Netflix会员低价购买方法
  10. Python十进制和十六进制相互转换