Exemplo n.º 1
0
        public override async Task <Uri> GenerateVideoContentUrl()
        {
            if (_DmcWatchResponse == null)
            {
                return(null);
            }

            if (_DmcWatchResponse.Video.DmcInfo == null)
            {
                return(null);
            }

            VideoContent videoQuality = Video;

            if (Video == null)
            {
                return(null);
            }

            try
            {
                _DmcSessionResponse = await HohoemaApp.NiconicoContext.Video.GetDmcSessionResponse(_DmcWatchResponse, videoQuality);

                return(new Uri(_DmcSessionResponse.Data.Session.ContentUri));
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 2
0
        public override async Task <Uri> GenerateVideoContentUrl()
        {
            if (DmcWatchResponse == null)
            {
                return(null);
            }

            if (DmcWatchResponse.Video.DmcInfo == null)
            {
                return(null);
            }

            VideoContent videoQuality = Video;

            if (Video == null)
            {
                return(null);
            }

            try
            {
                // 直前に同一動画を見ていた場合には、動画ページに再アクセスする
                DmcSessionResponse clearPreviousSession = null;
                if (_DmcSessionResponse != null && DmcWatchEnvironment != null)
                {
                    if (_DmcSessionResponse.Data.Session.RecipeId.EndsWith(RawVideoId))
                    {
                        clearPreviousSession = _DmcSessionResponse;
                        _DmcSessionResponse  = null;
                        _DmcWatchResponse    = await HohoemaApp.NiconicoContext.Video.GetDmcWatchJsonAsync(RawVideoId, DmcWatchEnvironment.PlaylistToken);

                        videoQuality = Video;
                    }
                }

                _DmcSessionResponse = await HohoemaApp.NiconicoContext.Video.GetDmcSessionResponse(DmcWatchResponse, videoQuality);

                if (_DmcSessionResponse == null)
                {
                    return(null);
                }

                if (clearPreviousSession != null)
                {
                    await HohoemaApp.NiconicoContext.Video.DmcSessionExitHeartbeatAsync(DmcWatchResponse, clearPreviousSession);
                }

                return(new Uri(_DmcSessionResponse.Data.Session.ContentUri));
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        private async Task OpenProgressiveMp4Async(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);
            // Try open media
            using (var mediaSource = MediaSource.CreateFromUri(session.Data.Session.ContentUri))
            {
                await mediaSource.OpenAsync();
            }
        }
Exemplo n.º 4
0
        protected override async Task <Uri> GetVideoContentUri()
        {
            if (DmcWatchResponse == null)
            {
                return(null);
            }

            if (DmcWatchResponse.Video.DmcInfo == null)
            {
                return(null);
            }

            if (VideoContent == null)
            {
                return(null);
            }

            try
            {
                // 直前に同一動画を見ていた場合には、動画ページに再アクセスする
                DmcSessionResponse clearPreviousSession = null;
                if (_DmcSessionResponse != null)
                {
                    if (_DmcSessionResponse.Data.Session.RecipeId.EndsWith(DmcWatchResponse.Video.Id))
                    {
                        clearPreviousSession = _DmcSessionResponse;
                        _DmcSessionResponse  = null;
                        DmcWatchResponse     = await _Context.Video.GetDmcWatchJsonAsync(DmcWatchResponse.Video.Id, _DmcWatchData.DmcWatchEnvironment.PlaylistToken);
                    }
                }

                _DmcSessionResponse = await _Context.Video.GetDmcSessionResponse(DmcWatchResponse, VideoContent);

                if (_DmcSessionResponse == null)
                {
                    return(null);
                }

                if (clearPreviousSession != null)
                {
                    await _Context.Video.DmcSessionExitHeartbeatAsync(DmcWatchResponse, clearPreviousSession);
                }

                return(new Uri(_DmcSessionResponse.Data.Session.ContentUri));
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 5
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();
            }
        }
Exemplo n.º 6
0
        private async Task <DmcSessionResponse> GetDmcSessionAsync()
        {
            if (_dmcWatchData?.Media == null)
            {
                return(null);
            }

            if (VideoContent == null)
            {
                return(null);
            }

            try
            {
                // 直前に同一動画を見ていた場合には、動画ページに再アクセスする
                DmcSessionResponse clearPreviousSession = null;
                if (_dmcSessionResponse != null)
                {
                    if (_dmcSessionResponse.Data.Session.RecipeId.EndsWith(_dmcWatchData.Video.Id))
                    {
                        clearPreviousSession = _dmcSessionResponse;
                        _dmcSessionResponse  = null;
                        _dmcWatchData        = await NiconicoSession.ToolkitContext.Video.VideoWatch.GetDmcWatchJsonAsync(_dmcWatchData.Client.WatchId, NiconicoSession.IsLoggedIn, _dmcWatchData.Client.WatchTrackId);
                    }
                }

                _dmcSessionResponse = await NiconicoSession.ToolkitContext.Video.VideoWatch.GetDmcSessionResponseAsync(_dmcWatchData, VideoContent, null, hlsMode : false);

                if (_dmcSessionResponse == null)
                {
                    return(null);
                }

                if (clearPreviousSession != null)
                {
                    await NiconicoSession.ToolkitContext.Video.VideoWatch.DmcSessionExitHeartbeatAsync(_dmcWatchData, clearPreviousSession);
                }
            }
            catch
            {
                return(null);
            }

            return(_dmcSessionResponse);
        }