Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂,audiorSource脚本

this.videoPlayer.EnableAudioTrack(0, true);
this.videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>());

设置没问题,但是发现无音效。

去掉PlayOnAwake之后,可以正常发声了。

初步判断,mp4自带音轨没法预加载,playOnAwake会导致自动播放时没预载好音效。

### Unity VideoPlayer 组件播放频的方法 在 Unity 中,`VideoPlayer` 组件不仅可以用于视频渲染播放,还可以用来单独提取并播放频流。通过设置 `VideoPlayer` 的属性以及将其与 `AudioSource` 配合使用,可以实现仅播放频的功能。 #### 设置 Audio Output Mode 为了使 `VideoPlayer` 能够播放频,需要正确配置其 **Audio Output Mode** 属性。该属性有三个选项: 1. **Use Player Settings**: 使用全局玩家设置中的频输出模式。 2. **Play through Speakers (Default)**: 将频发送到设备扬声器。 3. **Send to AudioSource**: 将频信号传递给指定的 `AudioSource` 组件[^1]。 如果目标是让频通过 `AudioSource` 输出,则应选择 **Send to AudioSource** 并分配一个有效的 `AudioSource` 对象作为接收者。 #### 示例代码:动态创建 VideoPlayer 和 AudioSource 下面是一个完整的脚本示例,展示如何动态添加 `VideoPlayer` 和 `AudioSource` 组件,并确保它们协同工作以播放频文件。 ```csharp using UnityEngine; using UnityEngine.Video; public class PlayAudioFromVideo : MonoBehaviour { public string videoPath; // 视频路径(支持本地资源) private VideoPlayer vPlayer; private AudioSource audioSource; void Start() { InitializeComponents(); ConfigureVideoPlayer(videoPath); } /// <summary> /// 动态初始化 VideoPlayer 和 AudioSource 组件 /// </summary> private void InitializeComponents() { vPlayer = gameObject.AddComponent<VideoPlayer>(); audioSource = gameObject.AddComponent<AudioSource>(); // 关联 VideoPlayer 到 AudioSource vPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource; vPlayer.EnableAudioTrack(0, true); // 启用第一个轨 vPlayer.SetTargetAudioSource(0, audioSource); // 确保 AudioSource 不会自动播放 audioSource.playOnAwake = false; } /// <summary> /// 加载并配置视频源 /// </summary> /// <param name="path">视频文件路径</param> private void ConfigureVideoPlayer(string path) { if (!string.IsNullOrEmpty(path)) { vPlayer.url = path; vPlayer.isLooping = true; // 循环播放 vPlayer.prepareCompleted += OnPrepared; // 准备完成事件回调 vPlayer.Prepare(); // 开始准备媒体数据 } } /// <summary> /// 当视频准备好时触发此函数 /// </summary> private void OnPrepared(VideoPlayer vp) { Debug.Log("Media is ready!"); vPlayer.Play(); // 播放视频/频 } } ``` 上述代码实现了以下功能: - 动态创建 `VideoPlayer` 和 `AudioSource` 组件。 - 将 `VideoPlayer` 的频轨道绑定至 `AudioSource`。 - 支持加载外部或嵌入式的视频文件,并从中提取频进行播放[^2]。 #### 注意事项 - 如果只需要播放频而不需要显示画面,可以在 `VideoPlayer` 上禁用渲染相关参数,例如将 `renderMode` 设为 `VideoRenderMode.None` 或不关联任何 Render Texture。 - 确认使用的视频文件确实包含可解码的频轨道;某些编码格式可能缺少有效的声音信息。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值