Exemplo n.º 1
0
 /**
  * Get types information for an item.
  * @param \playable_item $item
  * @param string $force_type
  * @return array
  */
 protected static function get_types($item, $force_type = '')
 {
     $types = array('real' => 'mp3', 'player' => '');
     $media = null;
     $urlinfo = Stream_URL::parse($item->url);
     if ($urlinfo['id'] && Core::is_media($urlinfo['type'])) {
         $media = new $urlinfo['type']($urlinfo['id']);
     } else {
         if ($urlinfo['id'] && $urlinfo['type'] == 'song_preview') {
             $media = new Song_Preview($urlinfo['id']);
         } else {
             if (isset($urlinfo['demo_id'])) {
                 $democratic = new Democratic($urlinfo['demo_id']);
                 if ($democratic->id) {
                     $song_id = $democratic->get_next_object();
                     if ($song_id) {
                         $media = new Song($song_id);
                     }
                 }
             }
         }
     }
     if ($media != null) {
         $ftype = $media->type;
         $transcode = false;
         $transcode_cfg = AmpConfig::get('transcode');
         // Check transcode is required
         $valid_types = Song::get_stream_types_for_type($ftype, 'webplayer');
         if ($transcode_cfg == 'always' || !empty($force_type) || !in_array('native', $valid_types) || $types['real'] != $ftype && (!AmpConfig::get('webplayer_flash') || $urlinfo['type'] != 'song')) {
             if ($transcode_cfg == 'always' || $transcode_cfg != 'never' && in_array('transcode', $valid_types)) {
                 // Transcode forced from client side
                 if (!empty($force_type) && AmpConfig::get('transcode_player_customize')) {
                     debug_event("webplayer.class.php", "Forcing type to {" . $force_type . "}", 5);
                     // Transcode only if excepted type available
                     $transcode_settings = $media->get_transcode_settings($force_type, 'webplayer');
                     if ($transcode_settings) {
                         $types['real'] = $transcode_settings['format'];
                         $transcode = true;
                     }
                 }
                 // Transcode is not forced, transcode only if required
                 if (!$transcode) {
                     if (!in_array('native', $valid_types)) {
                         $transcode_settings = $media->get_transcode_settings(null, 'webplayer');
                         if ($transcode_settings) {
                             $types['real'] = $transcode_settings['format'];
                             $transcode = true;
                         }
                     }
                 }
             }
         }
         if (!$transcode) {
             $types['real'] = $ftype;
         }
         if ($urlinfo['type'] == 'song') {
             if ($types['real'] == "ogg" || $types['real'] == "opus") {
                 $types['player'] = "oga";
             } else {
                 if ($types['real'] == "mp4") {
                     $types['player'] = "m4a";
                 }
             }
         } else {
             if ($urlinfo['type'] == 'video') {
                 if ($types['real'] == "ogg") {
                     $types['player'] = "ogv";
                 } else {
                     if ($types['real'] == "webm") {
                         $types['player'] = "webmv";
                     } else {
                         if ($types['real'] == "mp4") {
                             $types['player'] = "m4v";
                         }
                     }
                 }
             }
         }
     } else {
         if ($item->type == 'live_stream') {
             $types['real'] = $item->codec;
             if ($types['real'] == "ogg" || $types['real'] == "opus") {
                 $types['player'] = "oga";
             }
         } else {
             $ext = pathinfo($item->url, PATHINFO_EXTENSION);
             if (!empty($ext)) {
                 $types['real'] = $ext;
             }
         }
     }
     if (empty($types['player'])) {
         $types['player'] = $types['real'];
     }
     debug_event("webplayer.class.php", "Types {" . json_encode($types) . "}", 5);
     return $types;
 }
Exemplo n.º 2
0
 /**
  * Get stream types.
  * @return array
  */
 public function get_stream_types($player = null)
 {
     return Song::get_stream_types_for_type($this->type, $player);
 }
Exemplo n.º 3
0
 protected static function get_types($item, $force_type = '')
 {
     $types = array('real' => 'mp3', 'player' => '');
     $browsers = array_keys(self::browser_info());
     $browser = '';
     if (count($browsers) > 0) {
         $browser = $browsers[0];
     }
     if (!empty($force_type)) {
         debug_event("webplayer.class.php", "Forcing type to {" . $force_type . "}", 5);
         $types['real'] = $force_type;
     } else {
         if ($browser == "msie" || $browser == "trident" || $browser == "webkit" || $browser == "safari") {
             $types['real'] = "mp3";
         } else {
             $types['real'] = "ogg";
         }
     }
     $song = null;
     $urlinfo = Stream_URL::parse($item->url);
     if ($urlinfo['id'] && $urlinfo['type'] == 'song') {
         $song = new Song($urlinfo['id']);
     } else {
         if ($urlinfo['id'] && $urlinfo['type'] == 'song_preview') {
             $song = new Song_Preview($urlinfo['id']);
         } else {
             if (isset($urlinfo['demo_id'])) {
                 $democratic = new Democratic($urlinfo['demo_id']);
                 if ($democratic->id) {
                     $song_id = $democratic->get_next_object();
                     if ($song_id) {
                         $song = new Song($song_id);
                     }
                 }
             }
         }
     }
     if ($song != null) {
         $ftype = $song->type;
         $transcode = false;
         $transcode_cfg = AmpConfig::get('transcode');
         // Check transcode is required
         $ftype_transcode = AmpConfig::get('transcode_' . $ftype);
         $valid_types = Song::get_stream_types_for_type($ftype);
         if ($transcode_cfg == 'always' || !empty($force_type) || $ftype_transcode == 'required' || $types['real'] != $ftype && !AmpConfig::get('webplayer_flash')) {
             if ($transcode_cfg == 'always' || $transcode_cfg != 'never' && in_array('transcode', $valid_types)) {
                 // Transcode only if excepted type available
                 $transcode_settings = $song->get_transcode_settings($types['real']);
                 if ($transcode_settings && AmpConfig::get('transcode_player_customize')) {
                     $transcode = true;
                 } else {
                     if (!in_array('native', $valid_types)) {
                         $transcode_settings = $song->get_transcode_settings(null);
                         if ($transcode_settings) {
                             $types['real'] = $transcode_settings['format'];
                             $transcode = true;
                         }
                     }
                 }
             }
         }
         if (!$transcode) {
             $types['real'] = $ftype;
         }
         if ($types['real'] == "flac" || $types['real'] == "ogg") {
             $types['player'] = "oga";
         } else {
             if ($types['real'] == "mp4") {
                 $types['player'] = "m4a";
             }
         }
     } else {
         if ($urlinfo['id'] && $urlinfo['type'] == 'video') {
             $video = new Video($urlinfo['id']);
             $types['real'] = pathinfo($video->file, PATHINFO_EXTENSION);
             if ($types['real'] == "ogg") {
                 $types['player'] = "ogv";
             } else {
                 if ($types['real'] == "webm") {
                     $types['player'] = "webmv";
                 } else {
                     if ($types['real'] == "mp4") {
                         $types['player'] = "m4v";
                     }
                 }
             }
         } else {
             if ($item->type == 'radio') {
                 $types['real'] = $item->codec;
                 if ($types['real'] == "flac" || $types['real'] == "ogg") {
                     $types['player'] = "oga";
                 }
             } else {
                 $ext = pathinfo($item->url, PATHINFO_EXTENSION);
                 if (!empty($ext)) {
                     $types['real'] = $ext;
                 }
             }
         }
     }
     if (empty($types['player'])) {
         $types['player'] = $types['real'];
     }
     debug_event("webplayer.class.php", "Types {" . json_encode($types) . "}", 5);
     return $types;
 }
Exemplo n.º 4
0
 public static function addVideo($xml, $video)
 {
     $xvideo = $xml->addChild('video');
     $xvideo->addAttribute('id', self::getVideoId($video->id));
     $xvideo->addAttribute('title', $video->f_full_title);
     $xvideo->addAttribute('isDir', 'false');
     $xvideo->addAttribute('coverArt', self::getVideoId($video->id));
     $xvideo->addAttribute('isVideo', 'true');
     $xvideo->addAttribute('type', 'video');
     $xvideo->addAttribute('duration', $video->time);
     if ($video->year > 0) {
         $xvideo->addAttribute('year', $video->year);
     }
     $tags = Tag::get_object_tags('video', $video->id);
     if (count($tags) > 0) {
         $xvideo->addAttribute('genre', $tags[0]['name']);
     }
     $xvideo->addAttribute('size', $video->size);
     $xvideo->addAttribute('suffix', $video->type);
     $xvideo->addAttribute('contentType', $video->mime);
     // Create a clean fake path instead of song real file path to have better offline mode storage on Subsonic clients
     $path = basename($video->file);
     $xvideo->addAttribute('path', $path);
     // Set transcoding information if required
     $transcode_cfg = AmpConfig::get('transcode');
     $valid_types = Song::get_stream_types_for_type($video->type, 'api');
     if ($transcode_cfg == 'always' || $transcode_cfg != 'never' && !in_array('native', $valid_types)) {
         $transcode_settings = $video->get_transcode_settings(null, 'api');
         if ($transcode_settings) {
             $transcode_type = $transcode_settings['format'];
             $xvideo->addAttribute('transcodedSuffix', $transcode_type);
             $xvideo->addAttribute('transcodedContentType', Video::type_to_mime($transcode_type));
         }
     }
 }
Exemplo n.º 5
0
 public function get_stream_types()
 {
     return Song::get_stream_types_for_type($this->type);
 }