Ejemplo n.º 1
0
 public PreparePlayVideoResult(VideoId contentId, NiconicoSession niconicoSession, PreparePlayVideoFailedReason failedReason, DmcWatchApiData dmcWatchData = null)
     : this(contentId, niconicoSession)
 {
     AvailableQualities = ImmutableArray <NicoVideoQualityEntity> .Empty;
     IsSuccess          = false;
     FailedReason       = failedReason;
     _dmcWatchData      = dmcWatchData;
 }
Ejemplo n.º 2
0
 public PreparePlayVideoResult(VideoId contentId, NiconicoSession niconicoSession, NicoVideoSessionOwnershipManager ownershipManager, DmcWatchApiData dmcWatchData)
     : this(contentId, niconicoSession)
 {
     _ownershipManager = ownershipManager;
     _dmcWatchData     = dmcWatchData;
     IsSuccess         = _dmcWatchData != null;
     if (_dmcWatchData?.Media.Delivery is not null and var delivery)
     {
         AvailableQualities = delivery.Movie.Videos
                              .Select(x => new NicoVideoQualityEntity(x.IsAvailable, QualityIdToNicoVideoQuality(x.Id), x.Id, (int)x.Metadata.Bitrate, (int)x.Metadata.Resolution.Width, (int)x.Metadata.Resolution.Height))
                              .ToImmutableArray();
     }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public DmcVideoStreamingSession(string qualityId, DmcWatchApiData res, NiconicoSession niconicoSession, NicoVideoSessionOwnershipManager.VideoSessionOwnership videoSessionOwnership, bool forCacheDownload = false)
            : base(niconicoSession, videoSessionOwnership)
        {
            _dmcWatchData     = res;
            _forCacheDownload = forCacheDownload;
            QualityId         = qualityId;
            Quality           = res.ToNicoVideoQuality(qualityId);

#if DEBUG
            Debug.WriteLine($"Id/Bitrate/Resolution/Available");
            foreach (var q in _dmcWatchData.Media.Delivery.Movie.Videos)
            {
                Debug.WriteLine($"{q.Id}/{q.Metadata.Bitrate}/{q.IsAvailable}/{q.Metadata.Resolution}");
            }
#endif

            VideoContent = _dmcWatchData.Media.Delivery.Movie.Videos.FirstOrDefault(x => x.Id == qualityId);

            if (VideoContent != null)
            {
                Debug.WriteLine($"{VideoContent.Id}/{VideoContent.Metadata.Bitrate}/{VideoContent.IsAvailable}/w={VideoContent.Metadata.Resolution.Width} h={VideoContent.Metadata.Resolution.Height}");
            }
        }
Ejemplo n.º 5
0
 internal DmcVideoDetails(DmcWatchApiData dmcWatchData)
 {
     _dmcWatchRes = dmcWatchData;
     Tags         = _dmcWatchRes.Tag.Items.Select(x => new NicoVideoTag(x.Name)).ToArray();
 }