通过PHP JWPlayer和Proxying MP3文件

时间:2012-09-02 04:02:01

标签: php proxy rss jwplayer playlist

这是专为个人使用而设计的项目。

我将JWPlayer安装到我的本地开发服务器上。这是我使用过的功能播放列表并经过验证的作品:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>oTunes Web App - Playlist</title>
        <item>
            <title>My Baby Loves Me by Martina McBride on Greatest Hits</title>
            <media:content url="07TheGift.mp3" duration="156" />
        </item>
    </channel>
</rss>

此播放列表不起作用:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>oTunes Web App - Playlist</title>
        <item>
            <title>My Baby Loves Me by Martina McBride on Greatest Hits</title>
            <media:content url="ajax.php?ajax=getMP3Version&track=38809" duration="156" />
        </item>
    </channel>
</rss>

ajax.php已被开发用于处理所有AJAX请求,包括充当MP3文件的“代理”,因为MP3文件位于非Web访问目录(不同的驱动器)中。这是来自ajax.php的相关代码snipplet:

$initial = $_GET['initial'];
session_start();
echo $tracks->generatePlaylistString($_SESSION['last_results'], $initial);

这是来自$ tracks类的相关代码:

        function generatePlaylistString($data, $initial) {
            $playlistData = $data;
            $firstToPlay = $initial;
            $round = 1;
            $addToPlaylist = false;
            $playlistString = '<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>oTunes Web App - Playlist</title>
';
            foreach($playlistData AS $item) {
                if ($item['TrackUniqueID'] == $firstToPlay) {
                    $addToPlaylist = true;
                }
                if ($addToPlaylist) {
                    $durationArray = explode(":", $item['TrackTotalDuration']);
                    $playlistString .= '        <item>
            <title>'.$item['TrackTitle'].' by '.$item['TrackArtist'].' on '.$item['TrackAlbum'].'</title>
            <media:content url="ajax.php?ajax=getMP3Version&track='.$item['TrackUniqueID'].'" duration="'.(($durationArray[0]*60)+$durationArray[1]).'" />
        </item>
';
                }
            }
            $playlistString .= '    </channel>
</rss>';
            return $playlistString;
        }

播放列表格式正确,因为我通过调用静态文件(见上文)替换了对代理PHP文件的调用,并且正确播放了歌曲。我在浏览器中转到PHP页面,系统会提示我播放该文件(并且它也能正常播放)。我使用Firebug确认正在进行正确的呼叫和响应,而且它们都是。但是,当我将代理PHP页面的调用放入播放列表时,我收到以下错误:

  

无法加载播放列表:播放列表文件未包含有效内容   播放列表

我不知道还能做什么,除了将所有MP3文件移动到一个可访问web的目录(出于控制和资源原因,我不想这样做)。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

变化:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>oTunes Web App - Playlist</title>
        <item>
            <title>My Baby Loves Me by Martina McBride on Greatest Hits</title>
            <media:content url="ajax.php?ajax=getMP3Version&track=38809" duration="156" />
        </item>
    </channel>
</rss>

要:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:jwplayer="http://developer.longtailvideo.com/trac/wiki/FlashFormats">
    <channel>
        <title>oTunes Web App - Playlist</title>
        <item>
            <title>My Baby Loves Me by Martina McBride on Greatest Hits</title>
            <media:content url="ajax.php?ajax=getMP3Version&track=38809" duration="156" />
            <jwplayer:provider>sound</jwplayer:provider>
        </item>
    </channel>
</rss>

这应该有效。