c# AVPro Video - Ultra Edition官方插件使用介绍
AvproVideo,官网中有免费的,免费的带了水印。不介意水印去下载,挺好使的。收费的在Unity商店中能找到:(这里我从淘宝上花“重金”买了一个玩玩)以前都是用的AvPro免费版的,1点几那种版本的,也挺好使,相对这个来说,这个就是某东版本的,那个是拼夕夕版本的。

常用API
获取MediaPlayer组件,使用代码如下:
MediaPlayer meida;
//播放
media.Control.Play();
//暂停
media.Control.Pause();
//停止
media.Control.Stop();
//重播
media.Control.Rewind();
//设置播放链接AbsolutePathOrURL是Url的形式,可以选择文件夹的形式,设置对应文件夹属性即可
media.OpenMedia(MediaPathType.AbsolutePathOrURL,"视频链接",true);
//StreamingAssets文件目录下的视频地址
media.OpenMedia(MediaPathType.RelativeToStreamingAssetsFolder,"视频名称",true);
//事件监听
media.Events.AddListener(OnVideoEvent);
private void OnVideoEvent(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
{
switch (arg1)
{
case MediaPlayerEvent.EventType.MetaDataReady:
break;
case MediaPlayerEvent.EventType.ReadyToPlay:
break;
case MediaPlayerEvent.EventType.Started:
break;
case MediaPlayerEvent.EventType.FirstFrameReady:
break;
case MediaPlayerEvent.EventType.FinishedPlaying:
print("无循环状态下播放完成");
break;
case MediaPlayerEvent.EventType.Closing:
print(".Closing...");
break;
case MediaPlayerEvent.EventType.Error:
print(".Error...");
break;
case MediaPlayerEvent.EventType.SubtitleChange:
break;
case MediaPlayerEvent.EventType.Stalled:
break;
case MediaPlayerEvent.EventType.Unstalled:
break;
case MediaPlayerEvent.EventType.ResolutionChanged:
break;
case MediaPlayerEvent.EventType.StartedSeeking:
break;
case MediaPlayerEvent.EventType.FinishedSeeking:
print("循环设置状态下播放结束...");
break;
case MediaPlayerEvent.EventType.StartedBuffering:
break;
case MediaPlayerEvent.EventType.FinishedBuffering:
break;
case MediaPlayerEvent.EventType.PropertiesChanged:
break;
case MediaPlayerEvent.EventType.PlaylistItemChanged:
break;
case MediaPlayerEvent.EventType.PlaylistFinished:
break;
case MediaPlayerEvent.EventType.TextTracksChanged:
break;
//case MediaPlayerEvent.EventType.TextCueChanged://=> SubtitleChange
// break;
default:
break;
}
}
Demo源码
该插件有很详细的demo演示场景,很容易使用,基本功能都已封装好,直接使用就行。以下是我将它封装好的功能写成一个单列。
using RenderHeads.Media.AVProVideo.Demos.UI;
using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Demo
{
public class MediaManager : MonoBehaviour
{
public static MediaManager m_Ins;
[SerializeField] MediaPlayer _mediaPlayer = null;
[Header("Options")]
[SerializeField] float _keyVolumeDelta = 0.05f;
[SerializeField] float _jumpDeltaTime = 5f;
[SerializeField] bool _autoHide = true;
[SerializeField] float _userInactiveDuration = 1.5f;
[SerializeField] bool _useAudioFading = true;
[Header("Keyboard Controls")]
[SerializeField] bool _enableKeyboardControls = true;
[SerializeField] KeyCode KeyVolumeUp = KeyCode.UpArrow;
[SerializeField] KeyCode KeyVolumeDown = KeyCode.DownArrow;
[SerializeField] KeyCode KeyTogglePlayPause = KeyCode.Space;
[SerializeField] KeyCode KeyToggleMute = KeyCode.M;
[SerializeField] KeyCode KeyJumpForward = KeyCode.RightArrow;
[SerializeField] KeyCode KeyJumpBack = KeyCode.LeftArrow;
[Header("Optional Components")]
[SerializeField] OverlayManager _overlayManager = null;
[SerializeField] MediaPlayer _thumbnailMediaPlayer = null;
[SerializeField] RectTransform _timelineTip = null;
[Header("UI Components")]
[SerializeField] RectTransform _canvasTransform = null;
//[SerializeField] Image image = null;
[SerializeField] Slider _sliderTime = null;
[SerializeField] EventTrigger _videoTouch = null;
[SerializeField] CanvasGroup _controlsGroup = null;
[Header("UI Components (Optional)")]
[SerializeField] GameObject _liveItem = null;
[SerializeField] Text _textMediaName = null;
[SerializeField] Text _textTimeDuration = null;
[SerializeField] Slider _sliderVolume = null;
[SerializeField] Button _buttonPlayPause = null;
[SerializeField] Button _buttonVolume = null;
[SerializeField] Button _buttonSubtitles = null;
[SerializeField] Button _buttonOptions = null;
[SerializeField] Button _buttonTimeBack = null;
[SerializeField] Button _buttonTimeForward = null;
[SerializeField] RawImage _imageAudioSpectrum = null;
[SerializeField] HorizontalSegmentsPrimitive _segmentsSeek = null;
[SerializeField] HorizontalSegmentsPrimitive _segmentsBuffered = null;
[SerializeField] HorizontalSegmentsPrimitive _segmentsProgress = null;
private bool _wasPlayingBeforeTimelineDrag;
private float _controlsFade = 1f;
private Material _playPauseMaterial;
private Material _volumeMaterial;
private Material _subtitlesMaterial;
private Material _audioSpectrumMaterial;
private float[] _spectrumSamples = new float[128];
private float[] _spectrumSamplesSmooth = new float[128];
private float _maxValue = 1f;
private float _audioVolume = 1f;
private float _audioFade = 0f;
private bool _isAudioFadingUpToPlay = true;
private const float AudioFadeDuration = 0.25f;
private float _audioFadeTime = 0f;
private readonly LazyShaderProperty _propMorph = new LazyShaderProperty("_Morph");
private readonly LazyShaderProperty _propMute = new LazyShaderProperty("_Mute");
private readonly LazyShaderProperty _propVolume = new LazyShaderProperty("_Volume");
private readonly LazyShaderProperty _propSpectrum = new LazyShaderProperty("_Spectrum");
private readonly LazyShaderProperty _propSpectrumRange = new LazyShaderProperty("_SpectrumRange");
void Awake()
{
m_Ins = this;
#if UNITY_IOS
Application.targetFrameRate = 60;
#endif
}
void Start()
{
if (_mediaPlayer)
{
_audioVolume = _mediaPlayer.AudioVolume;
}
SetupPlayPauseButton();
SetupTimeBackForwardButtons();
SetupVolumeButton();
SetupSubtitlesButton();
SetupAudioSpectrum();
CreateTimelineDragEvents();
CreateVideoTouchEvents();
CreateVolumeSliderEvents();
UpdateVolumeSlider();
}
private struct UserInteraction
{
public static float InactiveTime;
private static Vector3 _previousMousePos;
private static int _lastInputFrame;
public static bool IsUserInputThisFrame()
{
if (Time.frameCount == _lastInputFrame)
{
return true;
}
bool touchInput = (Input.touchSupported && Input.touchCount > 0);
bool mouseInput = (Input.mousePresent && (Input.mousePosition != _previousMousePos || Input.mouseScrollDelta != Vector2.zero || Input.GetMouseButton(0)));
if (touchInput || mouseInput)
{
_previousMousePos = Input.mousePosition;
_lastInputFrame = Time.frameCount;
return true;
}
return false;
}
}
private Material DuplicateMaterialOnImage(Graphic image)
{
// Assign a copy of the material so we aren't modifying the material asset file
image.material = new Material(image.material);
return image.material;
}

这篇文章介绍了如何使用C#与AVProVideoUltraEdition插件进行多媒体播放控制,包括播放、暂停、停止和重播等操作。此外,还展示了事件监听和一些关键API的用法,以及如何处理不同类型的媒体路径。示例代码展示了如何封装MediaPlayer组件的功能,提供了一种简单的交互控制方式。

3626

被折叠的 条评论
为什么被折叠?



