如何为流媒体修复此标头?

时间:2012-02-08 10:02:58

标签: php header stream

我需要通过这个php文件从另一台服务器流式传输媒体文件。

<?php
$out = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Content-type: audio/mpeg\r\n", 
  )
);

$stream = stream_context_create($out);

$end = fopen('http://example.com/audio.mp3', 'r', false, $stream);
fpassthru($end);
readfile($end);
?>

但标题不起作用。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您正在以错误的方向发送标头。您所做的工作会通知源服务器您将在GET请求中发送一些audio/mpeg - 无论如何都是无效的,GET请求没有内容。您实际需要做的是将其发送给将接收内容的客户。

您不应该为此任务需要流上下文 - 请尝试以下代码:

<?php

  // Try and open the remote stream
  if (!$stream = fopen('http://example.com/audio.mp3', 'r')) {
    // If opening failed, inform the client we have no content
    header('HTTP/1.1 500 Internal Server Error');
    exit('Unable to open remote stream');
  }

  // It's probably an idea to remove the execution time limit - on Windows hosts
  // this could result in the audio stream cutting off mid-flow
  set_time_limit(0);

  // Inform the client we will be sending it some MPEG audio
  header('Content-Type: audio/mpeg');

  // Send the data
  fpassthru($stream);

答案 1 :(得分:0)

fopen之后,添加

header('content-type: audio/mpeg');
or
header('content-type: application/octet-stream');