COS 音视频实践 | 数据工作流助你播放多清晰度视频
前言
你是否遇到过这样的场景:
兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入“转圈圈”的人生以及社会的大思考中。
又或者是身为网速畅通无阻的vip玩家,却因为视频只有低劣画质而仰天长叹,为这尊贵的网络资源无用武之地感到惋惜。
以上种种,是否是你所遇到的视频网站的各种痛点缩影?如果是,那么福音来啦!本期 COS 音视频实践,将利用对象存储(Cloud Object Storage,COS)数据处理基于数据万象 CI 提供的HLS 自适应多码率功能,助你播放多清晰度视频,从此彻底摆脱“转圈圈”和低劣画质视频的困扰:结合自身的网速情况,无缝切换视频清晰度!
一. 何为 HLS 自适应多码率
COS 数据处理自适应多码率功能可以将视频文件转码并打包生成自适应码流输出文件,它的特点是包含多个码率的音视频文件和一个描述性主索引文件(manifest),播放器能够根据当前带宽,动态选择最合适的码率播放。目前应用最广泛的自适应码流格式,是 Master Playlist 格式下的 HLS。
二. 基于 COS 数据工作流,快速完成 HLS 自适应多码率
COS 数据工作流,帮助您快速、灵活、按需搭建视频处理流程。每个工作流与输入存储桶的一个路径绑定,当视频文件上传至该路径时,该媒体工作流就会被自动触发,执行指定的处理操作,并将处理结果自动保存至输出存储桶的指定路径下。此外,若针对已存在于存储桶中的文件,您可创建任务进行媒体处理、语音识别、文档处理等操作,快速帮您完成单任务处理。
1.登录对象存储控制台进入存储桶管理页面并找到对应存储桶;
2.在左侧导航栏中,选择数据工作流 > 工作流 > 创建工作流,进入模板配置页面;

3.输入工作流名称并选择输入路径后,点击配置工作流的"+"号,选择hls自适应多码率后,点击保存;

4.在打包配置弹窗中,选择目标存储桶后点击确定。

5.可以看到默认生成了一个视频子流,点击"+"号,我们再添加两个视频子流。

6.三个视频子流对应的码率模版和相关配置分别如下:



7.点击修改打包配置,分别对三个视频子流设置对应的带宽,播放器会根据当前带宽动态选择合适的码率播放,为观看者带来良好的体验。这里我们分别设置400kps、700kps和1mps带宽。


8.工作流配置完成后,点击保存,并在工作流列表中启动该条工作流。


9.到指定的存储桶输入路径中,上传视频文件,便能看到触发了工作流,并生成了对应的文件。其中,test_ib83541dd994d11ecac1b525400030d6f.m3u8文件是主索引文件,其余的m3u8文件是具体码率的索引文件,ts是视频 HLS 视频分片。


三. 播放自适应多码率视频
利用腾讯云超级播放器,传入 COS 数据工作流生成的主索引 m3u8 文件对象地址,播放器先请求主索引 m3u8 文件,再根据文件内容请求对应码率的 m3u8 文件,并根据当前网络的带宽状态,自动切换合适的码率视频进行播放。
1.在页面中引入播放器样式文件与脚本文件
<!--播放器样式文件-->
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.min.css" rel="stylesheet"/>
<!--如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.v4.2.2.min.js 之前引入 hls.min.0.13.2m.js。-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/libs/hls.min.0.13.2m.js"></script>
<!--播放器脚本文件-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.v4.2.2.min.js"></script>
建议在正式使用播放器SDK时,自行部署以上相关静态资源,单击下载播放器资源。部署解压后的文件夹,不能调整文件夹里面的目录,避免资源互相引用异常。
2.设置播放器容器节点
在需要展示播放器的页面位置加入播放器容器。例如,在 index.html 中加入如下代码(容器 ID 以及宽高都可以自定义)。
<video id="player-container-id" width="414" height="270" preload="auto" playsinline webkit-playsinline></video>
3.初始化播放器并设置 URL
(1)获取前面 COS HLS 自适应多码率工作流成的主索引 m3u8 文件对象地址

(2)初始化播放器,并传入 m3u8 对象地址
var player = TCPlayer('player-container-id', {}); // player-container-id 为播放器容器 ID,必须与 html 中一致
player.src(https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/path/example.m3u8); // m3u8对象地址
4.效果
(1) 成功加载到主索引文件和多码率对应的m3u8文件

(2)可以根据用户当前网络带宽,自适应播放最合适的视频

(3)也可以手动切换到对应的码率进行播放

四. 体验
以上实践,我们准备了一个线上体验demo,欢迎大家体验~
1、移动端:扫码即可进行体验;

2、web 端:点击链接即可进行体验;
— END —
COS 音视频实践 | 数据工作流助你播放多清晰度视频的更多相关文章
- COS 音视频实践 | 多种姿势让你的视频“跑”起来
导语 随着4G/5G时代的到来,短视频/直播行业开始流行,音视频逐渐成为信息传播中流量占比最大的部分.腾讯云对象存储(COS)作为可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务, ...
- 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient
之前的一篇博客<网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient>,我们介绍了RTSP流的检测和分析工具EasyRTS ...
- Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 编译期插桩
抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 原创 Leo 字节跳动技术团队 2019-08-09 https://mp.weixin.qq.com/s/Drmmx5JtjG ...
- uni-app仿抖音APP短视频+直播+聊天实例|uniapp全屏滑动小视频+直播
基于uniapp+uView-ui跨端H5+小程序+APP短视频|直播项目uni-ttLive. uni-ttLive一款全新基于uni-app技术开发的仿制抖音/快手短视频直播项目.支持全屏丝滑般上 ...
- 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载
一.录制分类 在音视频会议.在线教育等系统中,录制是一个特别重要的功能 录制一般分为服务端录制和客户端录制 服务端录制:优点是不用担心客户因自身电脑问题造成录制失败(如磁盘空间不足),也不会因录制时抢 ...
- 嵌入式实时操作系统μCOS原理与实践任务控制与时间的解析
/*************************************************************************************************** ...
- Android 音视频开发(三):使用 AudioTrack 播放PCM音频
一.AudioTrack 基本使用 AudioTrack 类可以完成Android平台上音频数据的输出任务.AudioTrack有两种数据加载模式(MODE_STREAM和MODE_STATIC),对 ...
- 视频网站数据MapReduce清洗及Hive数据分析
一.需求描述 利用MapReduce清洗视频网站的原数据,用Hive统计出各种TopN常规指标: 视频观看数 Top10 视频类别热度 Top10 视频观看数 Top20 所属类别包含这 Top20 ...
随机推荐
- kubernetes之kubeadm 安装kubernetes 高可用集群
1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...
- K8S的安装部署以及基础知识
Kubernetes(K8S)概述 Kubernetes又称作k8s,是Google在2014年发布的一个开源项目. 最初Google开发了一个叫Borg的系统(现在命名为Omega),来调度近20多 ...
- C++ 子函数参数传递过程
编译环境:Visual Studio 2015 参数传递与汇编语言有很大关系.子函数传递参数主要方式有三种(这三种参数传递方式都可用用于x86汇编语言甚至其它汇编语言): 寄存器方式传递参数 存储器方 ...
- CKKS Part2: CKKS的编码和解码
该文章翻译自CKKS EXPLAINED, PART 2: FULL ENCODING AND DECODING,主要介绍CKKS方案中是如何编码和解码的(如何将复数向量转成整数多项式,以及如何求逆运 ...
- 【h5游戏开发】egret引擎p2物理引擎 - 小球碰撞地面搞笑的物理现象
重力的方向和地面的问题 p2中默认的方向是从上到下,如果重力默认是正数的话,物体放到世界中是会从上面往下面飘的 p2中plane地面默认的方向是y轴的方向,而在p2中y轴的方向默认是从上往下 首先来看 ...
- NOIP2018 Day2T2 填数游戏
下面先给出大家都用的打表大法: 首先我们可以发现 \(n \le 3\) 的情况有 \(65pts\),而 \(n\) 这么小,打一下表何乐而不为呢?于是我写了一个爆枚每个位置再 \(check\) ...
- AT2644 [ARC076C] Connected?
可以发现这个问题是存在边界的,那么我们可以先放宽一下条件思考一下没有边界的情况. 通过手玩可以发现,若不存在边界总是可以完成这个任务的. 因为两条曲线之间不存在交点,那么每次我们可以从空隙穿过一条直线 ...
- linux .h文件
转载请注明来源:https://www.cnblogs.com/hookjc/ c++ #include <sys/types.h> #include <unistd.h> ...
- Token+Redis实现接口幂等性
一.什么是 幂等性 在编程中,幂等性的特点就是其任意多次执行的效果和一次执行的效果所产生的影响是一样的. 二.Token+Redis的实现思路 1.数据提交前要向服务的申请 token(用户登录时可以 ...
- java_web开发中 遇到可坑
目前有两个坑,: 一 首先在启动tomcat的时候 我进行的一个跳转页面的操作然后报了如下的错误: org.apache.jasper.JasperException: /jsp/frame.jsp ...