AVProVideo丨Unity播放PC端和安卓端视频、以及对视频的读写方法

大家好,我是SKODE。

小提示:选中左侧目录,可快速找到所需内容

最近AVProVideo教程整理地址  传送门

 

一、VedioPlayer播放PC端本地url视频的方法

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播放安卓端视频。

二、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,采用代码方式加载视频、播放视频

AVProVideo丨Unity播放PC端和安卓端视频、以及对视频的读写方法_第1张图片

 

4、不必勾选Media Player的Adnroid和Override path,运行时,最下方的API代码会自动不仅赋给上方的sourcePath,还会赋给下图的android OverridePath。

//安卓端
 _mediaPlayer.PlatformOptionsAndroid.path = "file:///sdcard/skode/CutscenesMovie.mp4;

//PC端
_mediaPlayer.m_VideoPath = "";

AVProVideo丨Unity播放PC端和安卓端视频、以及对视频的读写方法_第2张图片

 

5、Hierarchy先新建Canvas和EventSystem,再选中Canvas右键新建UI-AVPro Video uGUI

      该UI用来播放第3步创建的视频源MediaPlayer,将MediaPlayer拖入AVPro Video即可

AVProVideo丨Unity播放PC端和安卓端视频、以及对视频的读写方法_第3张图片

 

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());

 

 

三、AVProVideo API

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();//重播
    }

}

 

 

四、对视频的读写

1、PC端

参考:文件的读写

//读取文件,返回byte[],把文件作为二进制来处理。
byte[] ccc=File.ReadAllBytes("C:\Users\Administrator\Desktop\a.mp4");
File.WriteAllBytes("path",ccc);//将byte[]全部写入到文件

 

2、安卓端

安卓端同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

你可能感兴趣的:(#,小功能,#,AvProVideo)