Chromecast m3u8错误

时间:2014-08-26 00:28:46

标签: javascript android chromecast

我有一个Android发送器,可以像这样投射一个M3U8文件:

metaData = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
metaData.putString(MediaMetadata.KEY_TITLE, "Test");

MediaInfo mediaInfo = new MediaInfo.Builder(m3u8URL)
                      .setContentType("application/x-mpegURL")
                      .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
                      .setMetadata(metaData)
                      .build();


 try {
     player.load(client, mediaInfo, true)
 }

这是我的自定义接收器中的onLoad功能(用于MediaManager):

var self = this;

var title = sampleplayer.getValue_(event.data, ['media', 'metadata', 'title']
      );
var titleElement = self.element_.querySelector('.media-title');
sampleplayer.setInnerText_(titleElement, title);

var subtitle = sampleplayer.getValue_(event.data, ['media', 'metadata',
      'subtitle']);
var subtitleElement = self.element_.querySelector('.media-subtitle');
sampleplayer.setInnerText_(subtitleElement, subtitle);

var artwork = sampleplayer.getValue_(event.data, ['media', 'metadata',
      'images', 0, 'url']);
var artworkElement = self.element_.querySelector('.media-artwork');
  sampleplayer.setBackgroundImage_(artworkElement, artwork);

var autoplay = sampleplayer.getValue_(event.data, ['autoplay']);
var contentId = sampleplayer.getValue_(event.data, ['media', 'contentId']);
var contentType = sampleplayer.getValue_(event.data, ['media', 'contentType']
      );
self.setContentType_(contentType);
self.setState_(sampleplayer.State.LOADING, false);
if (self.mediaPlayer != null)
{
    self.mediaPlayer.unload();
}

if (event.data['media'] && event.data['media']['contentId'])
{
        self.mediaHost = new cast.player.api.Host(
            {
                'mediaElement': self.mediaElement_, 
                'url': contentId
            }
        );

        self.mediaHost.onError = function (errCode)
        {
            if(self.mediaPlayer != null)
            {
                self.mediaPlayer.unload();
            }
        }
        var initialTimeIndexSeconds = event.data['media']['currentTime'] || 0;
        self.protocol = null;

        self.parser = document.createElement('a');
        self.parser.href = contentId;

        self.ext = self.parser.pathname.split('.').pop();
        if (self.ext === 'm3u8') {
               self.protocol =   cast.player.api.CreateHlsStreamingProtocol(self.mediaHost);
         } else if (self.ext === 'mpd') {
               self.protocol = cast.player.api.CreateDashStreamingProtocol(self.mediaHost);
         } else if (self.ext === 'ism/') {
               self.protocol = cast.player.api.CreateSmoothStreamingProtocol(self.mediaHost);
         }
         console.log('### Media Protocol Identified as ' + self.ext);
         if (self.protocol === null) {

                    self.mediaManager_['onLoadOrig'](event); // Call on the original callback
         } else {

                    self.mediaPlayer = new cast.player.api.Player(self.mediaHost);
                    self.mediaPlayer.load(self.protocol, initialTimeIndexSeconds);
        }
  }

  self.mediaElement_.autoplay = autoplay || true;

我不确定是什么原因造成的。这只发生在M3U8文件中。我在mp4中测试过它似乎工作。当我在Chrome上调试时,我跟踪它进入播放状态然后缓冲状态并在media_player.js 81中给出此错误。所以我不确定它来自何处。

Uncaught InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable. 

有什么想法导致这个?

0 个答案:

没有答案