Beispiel #1
0
        async private void InitializeAdaptiveMediaSource(System.Uri uri)
        {
            manifestUri = uri;
            httpClient.DefaultRequestHeaders.TryAppendWithoutValidation("X-CustomHeader", "This is a custom header");
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(manifestUri, httpClient);


            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                mediaElement.SetMediaStreamSource(ams);


                ams.InitialBitrate = ams.AvailableBitrates.Max <uint>();

                //Register for download requests
                //     ams.DownloadRequested += DownloadRequested;

                //Register for bitrate change events
                //            ams.DownloadBitrateChanged += DownloadBitrateChanged;
                //              ams.PlaybackBitrateChanged += PlaybackBitrateChanged;
            }
            else
            {
                // Handle failure to create the adaptive media source
            }
        }
Beispiel #2
0
        private async Task RefreshLeoPlayer()
        {
            if (_HLSUri == null)
            {
                return;
            }

            await ClearLeoPlayer();


            await HohoemaApp.UIDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async() =>
            {
//                var streamAsyncUri = _HLSUri.Replace("master.m3u8", "stream_sync.json");

//                var playSetupRes = await HohoemaApp.NiconicoContext.HttpClient.GetAsync(new Uri(streamAsyncUri));

                try
                {
                    var amsCreateResult = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(_HLSUri), HohoemaApp.NiconicoContext.HttpClient);
                    if (amsCreateResult.Status == AdaptiveMediaSourceCreationStatus.Success)
                    {
                        var ams = amsCreateResult.MediaSource;

                        _MediaSource         = MediaSource.CreateFromAdaptiveMediaSource(ams);
                        _AdaptiveMediaSource = ams;
                    }

                    MediaPlayer.Source = _MediaSource;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                }
            });
        }
Beispiel #3
0
        //</SnippetDeclareAMS>

        //<SnippetInitializeAMS>
        async private void InitializeAdaptiveMediaSource(System.Uri uri)
        {
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(uri);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                mediaPlayerElement.SetMediaPlayer(new MediaPlayer());
                mediaPlayerElement.MediaPlayer.SetMediaSource(ams);
                mediaPlayerElement.MediaPlayer.Play();


                ams.InitialBitrate = ams.AvailableBitrates.Max <uint>();

                //Register for download requests
                ams.DownloadRequested += DownloadRequested;

                //Register for bitrate change events
                ams.DownloadBitrateChanged += DownloadBitrateChanged;
                ams.PlaybackBitrateChanged += PlaybackBitrateChanged;
            }
            else
            {
                // Handle failure to create the adaptive media source
            }
        }
Beispiel #4
0
        // </SnippetDeclareHttpClient>

        async private void InitializeAdaptiveMediaSourceWithCustomHeaders(System.Uri uri)
        {
            System.Uri manifestUri = new Uri("http://amssamples.streaming.mediaservices.windows.net/49b57c87-f5f3-48b3-ba22-c55cfdffa9cb/Sintel.ism/manifest(format=m3u8-aapl)");

            // <SnippetInitializeAMSWithHttpClient>
            httpClient = new Windows.Web.Http.HttpClient();
            httpClient.DefaultRequestHeaders.TryAppendWithoutValidation("X-CustomHeader", "This is a custom header");
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(manifestUri, httpClient);

            // </SnippetInitializeAMSWithHttpClient>

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                mediaPlayerElement.SetMediaPlayer(new MediaPlayer());
                mediaPlayerElement.MediaPlayer.Source = MediaSource.CreateFromAdaptiveMediaSource(ams);
                mediaPlayerElement.MediaPlayer.Play();

                txtDownloadBitrate.Text = ams.InitialBitrate.ToString();
                txtPlaybackBitrate.Text = ams.InitialBitrate.ToString();

                //Register for download requests
                ams.DownloadRequested += DownloadRequested;

                //Register for bitrate change events
                ams.DownloadBitrateChanged += DownloadBitrateChanged;
                ams.PlaybackBitrateChanged += PlaybackBitrateChanged;
            }
            else
            {
                // Handle failure to create the adaptive media source
                MyLogMessageFunction($"Adaptive source creation failed: {manifestUri} - {result.ExtendedError}");
            }
        }
Beispiel #5
0
        private async Task <MediaPlaybackItem> LoadSourceFromUriAsync(Uri uri, HttpClient httpClient = null)
        {
            UnregisterHandlers(mediaPlayerElement.MediaPlayer);
            mediaPlayerElement.MediaPlayer?.DisposeSource();

            AdaptiveMediaSourceCreationResult result = null;

            if (httpClient != null)
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri, httpClient);
            }
            else
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri);
            }

            MediaSource source;

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                adaptiveMediaSource = result.MediaSource;

                // We use a helper class that logs all the events for the AdaptiveMediaSource:
                adaptiveMediaSourceLogger = new AdaptiveMediaSourceLogger(LoggerControl, adaptiveMediaSource);

                // In addition to logging, we use the callbacks to update some UI elements in this scenario:
                RegisterForAdaptiveMediaSourceEvents(adaptiveMediaSource);

                // At this point, we have read the manifest of the media source, and all bitrates are known.
                bitrateHelper = new BitrateHelper(adaptiveMediaSource.AvailableBitrates);
                InitializeBitrateLists(adaptiveMediaSource);
                await UpdatePlaybackBitrateAsync(adaptiveMediaSource.CurrentPlaybackBitrate);
                await UpdateDownloadBitrateAsync(adaptiveMediaSource.CurrentDownloadBitrate);

                source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMediaSource);
            }
            else
            {
                Log($"Error creating the AdaptiveMediaSource. Status: {result.Status}, ExtendedError.Message: {result.ExtendedError.Message}, ExtendedError.HResult: {result.ExtendedError.HResult.ToString("X8")}");
                return(null);
            }

            // We use a helper class that logs all the events for the MediaSource:
            mediaSourceLogger = new MediaSourceLogger(LoggerControl, source);

            // Save the original Uri.
            source.CustomProperties["uri"] = uri.ToString();

            // You're likely to put a content tracking id into the CustomProperties.
            source.CustomProperties["contentId"] = Guid.NewGuid().ToString();

            var mpItem = new MediaPlaybackItem(source);

            // We use a helper class that logs all the events for the MediaPlaybackItem:
            mediaPlaybackItemLogger = new MediaPlaybackItemLogger(LoggerControl, mpItem);

            HideDescriptionOnSmallScreen();

            return(mpItem);
        }
Beispiel #6
0
        // </SnippetDeclareAMS>

        // <SnippetInitializeAMS>
        async private void InitializeAdaptiveMediaSource(System.Uri uri)
        {
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(uri);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                mediaPlayerElement.SetMediaPlayer(new MediaPlayer());
                mediaPlayerElement.MediaPlayer.Source = MediaSource.CreateFromAdaptiveMediaSource(ams);
                mediaPlayerElement.MediaPlayer.Play();


                ams.InitialBitrate = ams.AvailableBitrates.Max <uint>();

                //Register for download requests
                ams.DownloadRequested += DownloadRequested;

                //Register for download failure and completion events
                ams.DownloadCompleted += DownloadCompleted;
                ams.DownloadFailed    += DownloadFailed;

                //Register for bitrate change events
                ams.DownloadBitrateChanged += DownloadBitrateChanged;
                ams.PlaybackBitrateChanged += PlaybackBitrateChanged;

                //Register for diagnostic event
                ams.Diagnostics.DiagnosticAvailable += DiagnosticAvailable;
            }
            else
            {
                // Handle failure to create the adaptive media source
                MyLogMessageFunction($"Adaptive source creation failed: {uri} - {result.ExtendedError}");
            }
        }
        private async Task <MediaPlaybackItem> LoadSourceFromUriAsync(Uri uri, HttpClient httpClient = null)
        {
            UnregisterHandlers(mediaPlayerElement.MediaPlayer);

            AdaptiveMediaSourceCreationResult result = null;

            if (httpClient != null)
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri, httpClient);
            }
            else
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri);
            }

            MediaSource source;

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var adaptiveMediaSource = result.MediaSource;

                // We use a helper class that logs all the events for the AdaptiveMediaSource:
                adaptiveMediaSourceLogger = new AdaptiveMediaSourceLogger(LoggerControl, adaptiveMediaSource);

                source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMediaSource);
            }
            else
            {
                Log($"Error creating the AdaptiveMediaSource. Status: {result.Status}, ExtendedError.Message: {result.ExtendedError.Message}, ExtendedError.HResult: {result.ExtendedError.HResult.ToString("X8")}");
                return(null);
            }

            // We use a helper class that logs all the events for the MediaSource:
            mediaSourceLogger = new MediaSourceLogger(LoggerControl, source);

            // Save the original Uri.
            source.CustomProperties["uri"] = uri.ToString();

            // You're likely to put a content tracking id into the CustomProperties.
            source.CustomProperties["contentId"] = "MainContent_ID";

            // In addition to logging, this scenario uses MediaSource events:
            RegisterForMediaSourceEvents(source);

            var mpItem = new MediaPlaybackItem(source);

            // We use a helper class that logs all the events for the MediaPlaybackItem:
            mediaPlaybackItemLogger = new MediaPlaybackItemLogger(LoggerControl, mpItem);

            // In addition to logging, this scenario uses MediaPlaybackItem events:
            RegisterForMediaPlaybackItemEvents(mpItem);

            // Now that we should have a MediaPlaybackItem, we will insert pre- mid- and post-roll ads
            // with the MediaBreak API.
            CreateMediaBreaksForItem(mpItem);

            HideDescriptionOnSmallScreen();

            return(mpItem);
        }
        async private void InitializeAdaptiveMediaSource(System.Uri uri, MediaElement m)
        {
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(uri);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                m.SetMediaStreamSource(ams);

                outputBitrates(); //query for available bitrates and output to the log
                txtDownloadBitrate.Text = ams.InitialBitrate.ToString();
                txtPlaybackBitrate.Text = ams.InitialBitrate.ToString();

                //Register for download requests
                ams.DownloadRequested += DownloadRequested;

                //Register for bitrate change events
                ams.DownloadBitrateChanged += DownloadBitrateChanged;
                ams.PlaybackBitrateChanged += PlaybackBitrateChanged;
            }
            else
            {
                rootPage.NotifyUser("Error creating the AdaptiveMediaSource\n\t" + result.Status, NotifyType.ErrorMessage);
            }
        }
        private static async void OnUrlChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
        {
            var control = d as CrunchyrollPlayer;
            var url     = args.NewValue as string;

            if (url is null)
            {
                control.Player.MediaPlayer.Source = null;
                control.Player.SetMediaPlayer(null);
                return;
            }
            var sourceResult = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(url));

            var source = sourceResult.MediaSource;

            source.DesiredMinBitrate = source.AvailableBitrates.Max();
            var player = new MediaPlayer
            {
                Source = MediaSource.CreateFromAdaptiveMediaSource(source)
            };

            player.Volume         = control.Volume;
            player.VolumeChanged += control.Player_VolumeChanged;
            player.PlaybackSession.PositionChanged += control.Player_PositionChanged;
            player.MediaEnded += control.Player_MediaEnded;
            control.Player.SetMediaPlayer(player);
            control.Player.MediaPlayer.Play();
        }
Beispiel #10
0
        private async Task <MediaPlaybackItem> LoadSourceFromUriAsync(Uri uri, HttpClient httpClient = null)
        {
            UnregisterHandlers(mediaPlayerElement.MediaPlayer);
            mediaPlayerElement.MediaPlayer?.DisposeSource();

            AdaptiveMediaSourceCreationResult result = null;

            if (httpClient != null)
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri, httpClient);
            }
            else
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri);
            }

            MediaSource source;

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var adaptiveMediaSource = result.MediaSource;

                // We use a helper class that logs all the events for the AdaptiveMediaSource:
                adaptiveMediaSourceLogger = new AdaptiveMediaSourceLogger(LoggerControl, adaptiveMediaSource);

                source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMediaSource);

                if (adaptiveMediaSource.MaxSeekableWindowSize.HasValue)
                {
                    UpdateSeekableWindowControls(adaptiveMediaSource);
                }
            }
            else
            {
                Log($"Error creating the AdaptiveMediaSource. Status: {result.Status}, ExtendedError.Message: {result.ExtendedError.Message}, ExtendedError.HResult: {result.ExtendedError.HResult.ToString("X8")}");
                return(null);
            }

            // We use a helper class that logs all the events for the MediaSource:
            mediaSourceLogger = new MediaSourceLogger(LoggerControl, source);

            // Save the original Uri.
            source.CustomProperties["uri"] = uri.ToString();

            // You're likely to put a content tracking id into the CustomProperties.
            source.CustomProperties["contentId"] = Guid.NewGuid().ToString();

            var mpItem = new MediaPlaybackItem(source);

            // We use a helper class that logs all the events for the MediaPlaybackItem:
            mediaPlaybackItemLogger = new MediaPlaybackItemLogger(LoggerControl, mpItem);

            HideDescriptionOnSmallScreen();

            return(mpItem);
        }
        private async Task PlayCommandExecute()
        {
            var hlsUri    = new Uri(HlsUrl);
            var hlsSource = await AdaptiveMediaSource.CreateFromUriAsync(hlsUri);

            if (hlsSource.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                MediaSource = hlsSource.MediaSource;
            }
        }
Beispiel #12
0
        private async Task UpdateMediaSource(string url)
        {
            var mediaUri    = new Uri(url);
            var mediaSource = await AdaptiveMediaSource.CreateFromUriAsync(mediaUri);

            if (mediaSource.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                Media.SetMediaStreamSource(mediaSource.MediaSource);
            }
        }
        public async Task <AdaptiveMediaSourceCreationResult> FetchStreamHLS(string channelName)
        {
            var streamUrl = await _twitchService.FetchStreamURL(channelName);

            if (string.IsNullOrEmpty(streamUrl))
            {
                App.Current.Exit();
            }

            return(await AdaptiveMediaSource.CreateFromUriAsync(new Uri(streamUrl)));
        }
        protected override async Task <MediaSource> GetPlyaingVideoMediaSource()
        {
            if (!NiconicoSession.ToolkitContext.HttpClient.DefaultRequestHeaders.ContainsKey("Origin"))
            {
                NiconicoSession.ToolkitContext.HttpClient.DefaultRequestHeaders.Add("Origin", "https://www.nicovideo.jp");
            }

            NiconicoSession.ToolkitContext.HttpClient.DefaultRequestHeaders.Referer = new Uri($"https://www.nicovideo.jp/watch/{_dmcWatchData.Video.Id}");


            var session = await GetDmcSessionAsync();

            if (session == null)
            {
                if (_dmcWatchData.Media.DeliveryLegacy != null)
                {
                    throw new NotSupportedException("DmcWatchResponse.Media.DeliveryLegacy not supported");
                    //return MediaSource.CreateFromUri(new Uri(DmcWatchResponse.Video.SmileInfo.Url));
                }
                else
                {
                    throw new Models.Infrastructure.HohoemaExpception();
                }
            }

            var uri = session != null ? session.Data.Session.ContentUri : null;

            if (session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HttpOutputDownloadParameters != null)
            {
                return(MediaSource.CreateFromUri(uri));
            }
            else if (session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HlsParameters != null)
            {
                var hlsParameters = session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HlsParameters;

                if (hlsParameters.Encryption?.HlsEncryptionV1?.KeyUri != null)
                {
                    var key = await this.NiconicoSession.ToolkitContext.HttpClient.GetStringAsync(new Uri(hlsParameters.Encryption.HlsEncryptionV1.KeyUri));
                }

                var amsResult = await AdaptiveMediaSource.CreateFromUriAsync(uri, this.NiconicoSession.ToolkitContext.HttpClient);

                if (amsResult.Status == AdaptiveMediaSourceCreationStatus.Success)
                {
                    await NiconicoSession.ToolkitContext.Video.VideoWatch.SendOfficialHlsWatchAsync(_dmcWatchData.Video.Id, _dmcWatchData.Media.Delivery.TrackingId);

                    return(MediaSource.CreateFromAdaptiveMediaSource(amsResult.MediaSource));
                }
            }

            throw new NotSupportedException("");
        }
Beispiel #15
0
        private async Task RefreshLeoPlayer()
        {
            if (_HLSUri == null)
            {
                return;
            }

            await ClearLeoPlayer();


            _UIScheduler.Schedule(async() =>
            {
                try
                {
                    // 視聴開始後にスタート時間に自動シーク
                    string hlsUri = _HLSUri;
                    if (IsWatchWithTimeshift && TimeshiftPosition != null)
                    {
                        hlsUri = MakeSeekedHLSUri(_HLSUri, TimeshiftPosition.Value);
#if DEBUG
                        Debug.WriteLine(hlsUri);
#endif
                    }

                    var amsCreateResult = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(hlsUri), NiconicoSession.Context.HttpClient);
                    if (amsCreateResult.Status == AdaptiveMediaSourceCreationStatus.Success)
                    {
                        var ams              = amsCreateResult.MediaSource;
                        _MediaSource         = MediaSource.CreateFromAdaptiveMediaSource(ams);
                        _AdaptiveMediaSource = ams;


                        ams.Diagnostics.DiagnosticAvailable += Diagnostics_DiagnosticAvailable;
                    }

                    MediaPlayer.Source = _MediaSource;

                    // タイムシフトで見ている場合はコメントのシークも行う
                    if (IsWatchWithTimeshift)
                    {
                        await ClearCommentsCacheAsync();
                        _LiveComments.Clear();
                        _NicoLiveCommentClient.Seek(TimeshiftPosition.Value);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                }
            });
        }
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            var uri = new Uri("http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8");

            var source = await AdaptiveMediaSource.CreateFromUriAsync(uri);

            if (source.Status != AdaptiveMediaSourceCreationStatus.Success)
            {
                return;
            }

            MediaPlayer.SetMediaStreamSource(source.MediaSource);
        }
Beispiel #17
0
        // <SnippetBinderBindingAMS>
        private async void Binder_Binding_AdaptiveMediaSource(MediaBinder sender, MediaBindingEventArgs args)
        {
            var deferral = args.GetDeferral();

            var contentUri = new Uri("http://contoso.com/media/" + args.MediaBinder.Token);
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(contentUri);

            if (result.MediaSource != null)
            {
                args.SetAdaptiveMediaSource(result.MediaSource);
            }
            args.SetUri(contentUri);

            deferral.Complete();
        }
        async private void InitializeAdaptiveMediaSource(System.Uri uri, MediaElement m)
        {
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(uri);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                ams = result.MediaSource;
                SetUpProtectionManager(ref m);
                m.SetMediaStreamSource(ams);
            }
            else
            {
                rootPage.NotifyUser("Error creating the AdaptiveMediaSource\n\t" + result.Status, NotifyType.ErrorMessage);
            }
        }
Beispiel #19
0
        public async void InitEmsgCueScenario()
        {
            // <SnippetEmsgLoadContent>
            AdaptiveMediaSourceCreationResult result =
                await AdaptiveMediaSource.CreateFromUriAsync(new Uri("http://contoso.com/playlist.m3u"));

            if (result.Status != AdaptiveMediaSourceCreationStatus.Success)
            {
                // TODO: Handle adaptive media source creation errors.
                return;
            }
            var mediaSource       = MediaSource.CreateFromAdaptiveMediaSource(result.MediaSource);
            var mediaPlaybackItem = new MediaPlaybackItem(mediaSource);

            // </SnippetEmsgLoadContent>

            // <SnippetEmsgCueTracksChanged>
            mediaPlaybackItem.TimedMetadataTracksChanged += (MediaPlaybackItem sender, IVectorChangedEventArgs args) =>
            {
                if (args.CollectionChange == CollectionChange.ItemInserted)
                {
                    RegisterMetadataHandlerForEmsgCues(sender, (int)args.Index);
                }
                else if (args.CollectionChange == CollectionChange.Reset)
                {
                    for (int index = 0; index < sender.TimedMetadataTracks.Count; index++)
                    {
                        if (sender.TimedMetadataTracks[index].TimedMetadataKind == TimedMetadataKind.ImageSubtitle)
                        {
                            RegisterMetadataHandlerForEmsgCues(sender, index);
                        }
                    }
                }
            };

            for (int index = 0; index < mediaPlaybackItem.TimedMetadataTracks.Count; index++)
            {
                RegisterMetadataHandlerForEmsgCues(mediaPlaybackItem, index);
            }
            // </SnippetEmsgCueTracksChanged>

            // <SnippetEmsgCuePlay>
            _mediaPlayer = new MediaPlayer();
            mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
            _mediaPlayer.Source = mediaPlaybackItem;
            _mediaPlayer.Play();
            // </SnippetEmsgCuePlay>
        }
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            try
            {
                if (NetworkInterface.GetIsNetworkAvailable())
                {
                    player.Visibility   = Visibility.Collapsed;
                    progress.Visibility = Visibility.Visible;

                    string       videoId = String.Empty;
                    YoutubeVideo video   = e.Parameter as YoutubeVideo;
                    if (video != null && !video.Id.Equals(String.Empty))
                    {
                        if (video.IsLive)
                        {
                            var streamResponse = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(video.YoutubeLink));

                            if (streamResponse.Status == AdaptiveMediaSourceCreationStatus.Success)
                            {
                                player.SetMediaStreamSource(streamResponse.MediaSource);
                            }
                        }
                        else
                        {
                            //-----Get The Video Uri and set it as a player source-------//
                            var url = await YouTube.GetVideoUriAsync(video.Id, YouTubeQuality.Quality480P);

                            player.Source = url.Uri;
                        }
                    }

                    player.Visibility   = Visibility.Visible;
                    progress.Visibility = Visibility.Collapsed;
                }
                else
                {
                    MessageDialog message = new MessageDialog("You're not connected to Internet!");
                    await message.ShowAsync();

                    this.Frame.GoBack();
                }
            }
            catch
            {
            }

            base.OnNavigatedTo(e);
        }
        private async Task PlayHLS(Uri hsl)
        {
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(hsl);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                _source = result.MediaSource;
                _source.DownloadRequested      += _source_DownloadRequested;
                _source.DownloadCompleted      += _source_DownloadCompleted;
                _source.DownloadFailed         += _source_DownloadFailed;
                _source.DownloadBitrateChanged += _source_DownloadBitrateChanged;
                _source.PlaybackBitrateChanged += _source_PlaybackBitrateChanged;

                BackgroundMediaPlayer.Current.SetMediaSource(result.MediaSource);
            }
        }
        private async Task LoadSourceFromUriAsync(Uri uri, HttpClient httpClient = null)
        {
            mediaPlayerElement.MediaPlayer?.DisposeSource();

            AdaptiveMediaSourceCreationResult result = null;

            if (httpClient != null)
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri, httpClient);
            }
            else
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri);
            }
            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                adaptiveMS = result.MediaSource;

                bitrateHelper = new BitrateHelper(adaptiveMS.AvailableBitrates);
                InitializeBitrateLists(adaptiveMS);

                // At this point, we have read the manifest of the media source, and all bitrates are known.
                await UpdatePlaybackBitrate(adaptiveMS.CurrentPlaybackBitrate);
                await UpdateDownloadBitrate(adaptiveMS.CurrentDownloadBitrate);

                // Register for events before resolving the MediaSource.
                RegisterForAdaptiveMediaSourceEvents(adaptiveMS);

                MediaSource source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMS);

                // You can save additional information in the CustomPropertySet for future retrieval.
                // Note: MediaSource.CustomProperties is a ValueSet and therefore can store
                // only serializable types.

                // Save the original Uri.
                source.CustomProperties.Add("uri", uri.ToString());

                // You're likely to put a content tracking id into the CustomProperties.
                source.CustomProperties.Add("contentId", Guid.NewGuid());

                mpItem = new MediaPlaybackItem(source);
            }
            else
            {
                Log("Error creating the AdaptiveMediaSource: " + result.Status);
            }
        }
Beispiel #23
0
        private async Task OpenHlsAsync(DmcSessionResponse session)
        {
            Assert.IsTrue(HttpStatusCodeHelper.IsSuccessStatusCode(session.Meta.Status));
            Debug.WriteLineIf(session.Meta.Message is not null, session.Meta.Message);
            Assert.IsNotNull(session.Data.Session.ContentUri);
            Assert.AreEqual("mpeg2ts", session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HlsParameters.MediaSegmentFormat);

            // Try open media
            var ams = await AdaptiveMediaSource.CreateFromUriAsync(session.Data.Session.ContentUri, _context.HttpClient);

            Assert.AreEqual(ams.Status, AdaptiveMediaSourceCreationStatus.Success);

            using (var mediaSource = MediaSource.CreateFromAdaptiveMediaSource(ams.MediaSource))
            {
                await mediaSource.OpenAsync();
            }
        }
Beispiel #24
0
        private async void PropChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == nameof(CurrentChannel))
            {
                if (!CurrentChannel.Channel.IsSpecial) // Normal channel
                {
                    OperateMediaStreamResult(await AdaptiveMediaSource.CreateFromUriAsync(new Uri(CurrentChannel.Channel.URL, UriKind.RelativeOrAbsolute)));
                }
                else // Special channel, request for a valid stream url.
                {
                }
            }
            else if (e.PropertyName == nameof(CurrentSource) && CurrentSource != null)
            {
                AvailableBitrates = new ObservableCollection <BitrateModelView>();
                foreach (var bitrate in CurrentSource.AvailableBitrates.Where(a => a != 0))
                {
                    AvailableBitrates.Add(new BitrateModelView()
                    {
                        Bitrate = bitrate
                    });
                }

                OnPropertyChanged("AvailableBitrates");
                if (CurrentSettings.PreferedQuality == QualityEnumModel.Düşük)
                {
                    SelectedBitrate = AvailableBitrates.OrderBy(b => b.Bitrate).FirstOrDefault(a => a.Bitrate == CurrentSource.CurrentPlaybackBitrate);
                }
                else if (CurrentSettings.PreferedQuality == QualityEnumModel.Yüksek)
                {
                    SelectedBitrate = AvailableBitrates.OrderByDescending(b => b.Bitrate).FirstOrDefault(a => a.Bitrate == CurrentSource.CurrentPlaybackBitrate);
                }
                else if (CurrentSettings.PreferedQuality == QualityEnumModel.Orta)
                {
                    SelectedBitrate = AvailableBitrates.OrderBy(b => b.Bitrate).FirstOrDefault(a => a.Bitrate == AvailableBitrates[AvailableBitrates.Count / 2].Bitrate);
                }
            }
            else if (e.PropertyName == nameof(SelectedBitrate) && SelectedBitrate != null && CurrentSource != null && SelectedBitrate.Bitrate != CurrentSource.CurrentPlaybackBitrate)
            {
                CurrentSource.DesiredMinBitrate = SelectedBitrate.Bitrate;
            }
            else if (e.PropertyName == nameof(AllChannels))
            {
                GroupedChannels = AllChannels.OrderBy(b => b.Channel.Name).GroupBy(a => a.Channel.Category);
            }
        }
        protected override async Task <MediaSource> GetPlyaingVideoMediaSource()
        {
            if (!NiconicoSession.Context.HttpClient.DefaultRequestHeaders.ContainsKey("Origin"))
            {
                NiconicoSession.Context.HttpClient.DefaultRequestHeaders.Add("Origin", "https://www.nicovideo.jp");
            }

            NiconicoSession.Context.HttpClient.DefaultRequestHeaders.Referer = new Uri($"https://www.nicovideo.jp/watch/{DmcWatchResponse.Video.Id}");


            var session = await GetDmcSessionAsync();

            if (session == null)
            {
                if (DmcWatchResponse.Video.SmileInfo != null)
                {
                    return(MediaSource.CreateFromUri(new Uri(DmcWatchResponse.Video.SmileInfo.Url)));
                }
                else
                {
                    throw new Exception();
                }
            }

            var uri = session != null ? new Uri(session.Data.Session.ContentUri) : null;

            if (session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HttpOutputDownloadParameters != null)
            {
                return(MediaSource.CreateFromUri(uri));
            }
            else if (session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HlsParameters != null)
            {
                var hlsParameters = session.Data.Session.Protocol.Parameters.HttpParameters.Parameters.HlsParameters;
                var amsResult     = await AdaptiveMediaSource.CreateFromUriAsync(uri, this.NiconicoSession.Context.HttpClient);

                if (amsResult.Status == AdaptiveMediaSourceCreationStatus.Success)
                {
                    await NiconicoSession.Context.Video.SendOfficialHlsWatchAsync(DmcWatchResponse.Video.Id, DmcWatchResponse.Video.DmcInfo.TrackingId);

                    return(MediaSource.CreateFromAdaptiveMediaSource(amsResult.MediaSource));
                }
            }

            throw new NotSupportedException("");
        }
        private async Task <AdaptiveMediaSource> BuildHlsMediaSource()
        {
            var client = new HttpClient();
            // Might want custom headers
            //client.DefaultRequestHeaders.Add("Referer", "xyz");
            var result = await AdaptiveMediaSource.CreateFromUriAsync(_dashStreamUrl, client);

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                Debug.WriteLine($"Success: got manifest");
                return(result.MediaSource);
            }
            else
            {
                Debug.WriteLine($"Error: {result.Status}");
                return(null);
            }
        }
Beispiel #27
0
        private async Task ChangeChannel(string url, string title)
        {
            var result = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(url, UriKind.Absolute));

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var astream = result.MediaSource;
                Player.SetMediaStreamSource(astream);
            }
            else
            {
                Player.Source = new Uri(url, UriKind.Absolute);
            }

            Title.Text = title;

            IconSb.Begin();
        }
Beispiel #28
0
        private async void BtnPlay_Tapped(object sender, TappedRoutedEventArgs e)
        {
            _licenseOverride = txtLicenseOverride.Text;

            if (!String.IsNullOrWhiteSpace(txtStreamUrl.Text))
            {
                var adaptiveMediaSourceResult = await AdaptiveMediaSource.CreateFromUriAsync(new Uri(txtStreamUrl.Text.Trim()));

                if (adaptiveMediaSourceResult.Status == AdaptiveMediaSourceCreationStatus.Success)
                {
                    mediaPlayerElement.Source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMediaSourceResult.MediaSource);
                }
                else
                {
                    Debug.WriteLine("Error opening the stream");
                }
            }
        }
        private async Task LoadSourceFromUriAsync(Uri uri, HttpClient httpClient = null)
        {
            mediaPlayerElement.MediaPlayer?.DisposeSource();

            AdaptiveMediaSourceCreationResult result = null;

            if (httpClient != null)
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri, httpClient);
            }
            else
            {
                result = await AdaptiveMediaSource.CreateFromUriAsync(uri);
            }
            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var adaptiveMS = result.MediaSource;

                // Register for events before resolving the MediaSource.
                RegisterForAdaptiveMediaSourceEvents(adaptiveMS);

                MediaSource source = MediaSource.CreateFromAdaptiveMediaSource(adaptiveMS);

                // You can save additional information in the CustomPropertySet for future retrieval.
                // Note: MediaSource.CustomProperties is a ValueSet and therefore can store
                // only serializable types.

                // Save the original Uri.
                source.CustomProperties.Add("uri", uri.ToString());

                // You're likely to put a content tracking id into the CustomProperties.
                source.CustomProperties.Add("contentId", Guid.NewGuid());

                RegisterForMediaSourceEvents(source);

                // Register for events before resolving the MediaSource.
                mpItem = new MediaPlaybackItem(source);
                RegisterForMediaPlaybackItemEvents(mpItem);
            }
            else
            {
                Log($"Error creating the AdaptiveMediaSource: {result.Status}");
            }
        }
Beispiel #30
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            string movieSource = e.Parameter as string;

            mediaPlayer.Source = new System.Uri(movieSource);
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(new System.Uri(movieSource, UriKind.Absolute));

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var astream     = result.MediaSource;
                var ttmSource   = TimedTextSource.CreateFromUri(new Uri(movieSource));
                var mediaSource = MediaSource.CreateFromAdaptiveMediaSource(astream);
                mediaSource.ExternalTimedTextSources.Add(ttmSource);
                var mediaElement = new MediaPlaybackItem(mediaSource);
                mediaPlayer.SetPlaybackSource(mediaElement);
                movieLoadingRing.IsActive = false;
            }
        }