// Client callbacks. void MediaPlayer::networkStateChanged() { // If more than one media engine is installed and this one failed before finding metadata, // let the next engine try. if (m_private->networkState() >= FormatError && m_private->readyState() < HaveMetadata && installedMediaEngines().size() > 1) { if ( m_contentMIMEType.isEmpty() || bestMediaEngineForTypeAndCodecs(m_contentMIMEType, m_contentTypeCodecs, m_currentMediaEngine)) { m_reloadTimer.startOneShot(0); return; } } if (m_mediaPlayerClient) m_mediaPlayerClient->mediaPlayerNetworkStateChanged(this); }
MediaPlayer::SupportsType MediaPlayer::supportsType(const ContentType& contentType) { String type = contentType.type().lower(); String typeCodecs = contentType.parameter(codecs()); // 4.8.10.3 MIME types - The canPlayType(type) method must return the empty string if type is a type that the // user agent knows it cannot render or is the type "application/octet-stream" if (type == applicationOctetStream()) return IsNotSupported; MediaPlayerFactory* engine = bestMediaEngineForTypeAndCodecs(type, typeCodecs); if (!engine) return IsNotSupported; return engine->supportsTypeAndCodecs(type, typeCodecs); }
void MediaPlayer::loadWithNextMediaEngine(MediaPlayerFactory* current) { MediaPlayerFactory* engine; // If no MIME type is specified, just use the next engine. if (m_contentMIMEType.isEmpty()) engine = nextMediaEngine(current); else engine = bestMediaEngineForTypeAndCodecs(m_contentMIMEType, m_contentTypeCodecs, current); // Don't delete and recreate the player unless it comes from a different engine. if (!engine) { LOG(Media, "MediaPlayer::loadWithNextMediaEngine - no media engine found for type \"%s\"", m_contentMIMEType.utf8().data()); m_currentMediaEngine = engine; m_private = nullptr; } else if (m_currentMediaEngine != engine) { m_currentMediaEngine = engine; m_private = engine->constructor(this); if (m_mediaPlayerClient) m_mediaPlayerClient->mediaPlayerEngineUpdated(this); #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) m_private->setMediaPlayerProxy(m_playerProxy); #endif m_private->setPrivateBrowsingMode(m_privateBrowsing); m_private->setPreload(m_preload); m_private->setPreservesPitch(preservesPitch()); if (m_shouldPrepareToRender) m_private->prepareForRendering(); } if (m_private) m_private->load(m_url); else { m_private = createNullMediaPlayer(this); if (m_mediaPlayerClient) { m_mediaPlayerClient->mediaPlayerEngineUpdated(this); m_mediaPlayerClient->mediaPlayerResourceNotSupported(this); } } }