Unity引擎播放HLS自适应码率流媒体视频

大家好,我是阿赵。今天来学习一下Unity引擎怎样播放自适应码率视频的方法。

一、 HLS是什么

HLS是什么,各位可以自己百度一下。简单的概括,HLS是一种自适应码率流媒体传输协议,实现的是分片下载和动态码率切换。

它的原理是把一段视频切分开很多段,然后分段加载,如果遇到网速不好或者其他适应性问题,可以动态的切换到不同的码率去播放。

二、 视频怎样转换HLS

如果需要本地把mp4之类的文件转换成HLS协议播放,需要用到ffmpeg。

可以去官网下载:https://ffmpeg.org/

下载的时候,比如是Windows系统,可以选择下面的Windows,然后选择一个别人build好的exe版本:

当下载完成之后,解压缩,会是这样:

其中bin文件夹里面会有exe可执行文件:

接下来使用ffmpeg来转换视频试试:

比如我拿了一个这样的mp4文件:

然后用cmd控制台找到ffmpeg.exe存放的路径,然后:

bash 复制代码
ffmpeg.exe -i d:/video/orig/Cones.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls d:/video/hls/Cones.m3u8

这个命令的意思是,我的原始mp4文件放在d:/video/orig/Cones.mp4,然后想要转换后的文件放在d:/video/hls/Cones.m3u8,然后是打算把视频切片成10秒一段。

转换后的文件是这样的,包括一个m3u8文件,然后还有一个或者多个ts文件。

这里只有一个ts文件,是因为我选择的这个mp4文件本身就比较短,不到10秒,所以只能剪出一段。于是我改一下,改成3秒一段:

bash 复制代码
ffmpeg.exe -i d:/video/orig/Cones.mp4 -codec: copy -start_number 0 -hls_time 3 -hls_list_size 0 -f hls d:/video/hls/Cones.m3u8

这时候就剪出3个ts文件了:

打开m3u8文件看看:

里面只是几率了这个视频的一些情况和ts文件的分布。

所以实际播放的视频是在ts文件里面的。

三、 Unity引擎怎样播放HLS

Unity自带的VideoPlayer用于播放mp4视频是非常好用的,我们可以试试它是否能播放HLS的m3u8文件:

很可惜,VideoPlayer是不能播放m3u8文件的:

于是这里要用到一个视频播放插件,叫做AVPro Video:

具体的AVPro用法不是这次的重点,所以请自行下载和查询。

设置一下AVPro的MediaPlayer,MediaSource设置成Path,然后类型改成Absolute PathOrUrl,把刚才不能播放的m3u8文件填入MediaPlayer里面:

可以看到,这次在Unity引擎里面已经顺利的播放出HLS协议的m3u8文件了:

四、 WebGL怎样播放HLS

下面试试把Unity项目导出成WebGL还保持播放视频。先把刚才的项目试试导出WebGL:

由于WebGL的特殊性,所以在MediaPlayer上面要选择一下平台特性,找到WebGL,设置External Library为Hls js。

这里的意思是,需要通过Hls Js文件来播放WebGL下的视频。

这里主要需要hls.min.js

可以去这里下载:https://gitee.com/mirrors/hls-js/

下载下来之后会找到它:

这时候用Unity打包WebGL,打包完是这样的:

然后打开TemplateData文件夹,把hls.min.js文件放到里面:

再用编辑器打开Index.html:

在head标签里面加上一句调用:

bash 复制代码
<script src="TemplateData/hls.min.js"></script>

由于WebGL是不能直接在本地播放的,所以把刚才生成的文件全部放到服务器去,比如本地搭一个阿帕奇服务器,这时候可以通过ip地址去访问刚才的index.html。这个时候,网页打开了,会看到视频并没有播放,而是停留在了第一帧:

这里有个WebGL本身的问题,就是视频和音频不能自己播放,要在用户操作后才能播放。为了测试,我简单的加了个播放按钮,点击之后,视频就正常开始播放了:

相关推荐
飞浪纪元[FWC–FE]5 小时前
【无标题】
unity·游戏引擎
红黑色的圣西罗7 小时前
对象池简述
unity·c#
水龙吟啸8 小时前
基于Orbbec-Gemini深度相机与SFM-2D to 3D重建算法、手部识别视觉算法、Unity运动控制的3D水果切割游戏
python·深度学习·神经网络·c#·游戏引擎·3d视觉·3d重建
迈火11 小时前
ComfyUI - ELLA:解锁ComfyUI图像生成新境界的神奇插件
人工智能·gpt·stable diffusion·aigc·音视频·midjourney·llama
行业探路者12 小时前
如何利用二维码提升标牌标识实用性和用户体验?
学习·音视频·语音识别·二维码·设备巡检
淡海水15 小时前
【节点】[Texture2DAsset节点]原理解析与实际应用
unity·游戏引擎·shadergraph·图形·texture2dasset
向宇it15 小时前
【unity游戏开发——网络】unity+PurrNet联机实战,实现一个多人对战类《CS/CSGO》《CF/穿越火线》《PUBG/吃鸡》的FPS射击游戏
游戏·unity·游戏引擎·交互·联机
旧梦吟15 小时前
脚本网页 双子星棋
算法·flask·游戏引擎·css3·html5
wdfk_prog15 小时前
PotPlayer采集卡选麦克风会导致黑屏及音频修复方案
stm32·单片机·音视频
Android系统攻城狮15 小时前
XUbuntu22.04之视频编辑利器:kdenlive剪切视频片段+自动转码输出(二百八十七)
ai·音视频·视频转码·视频编辑·xubuntu22.04