示例#1
0
 public async Task <ActionResult <PlaybackInfoResponse> > GetPlaybackInfo([FromRoute, Required] Guid itemId, [FromQuery, Required] Guid userId)
 {
     return(await _mediaInfoHelper.GetPlaybackInfo(
                itemId,
                userId)
            .ConfigureAwait(false));
 }
示例#2
0
        public async Task <ActionResult> GetUniversalAudioStream(
            [FromRoute, Required] Guid itemId,
            [FromRoute, Required] string?container,
            [FromQuery] string?mediaSourceId,
            [FromQuery] string?deviceId,
            [FromQuery] Guid?userId,
            [FromQuery] string?audioCodec,
            [FromQuery] int?maxAudioChannels,
            [FromQuery] int?transcodingAudioChannels,
            [FromQuery] long?maxStreamingBitrate,
            [FromQuery] long?startTimeTicks,
            [FromQuery] string?transcodingContainer,
            [FromQuery] string?transcodingProtocol,
            [FromQuery] int?maxAudioSampleRate,
            [FromQuery] int?maxAudioBitDepth,
            [FromQuery] bool?enableRemoteMedia,
            [FromQuery] bool breakOnNonKeyFrames,
            [FromQuery] bool enableRedirection = true)
        {
            var deviceProfile = GetDeviceProfile(container, transcodingContainer, audioCodec, transcodingProtocol, breakOnNonKeyFrames, transcodingAudioChannels, maxAudioSampleRate, maxAudioBitDepth, maxAudioChannels);

            _authorizationContext.GetAuthorizationInfo(Request).DeviceId = deviceId;

            var authInfo = _authorizationContext.GetAuthorizationInfo(Request);

            _logger.LogInformation("GetPostedPlaybackInfo profile: {@Profile}", deviceProfile);

            if (deviceProfile == null)
            {
                var clientCapabilities = _deviceManager.GetCapabilities(authInfo.DeviceId);
                if (clientCapabilities != null)
                {
                    deviceProfile = clientCapabilities.DeviceProfile;
                }
            }

            var info = await _mediaInfoHelper.GetPlaybackInfo(
                itemId,
                userId,
                mediaSourceId)
                       .ConfigureAwait(false);

            if (deviceProfile != null)
            {
                // set device specific data
                var item = _libraryManager.GetItemById(itemId);

                foreach (var sourceInfo in info.MediaSources)
                {
                    _mediaInfoHelper.SetDeviceSpecificData(
                        item,
                        sourceInfo,
                        deviceProfile,
                        authInfo,
                        maxStreamingBitrate ?? deviceProfile.MaxStreamingBitrate,
                        startTimeTicks ?? 0,
                        mediaSourceId ?? string.Empty,
                        null,
                        null,
                        maxAudioChannels,
                        info !.PlaySessionId !,
                        userId ?? Guid.Empty,
                        true,
                        true,
                        true,
                        true,
                        true,
                        Request.HttpContext.Connection.RemoteIpAddress.ToString());
                }

                _mediaInfoHelper.SortMediaSources(info, maxStreamingBitrate);
            }

            if (info.MediaSources != null)
            {
                foreach (var source in info.MediaSources)
                {
                    _mediaInfoHelper.NormalizeMediaSourceContainer(source, deviceProfile !, DlnaProfileType.Video);
                }
            }

            var mediaSource = info.MediaSources ![0];