找回密码
 立即注册
搜索
查看: 69|回复: 3

山东临沂PHP

[复制链接]

1

主题

8

回帖

23

积分

新手上路

积分
23
发表于 4 小时前 | 显示全部楼层 |阅读模式
山东临沂,**了ts

[hide]
  1. <?php
  2. /**
  3. * 临沂电视台流媒体**
  4. * **m3u8播放列表和TS片段,解决防盗链问题
  5. */

  6. // 频道映射配置
  7. $channelMap = [
  8.     'lyzh' => [
  9.         'name' => '临沂综合',
  10.         'url' => 'https://m3u8-channel.lytv.tv/nmip-media/channellive/channel111841/playlist.m3u8',
  11.         'group' => '电视',
  12.         'type' => 'video'
  13.     ],
  14.     'lyjj' => [
  15.         'name' => '临沂经济',
  16.         'url' => 'https://m3u8-channel.lytv.tv/nmip-media/channellive/channel115062/playlist.m3u8',
  17.         'group' => '电视',
  18.         'type' => 'video'
  19.     ],
  20.     'lygg' => [
  21.         'name' => '临沂公共',
  22.         'url' => 'https://m3u8-channel.lytv.tv/nmip-media/channellive/channel113571/playlist.m3u8',
  23.         'group' => '电视',
  24.         'type' => 'video'
  25.     ],
  26.     'lyjjgb' => [
  27.         'name' => '临沂经济广播',
  28.         'url' => 'https://m3u8-channel.lytv.tv/nmip-media/audiolive/audio122068/playlist.m3u8',
  29.         'group' => '广播',
  30.         'type' => 'audio'
  31.     ],
  32.     'lyjtlygb' => [
  33.         'name' => '临沂交通旅游广播',
  34.         'url' => 'https://m3u8-channel.lytv.tv/nmip-media/audiolive/audio120987/playlist.m3u8',
  35.         'group' => '广播',
  36.         'type' => 'audio'
  37.     ]
  38. ];

  39. // 获取远程内容
  40. function fetchContent($url) {
  41.     $options = [
  42.         'http' => [
  43.             'method' => "GET",
  44.             'header' =>
  45.                 "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\r\n" .
  46.                 "Referer: https://www.ilinyi.net/\r\n" .
  47.                 "Accept: */*\r\n" .
  48.                 "Accept-Language: zh-CN,zh;q=0.9\r\n"
  49.         ],
  50.         'ssl' => [
  51.             'verify_peer' => false,
  52.             'verify_peer_name' => false
  53.         ]
  54.     ];
  55.    
  56.     $context = stream_context_create($options);
  57.     $content = @file_get_contents($url, false, $context);
  58.    
  59.     return $content !== FALSE ? $content : false;
  60. }

  61. // 处理TS片段**
  62. if (isset($_GET['ts'])) {
  63.     $tsUrl = base64_decode($_GET['ts']);
  64.     $tsContent = fetchContent($tsUrl);
  65.    
  66.     if ($tsContent !== false) {
  67.         header('Content-Type: video/mp2t');
  68.         header('Cache-Control: public, max-age=300');
  69.         echo $tsContent;
  70.     } else {
  71.         http_response_code(500);
  72.         echo "无法获取TS片段";
  73.     }
  74.     exit;
  75. }

  76. // 处理m3u8播放列表**
  77. if (isset($_GET['id'])) {
  78.     $channelId = $_GET['id'];
  79.    
  80.     if (isset($channelMap[$channelId])) {
  81.         $channel = $channelMap[$channelId];
  82.         $m3u8Url = $channel['url'];
  83.         
  84.         $m3u8Content = fetchContent($m3u8Url);
  85.         
  86.         if ($m3u8Content !== false) {
  87.             // 处理m3u8内容,重写TS片段URL
  88.             $lines = explode("\n", $m3u8Content);
  89.             $processedContent = "";
  90.             
  91.             foreach ($lines as $line) {
  92.                 if (empty(trim($line))) {
  93.                     $processedContent .= "\n";
  94.                     continue;
  95.                 }
  96.                
  97.                 // 保留注释行和标签行
  98.                 if ($line[0] == '#') {
  99.                     $processedContent .= $line . "\n";
  100.                     continue;
  101.                 }
  102.                
  103.                 // 处理TS片段URL
  104.                 if (strpos($line, '.ts') !== false || strpos($line, '.m4s') !== false) {
  105.                     // 如果是相对路径,转换为绝对路径
  106.                     if (strpos($line, 'http') !== 0) {
  107.                         $baseUrl = dirname($m3u8Url);
  108.                         if (substr($baseUrl, -1) != '/') {
  109.                             $baseUrl .= '/';
  110.                         }
  111.                         $line = $baseUrl . $line;
  112.                     }
  113.                     
  114.                     // 将TS URL编码并重写为**URL
  115.                     $encodedTsUrl = base64_encode($line);
  116.                     $proxyUrl = $_SERVER['PHP_SELF'] . '?ts=' . $encodedTsUrl;
  117.                     $processedContent .= $proxyUrl . "\n";
  118.                 } else {
  119.                     $processedContent .= $line . "\n";
  120.                 }
  121.             }
  122.             
  123.             // 设置正确的Content-Type
  124.             if ($channel['type'] === 'audio') {
  125.                 header('Content-Type: audio/x-mpegurl');
  126.             } else {
  127.                 header('Content-Type: application/vnd.apple.mpegurl');
  128.             }
  129.             
  130.             echo $processedContent;
  131.         } else {
  132.             http_response_code(500);
  133.             echo "无法获取频道内容";
  134.         }
  135.         exit;
  136.     } else {
  137.         http_response_code(404);
  138.         echo "频道不存在";
  139.         exit;
  140.     }
  141. }

  142. // 生成M3U播放列表
  143. header('Content-Type: text/plain; charset=utf-8');

  144. if (isset($_GET['download']) || !isset($_GET['id'])) {
  145.     if (isset($_GET['download'])) {
  146.         header('Content-Disposition: attachment; filename="linyi_channels.m3u"');
  147.     }

  148.     echo "#EXTM3U\n";
  149.     echo "# Generated by Linyi TV Proxy\n";
  150.     echo "# 使用TS**模式,解决防盗链问题\n";
  151.     echo "# Referer: https://www.ilinyi.net/\n\n";

  152.     // 输出所有频道
  153.     foreach ($channelMap as $id => $channel) {
  154.         $name = $channel['name'];
  155.         $group = $channel['group'];
  156.         
  157.         echo "#EXTINF:-1 tvg-id="$id" group-title="$group",$name\n";
  158.         
  159.         // 生成**播放URL
  160.         $playUrl = $_SERVER['PHP_SELF'] . '?id=' . $id;
  161.         echo "$playUrl\n\n";
  162.     }
  163. }
  164. ?>
复制代码
  1. #EXTM3U
  2. #EXTINF:-1 tvg-name="临沂综合" tvg-logo="" group-title="山东",临沂综合
  3. http://127.0.0.1/linyi.php?id=lyzh

  4. #EXTINF:-1 tvg-name="临沂经济" tvg-logo="" group-title="山东",临沂经济
  5. http://127.0.0.1/linyi.php?id=lyjj

  6. #EXTINF:-1 tvg-name="临沂公共" tvg-logo="" group-title="山东",临沂公共
  7. http://127.0.0.1/linyi.php?id=lygg

  8. #EXTINF:-1 tvg-name="临沂经济广播" tvg-logo="" group-title="山东",临沂经济广播
  9. http://127.0.0.1/linyi.php?id=lyjjgb

  10. #EXTINF:-1 tvg-name="临沂交通旅游广播" tvg-logo="" group-title="山东",临沂交通旅游广播
  11. http://127.0.0.1/linyi.php?id=lyjtlygb
复制代码

1

主题

19

回帖

23

积分

新手上路

积分
23
发表于 3 小时前 | 显示全部楼层
谢谢,非常感谢

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2 小时前 | 显示全部楼层
感谢大佬分享

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 1 小时前 | 显示全部楼层
不能播放
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|直播源论坛