您当前的位置: 首页 >  unity

鱼儿-1226

暂无认证

  • 0浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity Android平台 视频播放

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

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

关注
打赏
1604459285
查看更多评论
立即登录/注册

微信扫码登录

0.0409s