大家好,我是SKODE。
小提示:选中左侧目录,可快速找到所需内容
最近AVProVideo教程整理地址 传送门
Unity利用VedioPlayer播放本地url视频的方法:
Unity PC环境:Browse路径是file://C:/1550822053946.mp4 X 这是错的!运行后Unity直接崩溃
改成C:/1550822053946.mp4
当然,也可通过代码给该VedioPlayer的视频路径赋值,代码如下:
videoController[2].GetComponent().url = "C:/1550822053946.mp4";
videoController[2].GetComponent().Play();
Unity安卓环境播放路径file://C:/1550822053946.mp4是可以播放的,但我们最终发布为PC环境,当然要按PC的来做了。
效果展示:
2019.11.26更新:
AB包的视频资源,在PC上可以加载,但在安卓上不行。
查了资料,发现Unity就是不支持安卓AB包中的视频。大家在做安卓播放视频的项目时,要注意一下。安卓视频不能打AB包。
在搜了一天资料后,终于放弃用VedioPlayer播放安卓端自定义文件夹下的指定视频。
改为用AVProVideo SDK播放安卓端视频。
注意:与ShareREC同时使用时,不要勾选Multithreaded Rendering,否则会在执行到结束录屏的函数时,应用崩溃
目的:播放安卓端自定义文件夹下的某一个视频。比如:/sdcard/skode/001.mp4
播放的并不是Application.streamingAssetsPath和Application.persistentDataPath等那些指定文件夹视频
1、导入SDK
2、File-Build Settings-Other Settings:
a、勾选Multithreaded Rendering
b、Write Permission:Extend(SDCard)
3、Hierarchy:右键新建AVPro Video-Media Player
这个物体上的组件用来配置视频路径及循环播放等其他属性
注意:
1)、填入的路径并不是外部存储路径:/storage/emulated/0/Android/data/com.Skode.Capture/files/sdcard/skode/1.mp4
外部存储路径可通过Application.persistentDataPath(这个函数获得前半段)+/sdcard/skode/1.mp4获得。
android的一些路径解释、android获取各种系统路径的方法
而是file:///sdcard/skode/1.mp4这种格式
2)、该地方是3个斜杠///,为/sdcard目录
3)、取消Auto Open、Auto Play,采用代码方式加载视频、播放视频
4、不必勾选Media Player的Adnroid和Override path,运行时,最下方的API代码会自动不仅赋给上方的sourcePath,还会赋给下图的android OverridePath。
//安卓端
_mediaPlayer.PlatformOptionsAndroid.path = "file:///sdcard/skode/CutscenesMovie.mp4;
//PC端
_mediaPlayer.m_VideoPath = "";
5、Hierarchy先新建Canvas和EventSystem,再选中Canvas右键新建UI-AVPro Video uGUI
该UI用来播放第3步创建的视频源MediaPlayer,将MediaPlayer拖入AVPro Video即可
6、AVPro Video是类似Unity RawImage播放视频的物体,运行后调整它的位置和大小即可。
7、如果现在勾选了Auto Open、Auto Play,完成这四步发布到手机上,运行即可看到播放视频。使用API控制播放的代码附在下方。
2019.11.02补充:
获取视频时间:
如果代码赋值地址播放,紧接着就获取视频长度,那么前几帧可能获取到的时长就为0。因此写成协程,等一下会得到正确的时长。单位:毫秒
while (mediaPlayer.Info.GetDurationMs() == 0) yield return null; print(mediaPlayer.Info.GetDurationMs());
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RenderHeads.Media.AVProVideo;
public class Skode_AVPro : MonoBehaviour
{
public static Skode_AVPro instance;
private void Awake()
{
instance = this;
}
//挂载上mediaPlayer
public MediaPlayer _mediaPlayer;
///
/// 控制视频播放。视频地址;是否播放。播放时vedioURL必填
///
///
///
public void Skode_VedioController(string vedioURL, bool value)
{
if (vedioURL != null&&value)
{
//安卓端播放:
_mediaPlayer.PlatformOptionsAndroid.path = vedioURL;
_mediaPlayer.OpenVideoFromFile(
MediaPlayer.FileLocation.AbsolutePathOrURL,
_mediaPlayer.PlatformOptionsAndroid.path,
false);//加载视频
_mediaPlayer.Control.Play();//播放视频
}
else if (!value)
{
_mediaPlayer.Control.Pause();//暂停视频
}
//PC端播放:
_mediaPlayer.m_VideoPath = vedioURL;
_mediaPlayer.OpenVideoFromFile(
MediaPlayer.FileLocation.AbsolutePathOrURL,
视频路径,
是否自动播放);//加载视频
_mediaPlayer.Control.Play();//播放视频
_mediaPlayer.Control.MuteAudio(是否静音);//是否静音
_mediaPlayer.Control.Seek(进度);//进度条
_mediaPlayer.Control.SetVolume(音量大小);//设置音量
_mediaPlayer.Control.Rewind();//重播
}
}
参考:文件的读写
//读取文件,返回byte[],把文件作为二进制来处理。
byte[] ccc=File.ReadAllBytes("C:\Users\Administrator\Desktop\a.mp4");
File.WriteAllBytes("path",ccc);//将byte[]全部写入到文件
安卓端同PC端类似,不过地址要变一下,是以/sdcard开头
byte[] ccc = File.ReadAllBytes("/sdcard/Skode/a.mp4");
byte[] ccc = File.ReadAllBytes("file:///sdcard/skode/1.mp4");//这两个路径都可
File.WriteAllBytes("/sdcard/Skode/hi/b.mp4", ccc);
一起进步
我是SKODE