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