unity制作简易播放器
unity制作简易播放器
先上效果图
我采用的解决方案是unity内置的video player,通过UGUI-rawimage进行显示,当然也可以使用quad方式,会更简单点。
1.界面搭建
首先需要在Texture文件夹*(方便管理)*中右键-新建 RenderTexture
然后新建一个rawimage,添加video player组件,添加Audio source组件
将新建的RenderTexture赋值给video player-target texture(这一步非常重要,否则不显示画面)和rawimage的texture(也可以通过代码添加)
将source设置为url,audio outputmode设置为Audio source(此处是为了解析视频中的声音,并赋给Audio source,否则播放的视频无声)
UI搭建基本完成,然后就是控制播放了
2.时间显示
// 当前视频的总时间值和当前播放时间值的参数
private int currentHour;
private int currentMinute;
private int currentSecond;
private int clipHour;
private int clipMinute;
private int clipSecond;//总时间显示
clipHour = (int)videoPlayer.clip.length / 3600;
clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60;
clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60);
longTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2}", clipHour, clipMinute, clipSecond);/// <summary>
/// 视频时间显示,每帧调用
/// </summary>
void TimeShow()
{
// 当前的视频播放时间,
currentHour = (int)videoPlayer.time / 3600;
currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
nowTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2}", currentHour, currentMinute, currentSecond);
}
3.播放暂停控制
初始设置,playOnAwak设置为false,并检测视频准备情况
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
videoPlayer.Prepare();
videoPlayer.Play();
这个简单加个bool值判断,调用默认播放和暂停函数就OK了,音频是视频解析出来的,所以控制了视频也就控制了音频。
videoPlayer.Play();
videoPlayer.Pause();
4.音量控制
音量控制就是修改Audio source的value了,通过slider滑动条控制,
sliderAudio.value = audioSource.volume;
sliderAudio.gameObject.SetActive(false);
sliderAudio.onValueChanged.AddListener((float value) => SliderChanger(value));void SliderChanger(float value)
{
audioSource.volume = value;
}
5.进度条控制及拖拽
视频进度控制有两种形式:一种是按帧控制,一种按时间控制,两种都可以,做好换算就行了
sliderVideo.onValueChanged.AddListener((float value) => SliderEvent(value));
按帧控制
void Update()
{if (videoPlayer.time % 1 == 0)//为了防止卡顿
{
int a = (int)videoPlayer.frame;
int b = (int)videoPlayer.frameCount;
sliderVideo.value =(float ) a / b;
TimeShow();//已播放时间
}
}
public void SliderEvent(float value)
{videoPlayer.frame = long.Parse((value * videoPlayer.frameCount).ToString("0."));TimeShow(); //更新时间videoPlayer.targetTexture.Release();//清理无效纹理
}
按时间控制
sliderVideo.value=videoPlayer.time/videoPlayer.clip.length;videoPlayer.time = value * videoPlayer.clip.length;
6.url相关控制
使用url可以播放本地视频(绝对地址),也可以播放网络视频
string url = Application.dataPath + "/StreamingAssets/***.mp4";if (Directory.Exists(url))
{//此处是为验证地址的准确性,地址无效则播放预备视频
videoPlayer.url = url;
}
else
{
videoPlayer.clip = videoClip;
}
好了基本就这样,记录一下
/// <summary>
/// 视频播放控制
/// </summary>
public class VideoPlayerControl : MonoBehaviour
{
public Button buttonPlay, buttonSuspend, buttonAudio, buttonQuit;
public Slider sliderVideo, sliderAudio;
public Text nowTimeText, longTimeText;
public VideoPlayer videoPlayer;
public AudioSource audioSource; bool isPlay, isAudio;
public VideoClip videoClip;//当url出错时,播放此视频// 当前视频的总时间值和当前播放时间值的参数private int currentHour;
private int currentMinute;
private int currentSecond;
private int clipHour;
private int clipMinute;
private int clipSecond;
void Start()
{string url = Application.dataPath + "/StreamingAssets/1.mp4";if (Directory.Exists(url))
{//此处是为验证地址的准确性,地址无效则播放预备视频
videoPlayer.url = url;
}
else
{
videoPlayer.clip = videoClip;
}clipHour = (int)videoPlayer.clip.length / 3600;
clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60;
clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60);
longTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2}", clipHour, clipMinute, clipSecond);buttonAudio.onClick.AddListener(AudioControl);
sliderAudio.value = audioSource.volume;
sliderAudio.gameObject.SetActive(false);
sliderAudio.onValueChanged.AddListener((float value) => SliderChanger(value));
buttonQuit.onClick.AddListener(UIClose);
}private void OnEnable()
{//videoPlayer.playOnAwake = false;
//audioSource.playOnAwake = false;videoPlayer.Prepare();
videoPlayer.Play();
isPlay = true;
sliderVideo.onValueChanged.AddListener((float value) => SliderEvent(value));
buttonPlay.onClick.AddListener(VideoPlay);
buttonSuspend.onClick.AddListener(VideoPlay);
}void Update()
{if (videoPlayer.time % 1 == 0)//为了防止卡顿
{
int a = (int)videoPlayer.frame;
int b = (int)videoPlayer.frameCount;
sliderVideo.value =(float ) a / b;
TimeShow();//已播放时间
}}
void VideoPlay()
{
isPlay = !isPlay;
if (isPlay)
{
videoPlayer.Play();
buttonSuspend.gameObject.SetActive(false);
buttonPlay.gameObject.SetActive(true);}
else
{
videoPlayer.Pause();
buttonSuspend.gameObject.SetActive(true);
buttonPlay.gameObject.SetActive(false);
}
}
void AudioControl()
{
isAudio = !isAudio;
sliderAudio.gameObject.SetActive(isAudio);
}
void SliderChanger(float value)
{
audioSource.volume = value;
}
/// <summary>
/// 关闭
/// </summary>
void UIClose()
{
gameObject.SetActive(false);
}
public void SliderEvent(float value)
{
StartCoroutine(ChangerValue(value));
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
IEnumerator ChangerValue(float value)
{videoPlayer.frame = long.Parse((value * videoPlayer.frameCount).ToString("0."));TimeShow();//更新时间
yield return new WaitForSeconds(0.1f);
videoPlayer.targetTexture.Release();//清理无效纹理
}
/// <summary>
/// 视频时间显示
/// </summary>
void TimeShow()
{
// 当前的视频播放时间
currentHour = (int)videoPlayer.time / 3600;
currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
nowTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2}", currentHour, currentMinute, currentSecond);
}
}
unity制作简易播放器相关推荐
- 用Python制作简易播放器(电子钢琴) mac系统
用Python制作简易播放器(电子钢琴) 开发环境:Python3.7 Mac OS 思路: 先根据需要设计GUI的样式,并思考需要定义什么功能 把功能写出来 把功能填入GUI之中 用曲子测试完整的程 ...
- Unity - 使用Winform制作简易登录器
Unity - 使用Winform制作简易登录器 Resolution Dialog PC.Mac环境下,Unity提供了一个简易的设置分辨率.图形性能的对话框,叫Resolution Dialog, ...
- python制作音乐播放器_python实现音乐播放器 python实现花框音乐盒子
本文实例为大家分享了python实现音乐播放器的具体代码,供大家参考,具体内容如下 """这是一个用海龟画图模块和pygame的混音模块制作的简易播放器. 作者:李兴球, ...
- C#简易播放器(WindowsMediaPlayer)
本文介绍一款使用C#制作的简易播放器,播放器使用WindowsMediaPlayer控件,十分便利,不足的是目前还没有找到自动播放下一首的办法,也可以使用NAudio包制作播放器,关于NAudio的简 ...
- 使用AVPlayer制作一个播放器
代码地址如下: http://www.demodashi.com/demo/11685.html AVPlayer 是一个强大的视频播放器,可以播放多种格式的视频,缺点是没有控制界面,需要自己去实现. ...
- ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器 https://blog.csdn.net/King1425/article/details/71171142 我们先实 ...
- 制作一个播放器(二)
制作一个播放器(一) 制作一个播放器(二) 接着上一章的热身,咱们继续写播放器.上一篇中咱们用的是句柄的方式来播放视频.实际开发中,我们更多的是把数据给回调出来,这样更好的去显示视频,处理视频.这期, ...
- 树莓派3B qt+mplayer制作音乐播放器(10)
内容 树莓派3B qt+mplayer制作音乐播放器:播放.暂停.上一曲.下一曲,音量调节. 平台:树莓派+qt+mplayer 1.配置 qt安装见此: https://blog.csdn.net/ ...
- winform制作音乐播放器
winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windo ...
最新文章
- 2020年下信息系统项目管理师合格分数线通知
- mysql string types ---- mysql 字符类型详解
- Linux驱动之分层框架
- Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本
- 如何删除itunes中的ipa安装包
- 未来教育考试系统无法答题,点击选项后没有反应,不会记录答题
- Step2:【C51】蜂鸣器发声实验
- 网络空间安全基础(待续)
- 女生最想泡的12种男生!(男生必看)
- python定义一个student类、有下面的_Python的类和方法——成员可见性
- 百度地图线路颜色_旅游厕所电子地图:让“方便”更方便
- 任意文件读取与下载漏洞学习
- 11种QQ技术 ,让你成为QQ高手
- 为什么国内服务器需要备案?
- 基于PHP美食食谱的外文翻译,中国传统菜谱的英文翻译锦集
- MySql 数字+汉字 排序
- IE下不显示自定义错误页面
- 信息检索——扩展词模型研究与应用论文
- php时间戳与日期格式比大小,比较两个时间戳的大小
- 明矾、白醋泡手脚可以治疗手脚多汗
热门文章
- java计算机毕业设计中学生作文大赛管理平台源码+mysql数据库+系统+部署+lw文档
- [JuliaDelphi]快速计算圆周率 Pi (π) 值
- Python pandas.DataFrame.tail函数方法的使用
- 蓝桥杯 - [2013年第四届真题]横向打印二叉树(排序二叉树)
- 解决 CHROME FLASH 不能自动播放的问题及加载视频前的“黑色背景”如何改变
- python的设计理念和应用_菜鸟爱Python第1期:Python发展史?对Python最深刻的解读...
- suggest的使用方法
- 使用craco start后运行报错
- WORD上次启动失败,以安全模式启动”的解决方法
- 不会数据驱动?还不快来看看,教你快速搭建数据驱动测试框架