unity使用AVPro Video加一个进度条功能

文章描述了一个在Unity中使用AVProVideo库的VideoManager脚本,管理视频播放、进度跟踪和时间控制的实现。它监听MediaPlayer事件并更新UI显示视频时长和当前播放进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RenderHeads.Media.AVProVideo;
using UnityEngine.UI;
public class VideoManager : MonoBehaviour
{
    public MediaPlayer videoPlayer;
    public Slider slider;

    [SerializeField]
    float totalDuration; // 视频总时长,单位为秒
    public Text durationText; // 显示视频时长的UI Text组件
    public Text nowText; // 显示视频时长的UI Text组件

    double time = 0;
    private void Start()
    {
        videoPlayer.Events.AddListener(OnMediaPlayerEvent);
    }
    private void OnMediaPlayerEvent(MediaPlayer player, MediaPlayerEvent.EventType eventType, ErrorCode errorCode)
    {
        if (eventType == MediaPlayerEvent.EventType.FirstFrameReady)
        {
            InvokeRepeating("UpdateProgressBar", 0f, 0.1f); // 每0.1秒更新一次进度条
        }
    }
    public void OnVideoSeekSlider1()
    {
        videoPlayer.Control.Seek(slider.value * videoPlayer.Info.GetDurationMs());
    }

    void UpdateProgressBar()
    {
        totalDuration = (float)videoPlayer.Info.GetDurationMs()/1000;

        int hours = (int)(totalDuration / 3600);
        int minutes = (int)((totalDuration % 3600) / 60);
        int seconds = (int)(totalDuration % 60);

        durationText.text = string.Format("{1:D1}:{2:D2}", hours, minutes, seconds);


        int cut = (int)(videoPlayer.Control.GetCurrentTimeMs()/1000);
        int minutes2 = ((cut % 3600) / 60);
        int seconds2 = (cut % 60);
        nowText.text = string.Format("{1:D1}:{2:D2}", hours, minutes2, seconds2);

        if (videoPlayer && videoPlayer.Info != null)
        {
            time = videoPlayer.Control.GetCurrentTimeMs() ;

            if (videoPlayer.Info.GetDurationMs() <= 0)
            {
                return;
            }
            double vol = (time / videoPlayer.Info.GetDurationMs());
            slider.SetValueWithoutNotify((float)vol);
        }
    }
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值