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制作简易播放器相关推荐

  1. 用Python制作简易播放器(电子钢琴) mac系统

    用Python制作简易播放器(电子钢琴) 开发环境:Python3.7 Mac OS 思路: 先根据需要设计GUI的样式,并思考需要定义什么功能 把功能写出来 把功能填入GUI之中 用曲子测试完整的程 ...

  2. Unity - 使用Winform制作简易登录器

    Unity - 使用Winform制作简易登录器 Resolution Dialog PC.Mac环境下,Unity提供了一个简易的设置分辨率.图形性能的对话框,叫Resolution Dialog, ...

  3. python制作音乐播放器_python实现音乐播放器 python实现花框音乐盒子

    本文实例为大家分享了python实现音乐播放器的具体代码,供大家参考,具体内容如下 """这是一个用海龟画图模块和pygame的混音模块制作的简易播放器. 作者:李兴球, ...

  4. C#简易播放器(WindowsMediaPlayer)

    本文介绍一款使用C#制作的简易播放器,播放器使用WindowsMediaPlayer控件,十分便利,不足的是目前还没有找到自动播放下一首的办法,也可以使用NAudio包制作播放器,关于NAudio的简 ...

  5. 使用AVPlayer制作一个播放器

    代码地址如下: http://www.demodashi.com/demo/11685.html AVPlayer 是一个强大的视频播放器,可以播放多种格式的视频,缺点是没有控制界面,需要自己去实现. ...

  6. ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器

    ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器 https://blog.csdn.net/King1425/article/details/71171142 我们先实 ...

  7. 制作一个播放器(二)

    制作一个播放器(一) 制作一个播放器(二) 接着上一章的热身,咱们继续写播放器.上一篇中咱们用的是句柄的方式来播放视频.实际开发中,我们更多的是把数据给回调出来,这样更好的去显示视频,处理视频.这期, ...

  8. 树莓派3B qt+mplayer制作音乐播放器(10)

    内容 树莓派3B qt+mplayer制作音乐播放器:播放.暂停.上一曲.下一曲,音量调节. 平台:树莓派+qt+mplayer 1.配置 qt安装见此: https://blog.csdn.net/ ...

  9. winform制作音乐播放器

    winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windo ...

最新文章

  1. 2020年下信息系统项目管理师合格分数线通知
  2. mysql string types ---- mysql 字符类型详解
  3. Linux驱动之分层框架
  4. Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本
  5. 如何删除itunes中的ipa安装包
  6. 未来教育考试系统无法答题,点击选项后没有反应,不会记录答题
  7. Step2:【C51】蜂鸣器发声实验
  8. 网络空间安全基础(待续)
  9. 女生最想泡的12种男生!(男生必看)
  10. python定义一个student类、有下面的_Python的类和方法——成员可见性
  11. 百度地图线路颜色_旅游厕所电子地图:让“方便”更方便
  12. 任意文件读取与下载漏洞学习
  13. 11种QQ技术 ,让你成为QQ高手
  14. 为什么国内服务器需要备案?
  15. 基于PHP美食食谱的外文翻译,中国传统菜谱的英文翻译锦集
  16. MySql 数字+汉字 排序
  17. IE下不显示自定义错误页面
  18. 信息检索——扩展词模型研究与应用论文
  19. php时间戳与日期格式比大小,比较两个时间戳的大小
  20. 明矾、白醋泡手脚可以治疗手脚多汗

热门文章

  1. java计算机毕业设计中学生作文大赛管理平台源码+mysql数据库+系统+部署+lw文档
  2. [JuliaDelphi]快速计算圆周率 Pi (π) 值
  3. Python pandas.DataFrame.tail函数方法的使用
  4. 蓝桥杯 - [2013年第四届真题]横向打印二叉树(排序二叉树)
  5. 解决 CHROME FLASH 不能自动播放的问题及加载视频前的“黑色背景”如何改变
  6. python的设计理念和应用_菜鸟爱Python第1期:Python发展史?对Python最深刻的解读...
  7. suggest的使用方法
  8. 使用craco start后运行报错
  9. WORD上次启动失败,以安全模式启动”的解决方法
  10. 不会数据驱动?还不快来看看,教你快速搭建数据驱动测试框架