是否可以使用指向 php 代码而不是视频片段的 URL 修改 mpd?

Is it possible modify the mpd with URLs which points php code instead of video segments?

这是我的 mpd 的一部分:

<SegmentList>
    <Initialization sourceURL="bbbh_init.mp4"/>
   </SegmentList>
   <Representation id="3" mimeType="video/mp4" codecs="avc1.4d401f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="973441" accessTech="unicast">
    <SegmentList timescale="1000" duration="2000">

    <!-- <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_1.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_2.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_3.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_4.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_5.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_6.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_7.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_8.m4s"/> -->

    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=1"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=2"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=3"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=4"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=5"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=6"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=7"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=8"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=9"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=10"/>

如果我使用注释行,在那里我得到视频片段向服务器请求它们,它工作正常。

    <!-- <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_1.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_2.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_3.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_4.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_5.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_6.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_7.m4s"/>
    <SegmentURL media="https://www.dash.com/bbbhewma/dash_bbbh1000k_8.m4s"/> -->

我正在尝试读取通过 php 代码获取视频片段的 segmentURL,但它不起作用,我的 mpd 代码行:

    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=1"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=2"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=3"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=4"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=5"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=6"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=7"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=8"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=9"/>
    <SegmentURL media="https://www.dash.com/cgi.php/?pflag=0&segment=10"/>

有什么方法可以按照我想要的方式获取视频片段吗? 通过 php?我有 php 代码,它工作正常,因为当我从浏览器发出请求时,它会执行我想要的操作,但是当破折号读取 mpd 并且客户端请求 php 代码时,客户端没有响应。

我认为问题是我没有正确使用 SegmentURL 标记,因为我没有以直接方式传递视频,我传递的是 php 代码,当我执行它。

非常感谢!!

这是 php 代码。如果我在浏览器中执行此代码,它会下载文件,但不会从 mpd 下载文件。当浏览器下载文件时,它给出了一个 http 代码 204,这意味着没有内容。我该如何解决? 变量 $segment 只是一个段的数字。

$file = '/bbbhewma/dash_bbbh1000k_' . $segment . '.m4s';

if (file_exists('/usr/local/apache2/www/dash/CUSUM-dashjs13' . $file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Type: video/mp4');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('accept-ranges: bytes');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;

从客户的角度来看,这绝对有效。客户端不知道服务器 return 是直接还是通过脚本发送段。这就是为什么我认为问题出在 PHP 脚本或服务器配置中。

很难说无法访问脚本 and/or 流,但问题的原因之一可能是脚本没有 return 正确的 HTTP 状态代码(即 200)。另一个原因可能是 returned 段的 MIME 类型没有相应设置(例如 "video/mp4")。也许 returned 段的内容被 PHP 脚本破坏了。没有更多信息,只能猜测。