コード例 #1
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);

            button.Click += delegate {
                if (mediaPlayer == null)
                {
                    mediaPlayer = Com.Google.Android.Exoplayer.ExoPlayerFactory.NewInstance(1);
                }
                Android.Net.Uri soundString = Android.Net.Uri.Parse("http://www.montemagno.com/sample.mp3");

            //				FrameworkSampleSource sampleSource = new FrameworkSampleSource(this, soundString, null);
            //				TrackRenderer aRenderer = new MediaCodecAudioTrackRenderer(sampleSource, null, true);

                String userAgent = Com.Google.Android.Exoplayer.Util.Util.GetUserAgent(this, "ExoPlayerDemo");
                var allocator = new Com.Google.Android.Exoplayer.Upstream.DefaultAllocator(BUFFER_SEGMENT_SIZE);
                var dataSource = new Com.Google.Android.Exoplayer.Upstream.DefaultUriDataSource(this, userAgent);
                Com.Google.Android.Exoplayer.Extractor.ExtractorSampleSource sampleSource =
                    new Com.Google.Android.Exoplayer.Extractor.ExtractorSampleSource(soundString, dataSource, allocator,
                    BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
                MediaCodecAudioTrackRenderer aRenderer = new MediaCodecAudioTrackRenderer(sampleSource);

                mediaPlayer.Prepare(aRenderer);
                mediaPlayer.PlayWhenReady = true;

                button.Text = string.Format ("Status: {0}", mediaPlayer.PlaybackState);
            };
        }
コード例 #2
0
            public void OnSingleManifest(Object obj)
            {
                var manifest = obj.JavaCast <HlsPlaylist>();

                if (_canceled)
                {
                    return;
                }

                var mainHandler               = _player.MainHandler;
                var loadControl               = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter            = new DefaultBandwidthMeter();
                var timestampAdjusterProvider = new PtsTimestampAdjusterProvider();

                var dataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);

                var chunkSource = new HlsChunkSource(
                    true,
                    dataSource,
                    manifest,
                    DefaultHlsTrackSelector.NewDefaultInstance(_context),
                    bandwidthMeter,
                    timestampAdjusterProvider,
                    HlsChunkSource.AdaptiveModeSplice);

                var sampleSource = new HlsSampleSource(chunkSource
                                                       , loadControl
                                                       , BufferSegments * BufferSegmentSize
                                                       , mainHandler
                                                       , _player
                                                       , MvxVideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                                                                     , sampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , (int)VideoScalingMode.ScaleToFit
                                                                     , 5000
                                                                     , mainHandler
                                                                     , _player
                                                                     , 50);
                var audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , null
                                                                     , true
                                                                     , _player.MainHandler
                                                                     , _player
                                                                     , AudioCapabilities.GetCapabilities(_context)
                                                                     , (int)Stream.Music);
                // TODO: The Id3Parser is currently not part of the binding
                //MetadataTrackRenderer id3Renderer = new MetadataTrackRenderer(sampleSource, new Id3Parser(), player, mainHandler.getLooper());
                var closedCaptionRenderer = new Eia608TrackRenderer(sampleSource, _player,
                                                                    mainHandler.Looper);

                var renderers = new TrackRenderer[MvxVideoPlayer.RendererCount];

                renderers[MvxVideoPlayer.TypeVideo] = videoRenderer;
                renderers[MvxVideoPlayer.TypeAudio] = audioRenderer;
                //renderers[DemoPlayer.TYPE_METADATA] = id3Renderer;
                renderers[MvxVideoPlayer.TypeText] = closedCaptionRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #3
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);

            button.Click += delegate {
                if (mediaPlayer == null)
                {
                    mediaPlayer = Com.Google.Android.Exoplayer.ExoPlayerFactory.NewInstance(1);
                }
                Android.Net.Uri soundString = Android.Net.Uri.Parse("http://www.montemagno.com/sample.mp3");

                FrameworkSampleSource sampleSource = new FrameworkSampleSource(this, soundString, null, 1);
                TrackRenderer aRenderer = new MediaCodecAudioTrackRenderer(sampleSource, null, true);
                mediaPlayer.Prepare(aRenderer);
                mediaPlayer.PlayWhenReady = true;

                button.Text = string.Format ("Status: {0}", mediaPlayer.PlaybackState);
            };
        }
コード例 #4
0
        public void BuildRenderers(MvxVideoPlayer player)
        {
            var allocator = new DefaultAllocator(BufferSegmentSize);


            // Build the video and audio renderers.
            var bandwidthMeter = new DefaultBandwidthMeter(player.MainHandler, null);
            var dataSource     = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
            var sampleSource   = new ExtractorSampleSource(_uri, dataSource, allocator,
                                                           BufferSegmentCount * BufferSegmentSize);
            var videoRenderer = new MediaCodecVideoTrackRenderer(_context,
                                                                 sampleSource, MediaCodecSelector.Default, (int)VideoScalingMode.ScaleToFit, 5000, player.MainHandler,
                                                                 player, 50);
            var audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource,
                                                                 MediaCodecSelector.Default, null, true, player.MainHandler, player, AudioCapabilities.GetCapabilities(_context), (int)Stream.Music);
            var textRenderer = new TextTrackRenderer(sampleSource, player,
                                                     player.MainHandler.Looper);

            // Invoke the callback.
            var renderers = new TrackRenderer[MvxVideoPlayer.RendererCount];

            renderers[MvxVideoPlayer.TypeVideo] = videoRenderer;
            renderers[MvxVideoPlayer.TypeAudio] = audioRenderer;
            renderers[MvxVideoPlayer.TypeText]  = textRenderer;
            player.OnRenderers(renderers, bandwidthMeter);
        }
コード例 #5
0
        public void BuildRenderers(MvxVideoPlayer player)
        {
            var allocator = new DefaultAllocator(BufferSegmentSize);

            // Build the video and audio renderers.
            var bandwidthMeter = new DefaultBandwidthMeter(player.MainHandler, null);
            var dataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
            var sampleSource = new ExtractorSampleSource(_uri, dataSource, allocator,
                BufferSegmentCount*BufferSegmentSize);
            var videoRenderer = new MediaCodecVideoTrackRenderer(_context,
                sampleSource, MediaCodecSelector.Default, (int) VideoScalingMode.ScaleToFit, 5000, player.MainHandler,
                player, 50);
            var audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource,
                MediaCodecSelector.Default, null, true, player.MainHandler, player, AudioCapabilities.GetCapabilities(_context), (int) Stream.Music);
            var textRenderer = new TextTrackRenderer(sampleSource, player,
                player.MainHandler.Looper);

            // Invoke the callback.
            var renderers = new TrackRenderer[MvxVideoPlayer.RendererCount];
            renderers[MvxVideoPlayer.TypeVideo] = videoRenderer;
            renderers[MvxVideoPlayer.TypeAudio] = audioRenderer;
            renderers[MvxVideoPlayer.TypeText] = textRenderer;
            player.OnRenderers(renderers, bandwidthMeter);
        }
コード例 #6
0
            public void OnSingleManifest(Object obj)
            {
                var manifest = obj.JavaCast<SmoothStreamingManifest>();
                if (_canceled)
                {
                    return;
                }

                var mainHandler = _player.MainHandler;
                var loadControl = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter = new DefaultBandwidthMeter(mainHandler, _player);

                // Check drm support if necessary.
                IDrmSessionManager drmSessionManager = null;
                if (manifest.ProtectionElement != null)
                {
                    if (ExoPlayerUtil.SdkInt < 18)
                    {
                        _player.OnRenderersError(
                            new UnsupportedDrmException(UnsupportedDrmException.ReasonUnsupportedScheme));
                        return;
                    }
                    try
                    {
                        drmSessionManager = new StreamingDrmSessionManager(manifest.ProtectionElement.Uuid,
                            _player.PlaybackLooper, _drmCallback, null, _player.MainHandler, _player);
                    }
                    catch (Exception e)
                    {
                        _player.OnRenderersError(e);
                        return;
                    }
                }

                // Build the video renderer.
                var videoDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var videoChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                    , DefaultSmoothStreamingTrackSelector.NewVideoInstance(_context, true, false)
                    , videoDataSource
                    , new FormatEvaluatorAdaptiveEvaluator(bandwidthMeter)
                    , LiveEdgeLatencyMs);
                var videoSampleSource = new ChunkSampleSource(videoChunkSource
                    , loadControl
                    , VideoBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                    , videoSampleSource
                    , MediaCodecSelector.Default
                    , (int)VideoScalingMode.ScaleToFit
                    , 5000
                    , drmSessionManager
                    , true
                    , mainHandler
                    , _player
                    , 50);

                // Build the audio renderer.
                var audioDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var audioChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                    , DefaultSmoothStreamingTrackSelector.NewAudioInstance()
                    , audioDataSource
                    , null
                    , LiveEdgeLatencyMs);
                var audioSampleSource = new ChunkSampleSource(audioChunkSource
                    , loadControl
                    , AudioBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeAudio);
                var audioRenderer = new MediaCodecAudioTrackRenderer(audioSampleSource
                    , MediaCodecSelector.Default
                    , drmSessionManager
                    , true
                    , mainHandler
                    , _player
                    , AudioCapabilities.GetCapabilities(_context)
                    , (int) Stream.Music);

                // Build the text renderer.
                var textDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var textChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                    , DefaultSmoothStreamingTrackSelector.NewTextInstance()
                    , textDataSource
                    , null
                    , LiveEdgeLatencyMs);
                var textSampleSource = new ChunkSampleSource(textChunkSource
                    , loadControl
                    , TextBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeText);
                var textRenderer = new TextTrackRenderer(textSampleSource
                    , _player
                    , mainHandler.Looper);

                // Invoke the callback.
                var renderers = new TrackRenderer[VideoPlayer.RendererCount];
                renderers[VideoPlayer.TypeVideo] = videoRenderer;
                renderers[VideoPlayer.TypeAudio] = audioRenderer;
                renderers[VideoPlayer.TypeText] = textRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #7
0
            public void OnSingleManifest(Object obj)
            {
                var manifest = obj.JavaCast<HlsPlaylist>();
                if (_canceled)
                {
                    return;
                }

                var mainHandler = _player.MainHandler;
                var loadControl = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter = new DefaultBandwidthMeter();
                var timestampAdjusterProvider = new PtsTimestampAdjusterProvider();

                var dataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var chunkSource = new HlsChunkSource(true
                    , dataSource
                    , _url
                    , manifest
                    , DefaultHlsTrackSelector.NewDefaultInstance(_context)
                    , bandwidthMeter
                    , timestampAdjusterProvider
                    , HlsChunkSource.AdaptiveModeSplice);
                var sampleSource = new HlsSampleSource(chunkSource
                    , loadControl
                    , BufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                    , sampleSource
                    , MediaCodecSelector.Default
                    , (int) VideoScalingMode.ScaleToFit
                    , 5000
                    , mainHandler
                    , _player
                    , 50);
                var audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource
                    , MediaCodecSelector.Default
                    , null
                    , true
                    , _player.MainHandler
                    , _player
                    , AudioCapabilities.GetCapabilities(_context)
                    , (int) Stream.Music);
                // TODO: The Id3Parser is currently not part of the binding
                //MetadataTrackRenderer id3Renderer = new MetadataTrackRenderer(sampleSource, new Id3Parser(), player, mainHandler.getLooper());
                var closedCaptionRenderer = new Eia608TrackRenderer(sampleSource, _player,
                    mainHandler.Looper);

                var renderers = new TrackRenderer[VideoPlayer.RendererCount];
                renderers[VideoPlayer.TypeVideo] = videoRenderer;
                renderers[VideoPlayer.TypeAudio] = audioRenderer;
                //renderers[DemoPlayer.TYPE_METADATA] = id3Renderer;
                renderers[VideoPlayer.TypeText] = closedCaptionRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #8
0
            private void BuildRenderers()
            {
                var period         = _manifest.GetPeriod(0);
                var mainHandler    = _player.MainHandler;
                var loadControl    = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter = new DefaultBandwidthMeter(mainHandler, _player);

                var hasContentProtection = false;
                var sets = period.AdaptationSets
                           .OfType <Object>()
                           .Select(item => item.JavaCast <AdaptationSet>())
                           .ToList();

                foreach (var set in sets)
                {
                    if (set.Type != AdaptationSet.TypeUnknown)
                    {
                        hasContentProtection |= set.HasContentProtection;
                    }
                }

                // Check drm support if necessary.
                var filterHdContent = false;
                StreamingDrmSessionManager drmSessionManager = null;

                if (hasContentProtection)
                {
                    if (ExoPlayerUtil.SdkInt < 18)
                    {
                        _player.OnRenderersError(new UnsupportedDrmException(UnsupportedDrmException.ReasonUnsupportedScheme));
                        return;
                    }
                    try
                    {
                        drmSessionManager = StreamingDrmSessionManager.NewWidevineInstance(_player.PlaybackLooper, _drmCallback, null, _player.MainHandler, _player);
                        filterHdContent   = GetWidevineSecurityLevel(drmSessionManager) != SecurityLevel1;
                    }
                    catch (UnsupportedDrmException e)
                    {
                        _player.OnRenderersError(e);
                        return;
                    }
                }

                // Build the video renderer.
                var videoDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var videoChunkSource = new DashChunkSource(_manifestFetcher
                                                           , DefaultDashTrackSelector.NewVideoInstance(_context, true, filterHdContent)
                                                           , videoDataSource
                                                           , new FormatEvaluatorAdaptiveEvaluator(bandwidthMeter)
                                                           , LiveEdgeLatencyMs
                                                           , _elapsedRealtimeOffset
                                                           , mainHandler
                                                           , _player
                                                           , EventSourceId);
                var videoSampleSource = new ChunkSampleSource(videoChunkSource
                                                              , loadControl
                                                              , VideoBufferSegments * BufferSegmentSize
                                                              , mainHandler
                                                              , _player
                                                              , VideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                                                                     , videoSampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , (int)VideoScalingMode.ScaleToFit
                                                                     , 5000
                                                                     , drmSessionManager
                                                                     , true
                                                                     , mainHandler
                                                                     , _player
                                                                     , 50);

                // Build the audio renderer.
                var audioDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var audioChunkSource = new DashChunkSource(_manifestFetcher
                                                           , DefaultDashTrackSelector.NewAudioInstance()
                                                           , audioDataSource
                                                           , null
                                                           , LiveEdgeLatencyMs
                                                           , _elapsedRealtimeOffset
                                                           , mainHandler
                                                           , _player
                                                           , VideoPlayer.TypeAudio);
                var audioSampleSource = new ChunkSampleSource(audioChunkSource
                                                              , loadControl
                                                              , AudioBufferSegments * BufferSegmentSize
                                                              , mainHandler
                                                              , _player
                                                              , VideoPlayer.TypeAudio);
                var audioRenderer = new MediaCodecAudioTrackRenderer(audioSampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , drmSessionManager
                                                                     , true
                                                                     , mainHandler
                                                                     , _player
                                                                     , AudioCapabilities.GetCapabilities(_context)
                                                                     , (int)Stream.Music);

                // Build the text renderer.
                var textDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var textChunkSource = new DashChunkSource(_manifestFetcher
                                                          , DefaultDashTrackSelector.NewTextInstance()
                                                          , textDataSource
                                                          , null
                                                          , LiveEdgeLatencyMs
                                                          , _elapsedRealtimeOffset
                                                          , mainHandler
                                                          , _player
                                                          , VideoPlayer.TypeText);
                var textSampleSource = new ChunkSampleSource(textChunkSource
                                                             , loadControl
                                                             , TextBufferSegments * BufferSegmentSize
                                                             , mainHandler
                                                             , _player
                                                             , VideoPlayer.TypeText);
                var textRenderer = new TextTrackRenderer(textSampleSource
                                                         , _player
                                                         , mainHandler.Looper);

                // Invoke the callback.
                var renderers = new TrackRenderer[VideoPlayer.RendererCount];

                renderers[VideoPlayer.TypeVideo] = videoRenderer;
                renderers[VideoPlayer.TypeAudio] = audioRenderer;
                renderers[VideoPlayer.TypeText]  = textRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #9
0
        private async void Play()
        {
            try
            {
                if ((CurrentTrack == null) && (CurrentTrackId == null))
                {
                    if (Queue.Count > 0)
                    {
                        Song firstOrDefault = Queue.FirstOrDefault();
                        if (firstOrDefault != null)
                        {
                            CurrentTrack   = firstOrDefault.Url;
                            CurrentTrackId = firstOrDefault.Id;
                        }
                        else
                        {
                            CurrentTrack   = null;
                            CurrentTrackId = null;
                        }
                    }
                    else
                    {
                        return;
                    }
                }

                Song currentSong = Queue.FirstOrDefault(p => p.Url == CurrentTrack);
                if (currentSong == null || CurrentTrack == null)
                {
                    currentSong = Queue.FirstOrDefault(p => p.Id == CurrentTrackId);
                }

                Player?.Stop();

                Player = null;

                if (this.paused && Player != null)
                {
                    this.paused = false;
                    //We are simply paused so just start again
                    Player.PlayWhenReady = true;
                    if (currentSong != null)
                    {
                        if (!string.IsNullOrEmpty(currentSong.Artist) && !string.IsNullOrEmpty(currentSong.Title))
                        {
                            this.StartForeground(currentSong.Artist + " - " + currentSong.Title);
                        }
                        else if (!string.IsNullOrEmpty(currentSong.Artist))
                        {
                            this.StartForeground(currentSong.Artist);
                        }
                        else if (!string.IsNullOrEmpty(currentSong.Title))
                        {
                            this.StartForeground(currentSong.Title);
                        }
                    }

                    this.RegisterRemoteClient();
                    this.remoteControlClient.SetPlaybackState(RemoteControlPlayState.Playing);
                    this.UpdateMetadata();
                    return;
                }

                if (Player == null)
                {
                    this.IntializePlayer();
                }

                if (Player.PlayWhenReady)
                {
                    this.Stop();
                }
                else
                {
                    //Player.Reset();
                    this.paused = false;
                    this.StopForeground(true);
                    this.ReleaseWifiLock();
                }

                this.starting = true;
                var netEase = Mvx.Resolve <INetEase>();
                var newSong = new SongNetease
                {
                    Artist = currentSong.Artist,
                    Title  = currentSong.Title,
                    Url    = CurrentTrack,
                    Id     = currentSong.Id
                };


                if (string.IsNullOrEmpty(newSong.Url))
                {
                    var tempsong = await netEase.GetSong(newSong.Id);

                    if (tempsong != null)
                    {
                        tempsong.Id     = newSong.Id;
                        tempsong.Title  = newSong.Title;
                        tempsong.Artist = newSong.Artist;
                        newSong         = tempsong;
                    }
                }


                var currenTrackToPlay = (await netEase.FixUrl(newSong, true)).Url;
                Dictionary <string, string> headers = new Dictionary <string, string>();
                if (currenTrackToPlay.StartsWith("http://221.228.64.228/"))
                {
                    headers.Add("Host", "m1.music.126.net");
                }
                headers.Add(
                    "User-Agent",
                    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");

                var trackUrl = Uri.Parse(currenTrackToPlay);
                FrameworkSampleSource sampleSource = new FrameworkSampleSource(Main, trackUrl, headers);

                TrackRenderer aRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.Default);

                if (QueueChanged != null)
                {
                    QueueChanged(this, new EventArgs());
                }

                var focusResult = this.audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain);
                if (focusResult != AudioFocusRequest.Granted)
                {
                    //could not get audio focus
                    Console.WriteLine("Could not get audio focus");
                }

                Player.Prepare(aRenderer);
                Player.PlayWhenReady = true;

                this.AquireWifiLock();

                if (currentSong != null)
                {
                    if (!string.IsNullOrEmpty(currentSong.Artist) && !string.IsNullOrEmpty(currentSong.Title))
                    {
                        this.StartForeground(currentSong.Artist + " - " + currentSong.Title);
                    }
                    else if (!string.IsNullOrEmpty(currentSong.Artist))
                    {
                        this.StartForeground(currentSong.Artist);
                    }
                    else if (!string.IsNullOrEmpty(currentSong.Title))
                    {
                        this.StartForeground(currentSong.Title);
                    }
                }

                this.RegisterRemoteClient();
                this.remoteControlClient.SetPlaybackState(RemoteControlPlayState.Buffering);
                this.UpdateMetadata();
            }
            catch
            {
                // ignored
            }
        }
コード例 #10
0
            private void BuildRenderers()
            {
                var period = _manifest.GetPeriod(0);
                var mainHandler = _player.MainHandler;
                var loadControl = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter = new DefaultBandwidthMeter(mainHandler, _player);

                var hasContentProtection = false;
                var sets = period.AdaptationSets
                    .OfType<Object>()
                    .Select(item => item.JavaCast<AdaptationSet>())
                    .ToList();
                foreach (var set in sets)
                {
                    if (set.Type != AdaptationSet.TypeUnknown)
                    {
                        hasContentProtection |= set.HasContentProtection;
                    }
                }

                // Check drm support if necessary.
                var filterHdContent = false;
                StreamingDrmSessionManager drmSessionManager = null;
                if (hasContentProtection)
                {
                    if (ExoPlayerUtil.SdkInt < 18)
                    {
                        _player.OnRenderersError(new UnsupportedDrmException(UnsupportedDrmException.ReasonUnsupportedScheme));
                        return;
                    }
                    try
                    {
                        drmSessionManager = StreamingDrmSessionManager.NewWidevineInstance(_player.PlaybackLooper, _drmCallback, null, _player.MainHandler, _player);
                        filterHdContent = GetWidevineSecurityLevel(drmSessionManager) != SecurityLevel1;
                    }
                    catch (UnsupportedDrmException e)
                    {
                        _player.OnRenderersError(e);
                        return;
                    }
                }

                // Build the video renderer.
                var videoDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var videoChunkSource = new DashChunkSource(_manifestFetcher
                    , DefaultDashTrackSelector.NewVideoInstance(_context, true, filterHdContent)
                    , videoDataSource
                    , new FormatEvaluatorAdaptiveEvaluator(bandwidthMeter)
                    , LiveEdgeLatencyMs
                    , _elapsedRealtimeOffset
                    , mainHandler
                    , _player
                    , EventSourceId);
                var videoSampleSource = new ChunkSampleSource(videoChunkSource
                    , loadControl
                    , VideoBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                    , videoSampleSource
                    , MediaCodecSelector.Default
                    , (int) VideoScalingMode.ScaleToFit
                    , 5000
                    , drmSessionManager
                    , true
                    , mainHandler
                    , _player
                    , 50);

                // Build the audio renderer.
                var audioDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var audioChunkSource = new DashChunkSource(_manifestFetcher
                    , DefaultDashTrackSelector.NewAudioInstance()
                    , audioDataSource
                    , null
                    , LiveEdgeLatencyMs
                    , _elapsedRealtimeOffset
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeAudio);
                var audioSampleSource = new ChunkSampleSource(audioChunkSource
                    , loadControl
                    , AudioBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeAudio);
                var audioRenderer = new MediaCodecAudioTrackRenderer(audioSampleSource
                    , MediaCodecSelector.Default
                    , drmSessionManager
                    , true
                    , mainHandler
                    , _player
                    , AudioCapabilities.GetCapabilities(_context)
                    , (int) Stream.Music);

                // Build the text renderer.
                var textDataSource = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var textChunkSource = new DashChunkSource(_manifestFetcher
                    , DefaultDashTrackSelector.NewTextInstance()
                    , textDataSource
                    , null
                    , LiveEdgeLatencyMs
                    , _elapsedRealtimeOffset
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeText);
                var textSampleSource = new ChunkSampleSource(textChunkSource
                    , loadControl
                    , TextBufferSegments*BufferSegmentSize
                    , mainHandler
                    , _player
                    , VideoPlayer.TypeText);
                var textRenderer = new TextTrackRenderer(textSampleSource
                    , _player
                    , mainHandler.Looper);

                // Invoke the callback.
                var renderers = new TrackRenderer[VideoPlayer.RendererCount];
                renderers[VideoPlayer.TypeVideo] = videoRenderer;
                renderers[VideoPlayer.TypeAudio] = audioRenderer;
                renderers[VideoPlayer.TypeText] = textRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #11
0
            public void OnSingleManifest(Object obj)
            {
                var manifest = obj.JavaCast <SmoothStreamingManifest>();

                if (_canceled)
                {
                    return;
                }

                var mainHandler    = _player.MainHandler;
                var loadControl    = new DefaultLoadControl(new DefaultAllocator(BufferSegmentSize));
                var bandwidthMeter = new DefaultBandwidthMeter(mainHandler, _player);

                // Check drm support if necessary.
                IDrmSessionManager drmSessionManager = null;

                if (manifest.ProtectionElement != null)
                {
                    if (ExoPlayerUtil.SdkInt < 18)
                    {
                        _player.OnRenderersError(
                            new UnsupportedDrmException(UnsupportedDrmException.ReasonUnsupportedScheme));
                        return;
                    }
                    try
                    {
                        drmSessionManager = new StreamingDrmSessionManager(manifest.ProtectionElement.Uuid,
                                                                           _player.PlaybackLooper, _drmCallback, null, _player.MainHandler, _player);
                    }
                    catch (Exception e)
                    {
                        _player.OnRenderersError(e);
                        return;
                    }
                }

                // Build the video renderer.
                var videoDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var videoChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                                                                      , DefaultSmoothStreamingTrackSelector.NewVideoInstance(_context, true, false)
                                                                      , videoDataSource
                                                                      , new FormatEvaluatorAdaptiveEvaluator(bandwidthMeter)
                                                                      , LiveEdgeLatencyMs);
                var videoSampleSource = new ChunkSampleSource(videoChunkSource
                                                              , loadControl
                                                              , VideoBufferSegments * BufferSegmentSize
                                                              , mainHandler
                                                              , _player
                                                              , VideoPlayer.TypeVideo);
                var videoRenderer = new MediaCodecVideoTrackRenderer(_context
                                                                     , videoSampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , (int)VideoScalingMode.ScaleToFit
                                                                     , 5000
                                                                     , drmSessionManager
                                                                     , true
                                                                     , mainHandler
                                                                     , _player
                                                                     , 50);

                // Build the audio renderer.
                var audioDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var audioChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                                                                      , DefaultSmoothStreamingTrackSelector.NewAudioInstance()
                                                                      , audioDataSource
                                                                      , null
                                                                      , LiveEdgeLatencyMs);
                var audioSampleSource = new ChunkSampleSource(audioChunkSource
                                                              , loadControl
                                                              , AudioBufferSegments * BufferSegmentSize
                                                              , mainHandler
                                                              , _player
                                                              , VideoPlayer.TypeAudio);
                var audioRenderer = new MediaCodecAudioTrackRenderer(audioSampleSource
                                                                     , MediaCodecSelector.Default
                                                                     , drmSessionManager
                                                                     , true
                                                                     , mainHandler
                                                                     , _player
                                                                     , AudioCapabilities.GetCapabilities(_context)
                                                                     , (int)Stream.Music);

                // Build the text renderer.
                var textDataSource  = new DefaultUriDataSource(_context, bandwidthMeter, _userAgent);
                var textChunkSource = new SmoothStreamingChunkSource(_manifestFetcher
                                                                     , DefaultSmoothStreamingTrackSelector.NewTextInstance()
                                                                     , textDataSource
                                                                     , null
                                                                     , LiveEdgeLatencyMs);
                var textSampleSource = new ChunkSampleSource(textChunkSource
                                                             , loadControl
                                                             , TextBufferSegments * BufferSegmentSize
                                                             , mainHandler
                                                             , _player
                                                             , VideoPlayer.TypeText);
                var textRenderer = new TextTrackRenderer(textSampleSource
                                                         , _player
                                                         , mainHandler.Looper);

                // Invoke the callback.
                var renderers = new TrackRenderer[VideoPlayer.RendererCount];

                renderers[VideoPlayer.TypeVideo] = videoRenderer;
                renderers[VideoPlayer.TypeAudio] = audioRenderer;
                renderers[VideoPlayer.TypeText]  = textRenderer;
                _player.OnRenderers(renderers, bandwidthMeter);
            }
コード例 #12
0
        private void Play(string source)
        {
            Log.Debug(TAG, "StreamingBackgroundService.Play()");

            var focusResult = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain);
            Log.Debug(TAG, "StreamingBackgroundService.Play() RequestAudioFocus result: " + focusResult);
            if (focusResult == AudioFocusRequest.Granted)
            {
                if (mediaPlayer == null)
                {
                    mediaPlayer = ExoPlayerFactory.NewInstance(1);
                }

                RegisterReceiver(headphonesUnpluggedReceiver, new IntentFilter(AudioManager.ActionAudioBecomingNoisy));
                Log.Debug(TAG, "RegisterReceiver for headphones unplugged");

                String userAgent = ExoPlayerUtil.GetUserAgent (this, "ExoPlayerDemo");

                Android.Net.Uri soundString = Android.Net.Uri.Parse(source);
                var allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
                var dataSource = new DefaultUriDataSource(this, userAgent);
                ExtractorSampleSource sampleSource = new ExtractorSampleSource(soundString, dataSource, allocator,
                                                         BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
                audioRenderer = new MediaCodecAudioTrackRenderer (sampleSource, MediaCodecSelector.Default);

                mediaPlayer.Prepare(audioRenderer);
                mediaPlayer.PlayWhenReady = true;
                IsPlaying = true;
                AquireWifiLock();
                StartForeground();
            }
        }