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); }; }
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); }
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); }; }
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); }
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); }
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); }
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); }
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); }
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 } }
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); }
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); }
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(); } }