0

在决定是否显示 flowplayer 之前,我正在尝试测试我的页面上是否存在 .flv 视频流。我想我会去看看文件头,看看是否找到它(我不知道这是否会实际工作)......使用以下函数:

function StreamRunning(){

    $file_headers = @get_headers('http://12.34.56.789:1234/stream.flv');
    if($file_headers[0] == 'HTTP/1.1 404 Not Found') {   // HTTP/1.1 200 OK
        return false;
    }
    else {
        return true;
    }

}

为了测试我在流的 URL 中硬编码的东西。实际上,这将是我的计算机从 VLC 播放器流式传输视频的公共 IP 地址,但对于此演示,我已将其替换为 12.34...等。

我遇到的问题是这个功能似乎会导致白页死亡错误,让我不知道出了什么问题。我的日志文件中甚至没有任何内容。我想真的有两个问题,

  1. 我的功能有问题吗?get_headers 不接受这样的 I/P 地址吗?
  2. 有没有更好的方法我应该这样做?

提前致谢!

更新:13-3-11 11:03(格林威治标准时间)- 如果 .flv 流实际存在,则页面加载正常,如果 .flv 流丢失 get_headers 会导致白屏死机,即使启用了所有错误报告,也不会在日志中。

4

3 回答 3

1

When you call get_headers($url) it performs GET query to provided URL and then returns recieved headers. For plain documents (like pages, images, etc.) it performs quickly. When you request video stream it trying to receive all document but can not becouse it is interrupted by timeout or something like that.

Try to use Curl (as recommended by @sexyprout) but use HEAD request instead of GET — it retrieves only headers without response contents:

curl_setopt($ch, CURLOPT_NOBODY, 1);
于 2011-03-13T11:32:51.423 回答
0

尝试在没有 @ 之前调用这个函数——你会发现哪里出了问题。

于 2011-03-13T10:31:52.560 回答
0

也许这种替代方式可行:

$ch = curl_init('http://12.34.56.789:1234/stream.flv');
curl_setopt($ch, CURLOPT_HEADER, 1);
$c = curl_exec($ch);

echo curl_getinfo($ch, CURLINFO_HTTP_CODE);
于 2011-03-13T10:33:37.620 回答