使用 PHP 获取和返回媒体 url (m3u8)

Posted

技术标签:

【中文标题】使用 PHP 获取和返回媒体 url (m3u8)【英文标题】:Get and return media url (m3u8) using PHP 【发布时间】:2017-06-11 17:54:22 【问题描述】:

我有一个托管客户视频的网站。在网站上,文件通过 m3u8 链接从外部加载。

客户现在希望在 Roku 频道上播放这些视频。

如果我只是使用站点中的 m3u8 链接,则会出现错误,因为生成的 url 是通过 cookie 发送的,因此客户端必须单击该链接才能为它们生成新代码。

如果可能的话(我在这里没有看到)我希望抓取 html 页面,然后通过 Roku 网站上的 php 脚本返回链接。

我知道如何使用纯 php 获取标题等,但在返回 m3u8 链接时遇到问题..

我确实有代码表明我不是在寻找讲义,而是在尝试。

这是我用来获取标题名称的例子。

注意:我想知道是否有可能有一个 php 自动填充每个 url 的 html 页面,所以我不必为每个预先输入 url 的视频使用不同的 php。

<?php
$html = file_get_contents('http://example.com'); //get the html returned from the following url

$movie_doc = new DOMDocument();

libxml_use_internal_errors(TRUE); //disable libxml errors

if(!empty($html)) //if any html is actually returned

    $movie_doc->loadHTML($html);
    libxml_clear_errors(); //remove errors for yucky html

    $movie_xpath = new DOMXPath($movie_doc);

    //get all the titles
    $movie_row = $movie_xpath->query('//title');

    if($movie_row->length > 0)
        foreach($movie_row as $row)
            echo $row->nodeValue . "<br/>";
        
    

?>

【问题讨论】:

你能告诉我们一个实际的网址吗? 这在 Roku 方面也可能可行,roUrlTransfer 支持自定义标头和 cookie 【参考方案1】:

有一个简单的方法,它涉及使用正则表达式。

在本例中,假设视频 M3u8 文件位于:http://example.com/theVideoPage

您可以将 XML 中的视频 URL 源指向您的 PHP 文件。

http://thisPhpFileLocation.com

<?php
$html = file_get_contents("http://example.com/theVideoPage");

preg_match_all(
    '/(http.*m3u8)/',

    $html,
    $posts, // will contain the article data
    PREG_SET_ORDER // formats data into an array of posts
);

foreach ($posts as $post) 
    $link = $post[0];

header("Location: $link");

?>

现在,如果你想使用一个 URL,你可以在末尾附加一个 URL 链接,它可能看起来像这样,你可以使用一个地址作为位于

的视频 URL

http://thisPhpFileLocation.com?id=theVideoPage

<?php
$id = $_GET['id'];
$html = file_get_contents("http://example.com".$id);

preg_match_all(
    '/(http.*m3u8)/',

    $html,
    $things, // will contain the article data
    PREG_SET_ORDER // formats data into an array of posts
);

foreach ($things as $thing) 
    $link = $thing[1];

// clear out the output buffer
while (ob_get_status())

    ob_end_clean();


// no redirect
header("Location: $link");


?>

【讨论】:

以上是关于使用 PHP 获取和返回媒体 url (m3u8)的主要内容,如果未能解决你的问题,请参考以下文章

HLS和M3U8

Winamp - HLS 收音机 (m3u8)

现在网上的视频很多都是m3u8格式的,它们用这种格式有啥好处?

使用ffmepg下载m3u8流媒体

网络流媒体资源m3u8下载并合并

m3u8是啥流媒体视频格式的用啥播放器可以观看?