使用VideoPlayer和RawImage进行视频播放

RawImage创建,添加VideoPlayer

新建一个RenderTexture,将其拖入到新建的 RawIamge 和 VideoPlayer 中TargetTexture中。
新建RawImage相关设置

VidePlayer 中属性:

source:代表播放源的来源,有Video Clip,URL两个选项,前者需要直接手动引用视频资源,后者的既可以在栏URL直接填链接地址,也可以在代码中指定,网络链接和本地地址皆可,这里用的就是URL源
Play On Awake:字面意思,组件激活时就直接播放
Loop:字面意思,循环播放
Playback Speed:字面意思,播放速度
Render Mode:字面意思,渲染模式,这个需要详细介绍一下,包含5个选项

  • CameraFarPlane(基于摄像机的渲染,渲染在摄像机的远平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用于背景播放器)
  • CameraNearPlane***(基于摄像机的渲染,渲染在摄像机的近平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用作前景播放器)
  • RenderTexture(渲染在RenderTexture上,可以用来做基于UGUI的播放器,这个时我们要用的)
  • MaterialOverride(将视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频和VR视频)
  • APIOnly(没研究出来干嘛用的,官方文档也没提到)

AspectRatio:屏幕长宽比适应(目前发现在RenderTexture模式下不起作用,所以用了AspectRatioFitter)

  • no Scale :不使用缩放。 视频位于目标矩形的中心。
  • Fit Vertically :缩放源以使其垂直适合目标矩形,并在必要时剪裁左侧和右侧或在每侧保留黑色区域。 源宽高比被保留。
  • Fit Horizontally:缩放源以使其水平适合目标矩形,裁剪顶部和底部区域,或者在需要时在上方和下方保留黑色区域。 源宽高比被保留。
  • Fit Inside:缩放源以适合目标矩形,而无需裁剪。 根据需要在左侧,右侧或上方和下方保留黑色区域。 源宽高比被保留。
  • Fit Outside:缩放源以适合目标矩形,而不会在左侧,右侧或上方和下方留下黑色区域,并根据需要进行裁剪。 源宽高比被保留。
  • Stretch:水平或垂直缩放以适合目标矩形。 源宽高比未保留。

AudioOutputMode:音频输出模式

  1. None:不播放声音
  2. AudioSource:用AudioSource播放使用
  3. ControlledTracks:控制音轨,填需要的数量,再把对应AudioSource节点拖上去引用

VideoPlayer组件的相应播放方法:

  1. vp.Prepare()
    为播放做好准备
  2. vp.Play()
    开始播放
  3. vp.Stop()
    停止播放
  4. vp.prepareCompleted
    视频准备完成时的执行事件
  5. vp.errorReceived
    播放发生错误时的执行事件
  6. vp.loopPointReached
    视频播放到最后时的执行事件,循环状态下,每一次循环播放到最后都会执行

VideoPlayer文档

注意事项
  • unity 使用RenderTexture播放视频的问题
    RenderTexture 停留在最后一帧像素导致播放不同视频出现闪屏,使用新的RenderTexture
    RenderTexture texture = new RenderTexture(renderTexture);
  • 视频不能被压缩问题
    视频文件手动放到StreamingAssets文件夹下,可以使用路径加载的方式进行加载,不必使用WWW
/// <summary>
/// 获取视频路径
/// </summary>
/// <param name="foldPath">文件路径</param>
/// <param name="fileName">视频名称</param>
/// <param name="fileFormat">视频后缀名</param>
/// <returns></returns>
 string GetFilePath(string foldPath, string fileName, string fileFormat = ".mp4")
    {
        string filePath;

        if (!string.IsNullOrEmpty(foldPath))
        {
            filePath = Application.streamingAssetsPath + "/" + foldPath + "/" + fileName + fileFormat;
        }
        else
        {
            filePath = Application.streamingAssetsPath + "/" + fileName + fileFormat;
        }

        return filePath;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,您需要将VideoPlayer的“Texture”属性设置为RawImage组件的纹理属性,这样可以将视频的帧数据渲染到RawImage组件上。具体实现步骤如下: 1. 在Unity中创建一个空的GameObject,并将VideoPlayer组件添加到该GameObject上。 2. 将视频文件拖拽到VideoPlayer组件的“Video Clip”属性中。 3. 在UI中创建一个RawImage组件,并将该组件的纹理属性设置为VideoPlayer的“Texture”属性。 4. 在代码中获取VideoPlayer组件,并开始播放视频播放视频的方法可以是通过调用VideoPlayer的Play方法,也可以是通过设置VideoPlayer的控制参数,例如“Play on Awake”属性等。 5. 在Update方法中,将VideoPlayer的“Texture”属性赋值给RawImage组件的纹理属性,这样可以将视频的帧数据渲染到RawImage组件上。 代码示例: ```C# using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class VideoController : MonoBehaviour { public RawImage rawImage; public VideoPlayer videoPlayer; void Start() { videoPlayer.Play(); // 开始播放视频 } void Update() { rawImage.texture = videoPlayer.texture; // 将视频的帧数据渲染到RawImage组件上 } } ``` 需要注意的是,为了保证视频的流畅播放,建议将视频的分辨率和RawImage的尺寸匹配,否则会出现视频拉伸或压缩的情况。同时,视频文件的大小也可能较大,需要考虑设备性能等因素来保证视频的流畅播放

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值