using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using System.Security.Cryptography; using System.Text; using Newtonsoft.Json; using RenderHeads.Media.AVProVideo; using UnityEngine.UI; public class VideoPlayerUrlTool : MonoBehaviour { public static VideoPlayerUrlTool instance; private string LiveStreamurl = "https://openapi.lechange.cn/openapi/getLiveStreamInfo"; private string liveListurl = "http://139.224.250.209:18801/api/get_live_list"; //https://openapi.lechange.cn/openapi/liveList private string tokenurl = "http://139.224.250.209:18801/api/get_token"; // https://openapi.lechange.cn/openapi/accessToken private LCToken token; private string appID = "lc82079017516e4e87"; private string appSecret = "91bf33ef0de14dc4b3c36c466e02f5"; private long time; private string nonce; private string SIGN_TEMPLATE; private string sign; string tokenjsonData=""; private string toKenData; private LCLiveListData listData; public LClives[] LClive; public UMPTool[] videos; public Text Index; public Text Rate; private int Sum = 0; private void Awake() { instance = this; } void Start() { StartCoroutine(ToKenPost()); } public static string Encrypt(string input) { if (string.IsNullOrEmpty(input)) return string.Empty; using (MD5 md5 = MD5.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("x2")); // 小写十六进制 } return sb.ToString(); } } IEnumerator ToKenPost(){ UnityWebRequest uwr = new UnityWebRequest(tokenurl, "POST"); uwr.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(tokenjsonData)); uwr.downloadHandler = new DownloadHandlerBuffer(); //如果有请求头,根据具体字段要求设置 uwr.SetRequestHeader("Content-Type", "application/json"); uwr.SetRequestHeader("app-version", "V1"); yield return uwr.SendWebRequest(); toKenData = JsonConvert.DeserializeObject(uwr.downloadHandler.text).result.data.accessToken; if (uwr.isHttpError || uwr.isNetworkError) { Debug.LogError("Login Error: " + uwr.error); } StartCoroutine(FlvPost()); } IEnumerator FlvPost(){ FGetlivelist getlivelist = new FGetlivelist(); getlivelist.token = toKenData; getlivelist.queryRange = "1-99"; string listjsonData = JsonConvert.SerializeObject(getlivelist); UnityWebRequest uwr = new UnityWebRequest(liveListurl, "POST"); uwr.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(listjsonData)); uwr.downloadHandler = new DownloadHandlerBuffer(); //如果有请求头,根据具体字段要求设置 uwr.SetRequestHeader("Content-Type", "application/json"); uwr.SetRequestHeader("app-version", "V1"); yield return uwr.SendWebRequest(); LCLiveListData flv = JsonConvert.DeserializeObject(uwr.downloadHandler.text); LClive = flv.result.data.lives; Sum = 0; for (int i = 0; i < videos.Length; i++) { for (int j = 0; j < LClive.Length; j++) { if (LClive[j].deviceId == videos[i].deviceId && LClive[j].channelId == videos[i].channelId) { if (LClive[j].liveType == 1) { Sum++; } videos[i].GetComponent().mediaPlayer .OpenMedia(new MediaPath(LClive[j].streams[0].hls, MediaPathType.AbsolutePathOrURL)); // videos[i].GetComponent().mediaPath = // new MediaPath(LClive[j].streams[0].hls, MediaPathType.AbsolutePathOrURL); videos[i].Init(); continue; } } } Index.text = ""+Sum+" 个"; Rate.text = ""+ ((float)Sum / 29 * 100).ToString("f2")+" %"; UMPController.Inst.UMPPlayer("页面一(首页)"); if (uwr.isHttpError || uwr.isNetworkError) { Debug.LogError("Login Error: " + uwr.error); } } } class LCSystem { public string ver; public string appId; public string sign; public long time; public string nonce; } class LCGetToken{ public LCSystem system; public string id; public string[] param; } class lCresultData { public int expireTime; public string accessToken; } class lCresult { public string msg; public string code; public lCresultData data; } class LCToken { public lCresult result; public string id; } class LCLiveListParam{ public string token; public string queryRange; } class LCLiveList { public LCSystem system; public string id; public LCLiveListParam param; } public class LCsteam { public string coverUrl; public int streamId; public string hls; } public class LCjob { public string period; public bool status; } public class LClives { public int liveType; public int coverUpdate; public LCsteam[] streams; public string liveToken; public LCjob[] job; public string deviceId; public int liveStatus; public string channelId; } class LCLiveresultData { public LClives[] lives; public int count; } class LCliveResult { public string msg; public string code; public LCLiveresultData data; } class LCLiveListData { public LCliveResult result; public string id; } class LCLiveStreamParam { public string deviceId; public string channelId; public string token; } class LCLiveStream { public LCSystem system; public string id; public LCLiveStreamParam param; } class LCFlvresult { public string msg; public string code; public LCFlvdata data; } class LCFlvdata { public string deviceId; public string channelId; public string flv; public string flvHD; } class LCFlv { public LCFlvresult result; public string id; } class Fdata { public string expireTime; public string accessToken; } class Fresult { public string msg; public string code; public Fdata data; } class Ftoken { public Fresult result; public string id; } class FGetlivelist { public string token; public string queryRange; }