首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 解析主流視頻網站播放地址(優酷、騰訊、B站等)

     編輯:PHP 相關知識

背景與現狀

早期視頻網站使用 Flash 播放器,通過解析頁面 HTML/JS 可提取 .swf 或 .flv/.mp4 直鏈。現今主流站點均已遷移至 HTML5(HLS/m3u8、MP4 分段、DRM 加密),且接口加密簽名、Referer 校驗、Cookie 驗證嚴格,**直接解析播放地址已極難且違反服務條款**。

本文僅作**技術原理歷史歸檔**,展示早期 Flash 時代的解析思路,**不提供當前可用的破解代碼**。生產項目請使用官方開放平台 API 或嵌入官方播放器(iframe/JS SDK)。

歷史方案原理:Flash 時代的通用解析框架

<?php
/**
 * 歷史參考:通用視頻解析基類(Flash 時代)
 * 當前主流站點已不適用,僅供學習正則、DOM 解析、HTTP 協議
 */
abstract class LegacyVideoParser
{
    protected string $url;
    protected array $headers = [
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer'    => 'https://www.google.com/',
    ];

    public function __construct(string $url)
    {
        $this->url = $url;
    }

    public function parse(): ?array
    {
        $html = $this->fetch($this->url);
        if (!$html) return null;
        return $this->extract($html);
    }

    protected function fetch(string $url): string|false
    {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTPHEADER     => array_map(fn($k, $v) => "$k: $v", array_keys($this->headers), $this->headers),
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_TIMEOUT        => 15,
        ]);
        $res = curl_exec($ch);
        curl_close($ch);
        return $res;
    }

    abstract protected function extract(string $html): ?array;
}

// 優酷(舊版)解析器示例
class YoukuLegacyParser extends LegacyVideoParser
{
    protected function extract(string $html): ?array
    {
        // 1. 頁面內內嵌 JSON 數據
        if (preg_match('/videoId[=:]["\']?([\w-]+)["\']?/', $html, $m)) {
            $vid = $m[1];
            return [
                'type' => 'swf',
                'url'  => "https://player.youku.com/player.php/sid/$vid/v.swf",
                'title'=> '優酷視頻',
            ];
        }
        // 2. 頁面 input 隱藏域
        if (preg_match('/id="link2"\s+value="([^"]+)"/', $html, $m)) {
            return ['type' => 'swf', 'url' => $m[1]];
        }
        return null;
    }
}

// 土豆(舊版)
class TudouLegacyParser extends LegacyVideoParser
{
    protected function extract(string $html): ?array
    {
        if (preg_match('/iid\s*[:=]\s*["\']?(\d+)["\']?/', $html, $m)) {
            return [
                'type' => 'swf',
                'url'  => "https://www.tudou.com/player/skin/plu.swf?iid={$m[1]}",
            ];
        }
        return null;
    }
}

// 使用方式(歷史)
// $parser = new YoukuLegacyParser('https://v.youku.com/v_show/id_XMTIz.html');
// print_r($parser->parse());

主流站點歷史特徵對比表(僅供參考)

站點視頻ID特徵播放器類型解析關鍵點
優酷id_XXXX.html / sid/XXXXSWF → HTML5頁面 JSON videoId、link2 隱藏域
騰訊視頻vid=xxxx / cover/xxxx.htmlSWF → HTML5player 請求獲取 vkey、m3u8
搜狐視頻vid=xxxxSWF → HTML5meta og:video 標簽
56網v_XXXX.htmlSWFURL 直接構造 player.56.com/XXXX.swf
鳳凰視頻guid=xxxxSWF外鏈 exterior.swf?guid=
音悅台video/XXXXSWF → HTML5頁面 JSON 數據

現代合規接入方案

1. 官方開放平台(推薦)

  • 優酷開放平台:OAuth 授權,獲取視頻信息、播放地址(需審核)
  • 騰訊視頻開放平台:視頻信息查詢、播放器嵌入代碼
  • B站開放平台:https://api.bilibili.com/x/web-interface/view?bvid=BVxxxx 獲取 cid,再請求 /x/player/playurl 獲取 m3u8(需登錄 Cookie/SESSDATA)

2. 嵌入官方播放器(零開發)

<!-- 優酷嵌入 -->
<iframe src="https://player.youku.com/embed/XMTIzNDU2" allowfullscreen></iframe>

<!-- B站嵌入 -->
<iframe src="https://player.bilibili.com/player.html?bvid=BV1xx411c7xx" allowfullscreen></iframe>

<!-- 騰訊視頻嵌入 -->
<iframe src="https://v.qq.com/txp/iframe/player.html?vid=xxxx" allowfullscreen></iframe>

3. 服務端代理 m3u8(解決跨域/Referer 限制)

若有合法授權需自建播放器,可通過 PHP 代理轉發 m3u8/ts 分段:

<?php
// proxy_m3u8.php?url=https://example.com/video.m3u8
$targetUrl = $_GET['url'] ?? '';
if (!$targetUrl || !filter_var($targetUrl, FILTER_VALIDATE_URL)) {
    http_response_code(400);
    exit('Invalid URL');
}

// 簡單代理(生產需加緩存、限流、權限校驗)
$ch = curl_init($targetUrl);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Referer: https://v.qq.com/'], // 根據目標站點設置
    CURLOPT_FOLLOWLOCATION => true,
]);
$content = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);

header('Content-Type: ' . ($contentType ?: 'application/vnd.apple.mpegurl'));
// 重寫 m3u8 內的相對路徑為絕對代理路徑
if (strpos($contentType, 'mpegurl') !== false) {
    $base = rtrim(dirname($targetUrl), '/') . '/';
    $content = preg_replace('/^(?!#|https?:\/\/)/m', $base, $content);
    $content = preg_replace('/(https?:\/\/[^\/]+)\//', 'proxy_m3u8.php?url=$1/', $content);
}
echo $content;

法律與道德提醒

  • 繞過授權獲取視頻源地址屬於**非法訪問計算機信息系統**,可能觸犯刑法第 285 條
  • 視頻內容受著作權法保護,未經授權分發、下載、去水印均屬侵權
  • 請尊重內容創作者與平台權益,通過正規渠道合作接入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved