Files
ZHGD_Web/Assets/Script/Tool/VideoPlayerUrlTool.cs
2025-07-27 18:05:08 +08:00

290 lines
6.8 KiB
C#

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<Ftoken>(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<LCLiveListData>(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<UMPTool>().mediaPlayer
.OpenMedia(new MediaPath(LClive[j].streams[0].hls, MediaPathType.AbsolutePathOrURL));
// videos[i].GetComponent<UMPTool>().mediaPath =
// new MediaPath(LClive[j].streams[0].hls, MediaPathType.AbsolutePathOrURL);
videos[i].Init();
continue;
}
}
}
Index.text = "<size=30>"+Sum+"</size> 个";
Rate.text = "<size=30>"+ ((float)Sum / 29 * 100).ToString("f2")+"</size> %";
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;
}