PHP 封装函数,获取cztv 直播 auth_key,

PHP 封装函数,获取cztv 直播 auth_key, 适用CZTV 电视直播, 调频广播
//PHP 封装函数,获取cztv 直播 auth_key,
function getCztvAuthkey($url = ''){
	if($url == ''){
		return;
	}
	$keyArr = array(
		'zappl01.cztv.com' => array(
			'key' => 'F7nW84dyAfswpyB0'
		),
		'zappl02.cztv.com' => array(
			'key' => 'F7nW84dyAfswpyB0'
		),
		'zhfivel01.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel02.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel03.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel04.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel05.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel06.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zhfivel07.cztv.com' => array(
			'key' => '9T08yiAoqM4eeCwV'
		),
		'zwebl01.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl02.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl03.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl04.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl05.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl06.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		),
		'zwebl07.cztv.com' => array(
			'key' => 'CHWr9VybUeBZE1VB'
		)
	);

	$pathname = parse_url($url)['path'];
	$host = parse_url($url)['host'];
	
	if(!isset($keyArr[$host])){
		return;
	}
	
	$cztvKey = $keyArr[$host]['key'];
	//rand 也是可以将时间戳 MD5加密得到32位字符串
	$rand = bin2hex(random_bytes(16));
	$timestamp = time();
	$uid = '0';

	$sign = md5($pathname.'-'.$timestamp.'-'.$rand.'-'.$uid.'-'.$cztvKey);
	$auth_key = $timestamp.'-'.$rand.'-'.$uid.'-'.$sign;
	
	return $url.'?auth_key='.$auth_key;
}

echo getCztvAuthkey($url = 'https://zwebl06.cztv.com/live/channel01480P.m3u8');
//返回: https://zwebl06.cztv.com/live/channel01480P.m3u8?auth_key=1740016378-98bacabed9e378bd7db73d5579711017-0-e749ee19af5a1701a46dc42b2c082e48

  

function getCztvTvRadioUrlOld(){
	$qingxiduArr = array(
		'480P'  => '标清',
		'720P'  => '超清',
		'1080P' => '蓝光',
		'128k'  => '音频'
	);
	
	$xianluArr = array(
		'ali'   => 'zwebl02',
		'baidu' => 'zwebl03',
		'ctcc'  => 'zwebl04',
		'qiniu' => 'zwebl06',
	);
	$radioNameArr = array(
		'radio' => array(
			'fm88'   => '浙江之声',
			'fm93'   => '交通之声',
			'fm95'   => '经济广播',
			'fm968'  => '音乐调频',
			'fm988'  => '浙江新闻',
			'fm996'  => '浙江民生',
			'fm1045' => '旅游之声',
			'fm107'  => '城市之声',
		),
		'tv' => array(
			'channel01' => '浙江卫视',
			'channel02' => '钱江都市',
			'channel03' => '经济生活',
			'channel04' => '科教影视',
			'channel06' => '民生休闲',
			'channel07' => '浙江新闻',
			'channel10' => '浙江国际',
		)
	);
	$result = array();
	foreach($xianluArr as $xianluName => $xianluUrl){
		foreach($radioNameArr['radio'] as $radioUrl => $radioName){
			$result['浙江广播'.$xianluName][$radioName] = getCztvAuthkey('https://'.$xianluUrl.'.cztv.com/live/'.$radioUrl.'128k.m3u8');
		}
	}

	foreach($qingxiduArr as $qingxiUrl => $qingxiName){
		foreach($xianluArr as $xianluName => $xianluUrl){
			foreach($radioNameArr['tv'] as $radioUrl => $radioName){
				$result['浙江电视'.$xianluName.$qingxiName][$radioName] = getCztvAuthkey('https://'.$xianluUrl.'.cztv.com/live/'.$radioUrl.$qingxiUrl.'.m3u8');
			}
		}
	}

	return $result;
}

  杭州电视台

    $tvName   = isset($_GET['tvName'])?$_GET['tvName']:'hzzh';
	$qingxidu = isset($_GET['qingxidu'])?$_GET['qingxidu']:'sd';
	$format   = isset($_GET['format'])?$_GET['format']:'m3u8';
	
	$configArr = [
		'hzzh' => ['杭州综合','16','hztv1','https://live.hoolo.tv/'],
        'xhmz' => ['西湖明珠','17','hztv2','https://live.hoolo.tv/'],
		'hzsh' => ['杭州生活','18','hztv3','https://live.hoolo.tv/'],
		'utv'  => ['杭州影视','21','hztv4','https://live3.hoolo.tv/'],
		'hzse' => ['青少体育','20','hztv5','https://live3.hoolo.tv/'],
		'whpd' => ['文化频道','22','hztv6','https://live3.hoolo.tv/'],
	];
	
	$header = array(
		'referer:'.'https://tv.hoolo.tv/'.$tvName.'/'
	);
	
	$url = 'https://mapi.hoolo.tv/api/v1/channel_detail.php?channel_id='.$configArr[$tvName][1];
	$response = cURL($url, $method = 'GET', $header);
	$arr = jsonToArray($response);
	if($qingxidu = 'hd'){
		$url = $arr[0]['channel_stream'][1]['m3u8'];
	}
	if($qingxidu = 'sd'){
		$url = $arr[0]['channel_stream'][0]['m3u8'];
	}
	if($format == 'm3u8'){
		header('Content-Type: text/json;charset=UTF-8');
		$response = cURL($url, $method = 'GET', $header);
		echo str_replace('/'.$configArr[$tvName][2].'_'.$qingxidu, 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?id=hztv&format=ts&url='.$configArr[$tvName][3].$configArr[$tvName][2].'_'.$qingxidu, $response);
	}
	if($format == 'ts'){
		@header('Content-type: video/mp2t');
		$url = $_GET['url'];
		$response = cURL($url, $method = 'GET', $header);
		echo $response;
	}

  

posted @ 2025-02-20 09:58  钢锅  阅读(58)  评论(0)    收藏  举报