Ticket #4178: mythweb_mp3_stream_const_bit_rate.patch

File mythweb_mp3_stream_const_bit_rate.patch, 3.3 KB (added by bradley.kite@…, 13 years ago)

mythweb mp3 stream constant bit rate patch

  • mythweb/modules/music/stream.php

     
    4141                                                            ON ms.directory_id=md.directory_id
    4242                                               WHERE ms.song_id = ?',
    4343                                             $_GET['i']);
     44     $songInfo = $db->query_assoc('SELECT s.track, s.name, s.year, a.album_name, b.artist_name
     45                FROM music_songs AS s
     46                  LEFT JOIN music_albums AS a ON s.album_id=a.album_id
     47                  LEFT JOIN music_artists AS b ON a.artist_id=b.artist_id
     48                WHERE s.song_id = ?',
     49                $_GET[i]);
     50
    4451    // Update the play count
    4552        $db->query('UPDATE music_songs
    4653                       SET numplays = numplays + 1
     
    7683            $mime = 'audio/mpeg';
    7784            break;
    7885        case 'ogg':
    79             $mine = 'application/ogg';
     86            $mime = 'application/ogg';
    8087            break;
    8188        default:
    8289            $mime = 'application/octet-stream';
     
    8996// Base music path
    9097    $basepath = setting('MusicLocation', hostname);
    9198
     99    $recodeTo = setting('MusicStreamRecodeBitRate', hostname);
     100
     101    if ($mime == 'audio/mpeg' && isset($recodeTo) && $recodeTo > 0)
     102    {
     103        // use lame to recode the file to the required bit-rate.
     104        // Local file?
     105            if (file_exists("$basepath/$path/$fname")) {
     106                $handle = fopen("$basepath/$path/$fname", 'r');
     107            }
     108        // Otherwise, send it via the backend
     109            else {
     110                global $Master_Host;
     111                $port = _or(get_backend_setting('BackendStatusPort', $Master_Host),
     112                            get_backend_setting('BackendStatusPort'));
     113                $handle = fopen("http://$Master_Host:$port/Myth/$xml_command?Id=".$xml_id, 'r');
     114            }
     115
     116            $songInfoCmd = '--id3v2-only' .
     117                           ' --tt "' . escapeshellcmd($songInfo['name'])        . '"' .
     118                           ' --tn "' . escapeshellcmd($songInfo['track'])       . '"' .
     119                           ' --ty "' . escapeshellcmd($songInfo['year'])        . '"' .
     120                           ' --tl "' . escapeshellcmd($songInfo['album_name'])  . '"' .
     121                           ' --ta "' . escapeshellcmd($songInfo['artist_name']) . '"';
     122            $desc = array( 0 => array("pipe", "r"),
     123                           1 => array("pipe", "w"),
     124                           2 => array("pipe", "w") );
     125            $pipes = array();
     126            $process = proc_open("lame --mp3input -b" . $recodeTo . " --cbr " . $songInfoCmd . " - -", $desc, $pipes);
     127
     128            if (is_resource($process))
     129            {
     130                while ($buf = fread($handle, 8192))
     131                {
     132                    fwrite($pipes[0], $buf);
     133                    echo fread($pipes[1], 8192);
     134                }
     135                fclose($pipes[0]);
     136                fclose($pipes[1]);
     137                fclose($pipes[2]);
     138            }
     139            fclose($handle);
     140        exit;
     141    }
     142
    92143// Local file?
    93144    if (file_exists("$basepath/$path/$fname")) {
    94145        header('Content-Length: '.filesize("$basepath/$path/$fname"));