1

ffmpeg から結果を出力している PHP ソースから HTTP 疑似ストリーミングを実行しようとしています。

以下は、ストリームを出力するために使用しているコードです。この URL (../stream.php) に直接アクセスすると、flv ファイルがダウンロードされます。その flv ファイルを JW Player のソースとして使用すると、問題なく動作します。ただし、ソースとして stream.php を使用すると機能せず、「プレーヤーのロード中にエラーが発生しました: 再生可能なソースが見つかりません」というエラーが表示されます。

stream.php で使用しているコードは次のとおりです。

 header("Accept-Ranges: bytes");
 header("Content-type: video/flv");
 header("X-Mod-H264-Streaming: version=2.2.7");

 $cmd = 'ffmpeg -re -i source.mp4 -map_chapters -1 -vcodec:0 copy -b:v:0 885918 -bf:0 2 -threads:0 0 -s:0 720x404 -partitions:0 +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -acodec:1 copy -b:1 104684 -ac:1 2 -ar:1 44100 -f flv -';

  if ($handle = popen($cmd, 'r')) {

    sleep(3);

    echo fread($handle, 8024000);
    ob_flush();

    while (!feof($handle)){
        echo fread($handle, 8024000);
        ob_flush();
    }

    pclose($handle);

  }

JW Player コードは次のとおりです。

<script type="text/javascript">
    jwplayer("myElement").setup({
        file : "/stream.php?start=0",
        provider : 'http',
        'http.startparam' :'start',
        flashplayer : '/js/jwplayer.flash.swf',
              autostart : 'true',
              allowscriptaccess:'always',
              modes: [
            {type: 'html5'},
            {type: 'flash'},
            {type: 'download'}
        ],
        height: 270,
        width: 480
        });
</script>

これの何が問題なのですか?

ありがとうございました!

4

1 に答える 1

0

jwplayer には、その形式の var の読み取り (? & などの特殊文字の urlencoding) に問題があります。

最善の方法は、htaccess で stream.php の URL を書き換えることです。

RewriteRule  ^stream-video/(.*)/(.*) stream.php?token=$1&file=$2 [QSA,L]

このようにして、次のようにファイルの URL を渡すことができます。

http://example.com/stream-video/token-optional/filename-or-id.mp4

お役に立てれば..

ところで、php と X-Mod-H264-Streaming を介した flv ストリーミングに成功しましたか?

于 2014-07-11T12:12:29.250 に答える