Sofdec2-Unity/视频位置查找播放
在普通的视频播放器中播放一个视频时,我们可以通过点击和拖动进度条来调整播放的进度和时机。Sofdec2编码后放置在Unity中时,也能够使用相同的功能,即视频位置查找播放。
本次教程中,我们将在界面上播放一个视频,同时使用两个滑块,分别用于提供位置查找功能以及显示播放进度。
Unity设置
我们首先创建一个Image,并在其上添加CirManaMovieControllerForUI的Component。
创建完成后,在CirManaMovieControllerForUI Component中勾选Play On Start:
如上图,视频播放内容设置就可以完成了,随后在Image上添加脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SeekForPosition : MonoBehaviour
{
public UnityEngine.UI.Slider seekValue;
private CriManaMovieControllerForUI moviePlayer;
void Start()
{
moviePlayer = GetComponent<CriManaMovieControllerForUI>();
seekValue.maxValue = 0;
}
void Update()
{
if (moviePlayer.player.movieInfo != null && seekValue.maxValue == 0)
{
seekValue.maxValue = (int)moviePlayer.player.movieInfo.totalFrames;
}
if (moviePlayer.player.status == CriMana.Player.Status.Stop)
{
moviePlayer.player.Start();
}
}
public void onValueChanged()
{
moviePlayer.player.Stop();
moviePlayer.player.SetSeekPosition((int)seekValue.value);
}
}
代码如上我们将滑块的最大值设置为视频内容的最大帧数,同时创建函数,用于查找视频的帧位置。
因为我们在代码中创建了滑块相关功能,因此我们需要创建相关滑块:
创建的滑块将值更改时间挂钩于我们的Image object的函数中。同时调整Image脚本:
这样一来,我们的滑块就能够查找视频的位置并且进行跳转播放了。
除此之外我们还想时刻显示当前播放进度,因此我们继续创建一个滑块,并在滑块上添加脚本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AudioSeekPosition : MonoBehaviour
{
public CriManaMovieControllerForUI movieplayer;
private UnityEngine.UI.Slider sliderbe;
// Start is called before the first frame update
void Start()
{
sliderbe = GetComponent<Slider>();
sliderbe.maxValue = 0;
}
// Update is called once per frame
void Update()
{
if(sliderbe.maxValue == 0 && movieplayer.player.movieInfo != null)
{
sliderbe.maxValue = movieplayer.player.movieInfo.totalFrames;
}
if (movieplayer.player.frameInfo != null)
{
sliderbe.value = movieplayer.player.frameInfo.frameNo % sliderbe.maxValue;
}
}
}
如上图所示,将Image添加到脚本上去后我们的滑块和Image以及视频播放就已经设置完成了,当我们运行场景后,就能够调整播放位置,并看到当前的播放进度了。