|
楼主 |
发表于 2023-11-10 09:37
|
显示全部楼层
接上面的代码:
如果打不开时,就要调整下面源码更换参数了。
- <div> // 以下缓存类来自互联网,请确保cache目录存在以及读写权限 //
- <div> $bstrURL = "https://gdtv-api.gdtv.cn/api/tv/v2/tvChannel/$id?tvChannelPk=$id&node=".base64_encode($wsnode);
- $sign = base64_encode(hash_hmac("SHA256","GET\n$bstrURL\n$ts\n","dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX",true));
- $opt_headers = [
- "access-control-request-headers: content-type,x-itouchtv-ca-key,x-itouchtv-ca-signature,x-itouchtv-ca-timestamp,x-itouchtv-client,x-itouchtv-device-id",
- "access-control-request-method: GET",
- "origin: https://www.gdtv.cn",
- "referer: https://www.gdtv.cn",
- "user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36",
-
- ];
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $bstrURL);<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "OPTIONS");<span style="white-space:pre"> </span>
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- curl_setopt($ch, CURLOPT_HTTPHEADER,$opt_headers);
- $data = curl_exec($ch);
- curl_close($ch);
- array_pop($headers);
- $headers[] = "x-itouchtv-ca-signature: $sign";
-
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $bstrURL);<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
- $data = curl_exec($ch);
-
- curl_close($ch);
- $json = json_decode($data);
- $playURL = json_decode($json->playUrl)->hd;
- $cache->put("gdtv_".$id."_cache",$playURL);
- fclose($sock); // 取串完成再关闭wss
- }
- // m3u8清单有referer校验。
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $playURL);<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- curl_setopt($ch, CURLOPT_HTTPHEADER,["Referer: https://www.gdtv.cn","origin: https://www.gdtv.cn"]);
- $data = curl_exec($ch);
- curl_close($ch);
- header("Content-Type: application/vnd.apple.mpegURL");
- header("Content-Disposition: filename=$id.m3u8");
- echo $data;
-
- function genSecKey()
- {
- return base64_encode(substr(md5(mt_rand(1,999)),0,16));
- }
- function encode($data)
- {
- $len = strlen($data);
- $head[0] = 129;
- $mask = [];
- for ($j = 0; $j < 4; $j ++)
- {
- $mask[] = mt_rand(1, 128);
- }
- $split = str_split(sprintf('%016b', $len), 8);
- $head[1] = 254;
- $head[2] = bindec($split[0]);
- $head[3] = bindec($split[1]);
- $head = array_merge($head, $mask);
- foreach ($head as $k => $v)
- {
- $head[$k] = chr($v);
- }
- $mask_data = '';
- for ($j = 0; $j < $len; $j ++)
- {
- $mask_data .= chr(ord($data[$j]) ^ $mask[$j % 4]);
- }
- return implode('', $head).$mask_data;
- }
- function createNewGUID()
- {
- if (function_exists('com_create_guid') === true)
- {
- return trim(com_create_guid(), '{}');
- }
- return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
- }
- // 以下缓存类来自互联网,请确保cache目录存在以及读写权限 //
- class Cache {
- private $cache_path;
- private $cache_expire;
- public function __construct($exp_time=3600,$path="cache/"){
- $this->cache_expire=$exp_time;
- $this->cache_path=$path;
- }
- private function fileName($key){ return $this->cache_path.md5($key); }
- public function put($key, $data){
- $values = serialize($data);
- $filename = $this->fileName($key);
- $file = fopen($filename, 'w');
- if ($file){
- fwrite($file, $values);
- fclose($file);
- }
- else return false;
- }
- public function get($key){
- $filename = $this->fileName($key);
- if (!file_exists($filename) || !is_readable($filename)){ return false; }
- if ( time() < (filemtime($filename) + $this->cache_expire) ) {
- $file = fopen($filename, "r");
- if ($file){
- $data = fread($file, filesize($filename));
- fclose($file);
- return unserialize($data);
- }
- else return false;
- }
- else return false;
- }
- }
- ?></div>
- </div>
复制代码
|
|