前言
最近需要开发app中的视频播放功能,首先要从系统相册中选择视频,然后将其在app中全屏播放。
一、工作背景
首先在unity中搭建了一个简单的平台,一个按钮和一个videoplayer物体。videoplayer使用的是unity自带的。
在button上挂了一个脚本,用来监听点击动作。通过判断不同的平台类型,安排对应的操作。
直接上代码 内联代码片
。
// unity端的代码
//定义相关的参数
public Button btn;
public GameObject m_videoPlayer;
//public Image ImageView;
AndroidJavaObject jo;
[DllImport("__Internal")]
private static extern void IOS_OpenAlbum();
//点击按钮
public void Start()
{
//点击按钮打开系统相册
Debug.Log("点击了打开相册按钮");
//在工程的开始阶段还是可以采用访问网页的形式上传视频的。
#if UNITY_EDITOR
Debug.Log("首先判断当前是unity编辑器,ios环境还是安卓环境,暂不做任何动作");
m_videoPlayer.GetComponentInChildren<PlayChoosedVideo>().urlNetWork = @"/Downloads/recording_2021_04_11_18_12_41_718.MP4";
AwakeAndCallUnity();
#elif UNITY_IOS
Debug.Log("当前是ios环境,将打开iphone中的相册");
AwakeAndCallIOS();
#elif UNITY_ANDROID
Debug.Log("当前是Android环境,将打开安卓或华为手机中的相册");
AwakeAndCallAndroid();
#endif
}
//平台是unity editor
private void AwakeAndCallUnity()
{
btn.onClick.AddListener(delegate {
m_videoPlayer.GetComponentInChildren<PlayChoosedVideo>().GoToPlayVideo();
});
}
//平台是ios则运行ios唤醒和召唤
private void AwakeAndCallIOS()
{
btn.onClick.AddListener(IOS_OpenAlbum);
}
//平台是android则运行安卓唤醒和召唤
private void AwakeAndCallAndroid()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
btn.onClick.AddListener(delegate {
CallAndroid();
Debug.Log("点击按钮");
});
}
void CallAndroid()
{
jo.Call("startPhoto");
Debug.Log("向安卓提出操作请求");
}
public void message(string str)
{
#if UNITY_ANDROID
Debug.Log("安卓传来信息:" + str);
StartCoroutine(LoadTexturePreview(str