您当前的位置: 首页 >  鱼儿-1226 unity

Unity Android平台 视频播放

鱼儿-1226 发布时间:2022-02-16 10:16:47 ,浏览量:8

1.Unity版本:2018.1.1f
2.AVPro版本:AVPro Video 1.9.4

一、VideoPlayer
VideoRawImage参数设置如图:

视频Texture大小设置如图:

脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;

public class VideoPlayerView : MonoBehaviour {
    private VideoPlayer videoPlayer;
    ///
    /// 是否播放中
    ///
    private bool isPlaying;
    // Use this for initialization
    void Awake ()
    {
        videoPlayer = GetComponent();
        videoPlayer.waitForFirstFrame = true;
        videoPlayer.playOnAwake = false;
    }

    private void Start()
    {
        videoPlayer.errorReceived += ErrorEventHandler;
        videoPlayer.prepareCompleted += PrepareEventHandler;

        //测试 播放
        PlayVideo(Application.streamingAssetsPath + "/AVProVideoSamples/BigBuckBunny_360p30.mp4");
    }

    ///
    /// 播放视频
    ///
    /// 视频路径
    public void PlayVideo(string url)
    {
        videoPlayer.url = url;
        videoPlayer.Play();
    }

    private void PrepareEventHandler(VideoPlayer source)
    {
        if (source == videoPlayer) 
        {
            isPlaying = true;
        }
    }

    private void ErrorEventHandler(VideoPlayer source, string message)
    {
        if(videoPlayer == source)
        {
            Debug.LogError("VideoPlayerView::ErrorEventHandler - message:" + message);
        }
    }

    private void Update()
    {
        if(isPlaying)
        {
            //判断视频是否播放完成
            if(videoPlayer.frame >= (long)videoPlayer.frameCount)
            {
                Debug.Log("VideoPlayerView::Update - 视频播放完成");
                isPlaying = false;
            }
        }
    }

    private void OnDisable()
    {
        videoPlayer.errorReceived -= ErrorEventHandler;
        videoPlayer.prepareCompleted -= PrepareEventHandler;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
二、AVPro
参数设置:

播放器API选择注意:

代码如下:
using RenderHeads.Media.AVProVideo;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 脚本如果是动态加载的话 出现的问题有点多 按照如下方法播放 可以避免:
/// 1.加载完物体立刻播放视频无法正常播放
/// 2.播放完成通知无法接收到
///
public class MediaPlayerView : MonoBehaviour {
    private MediaPlayer mediaPlayer;
    //用户操作是否播放
    private bool isPlaying;
    // Use this for initialization
    void Awake()
    {
        mediaPlayer = GetComponent();
    }

    void Start()
    {
        mediaPlayer.Events.AddListener(EventHandler);
        //测试 播放
        PlayVideo(Application.streamingAssetsPath + "/AVProVideoSamples/BigBuckBunny_360p30.mp4");
    }

    private void Update()
    {
        //没有调用播放
        if (!isPlaying) return;
        if (mediaPlayer == null) return;
        //播放器没有加载完成导致Control为空 返回
        if (mediaPlayer.Control == null) return;
        //播放中
        if (mediaPlayer.Control.IsPlaying())
        {
            //视频缓冲
            if (mediaPlayer.Control.IsBuffering())
            {
                //todo 缓冲 显示加载UI等
            }
            else
            {
            }
        }
        //没有播放中
        else
        {

        }
        //暂停
        if (mediaPlayer.Control.IsPaused())
        {
            //todo 
        }
        //播放完成
        if (mediaPlayer.Control.IsFinished())
        {

        }
        else
        {
        }
    }

    ///
    /// 播放器事件处理
    ///
    ///
    ///
    ///
    private void EventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
    {
        //测试事件有的时候 第一帧准备完成无法调用到 还有播放结束消息
        //arg1==MediaPlayerEvent.EventType.FinishedPlaying
        //arg1 == MediaPlayerEvent.EventType.FirstFrameReady
    }

    public void PlayVideo(string url)
    {
        StartCoroutine(WaitPlayVideo(url));
    }

    IEnumerator WaitPlayVideo(string url)
    {
        //播放器加载的过程中 可能还没有赋值
        while (mediaPlayer == null || mediaPlayer.Control == null)
        {
            yield return new WaitForEndOfFrame();
        }
        mediaPlayer.CloseVideo();
        mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.AbsolutePathOrURL, url);
        isPlaying = true;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
三、总结
VideoPlayer在真机上播放重复加载物体调用播放,丢帧的概率比MediaPlayer大,不稳定因素比较多。
MediaPlayer在退出应用重新返回应用时出现有声音无画面的异常。无法解决的bug,暂时处理为重新退出应用时关闭视频播放器,再次返回应用时可以重新调用视频播放逻辑。
————————————————
版权声明:本文为CSDN博主「随遇而安的生活」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_25682007/article/details/78822227

关注
打赏
查看更多评论

鱼儿-1226

暂无认证

  • 8浏览

    0关注

    855博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录