/// <summary> /// Gets the media info. /// </summary> /// <param name="request">The request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task <MediaInfo> GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken) { var extractChapters = request.MediaType == DlnaProfileType.Video && request.ExtractChapters; var inputFiles = MediaEncoderHelpers.GetInputArgument(FileSystem, request.MediaSource.Path, request.MediaSource.Protocol, request.MountedIso, request.PlayableStreamFileNames); var probeSize = EncodingHelper.GetProbeSizeArgument(inputFiles.Length); string analyzeDuration; if (request.MediaSource.AnalyzeDurationMs > 0) { analyzeDuration = "-analyzeduration " + (request.MediaSource.AnalyzeDurationMs * 1000).ToString(); } else { analyzeDuration = EncodingHelper.GetAnalyzeDurationArgument(inputFiles.Length); } probeSize = probeSize + " " + analyzeDuration; probeSize = probeSize.Trim(); var forceEnableLogging = request.MediaSource.Protocol != MediaProtocol.File; return(GetMediaInfoInternal(GetInputArgument(inputFiles, request.MediaSource.Protocol), request.MediaSource.Path, request.MediaSource.Protocol, extractChapters, probeSize, request.MediaType == DlnaProfileType.Audio, request.MediaSource.VideoType, forceEnableLogging, cancellationToken)); }
/// <summary> /// Gets the media info. /// </summary> /// <param name="request">The request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task <MediaInfo> GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken) { var extractChapters = request.MediaType == DlnaProfileType.Video && request.ExtractChapters; var inputFile = request.MediaSource.Path; string analyzeDuration = string.Empty; if (request.MediaSource.AnalyzeDurationMs > 0) { analyzeDuration = "-analyzeduration " + (request.MediaSource.AnalyzeDurationMs * 1000).ToString(); } var forceEnableLogging = request.MediaSource.Protocol != MediaProtocol.File; return(GetMediaInfoInternal( GetInputArgument(inputFile, request.MediaSource), request.MediaSource.Path, request.MediaSource.Protocol, extractChapters, analyzeDuration, request.MediaType == DlnaProfileType.Audio, request.MediaSource.VideoType, forceEnableLogging, cancellationToken)); }
/// <summary> /// Gets the media info. /// </summary> /// <param name="request">The request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task <MediaInfo> GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken) { var extractChapters = request.MediaType == DlnaProfileType.Video && request.ExtractChapters; var inputFiles = MediaEncoderHelpers.GetInputArgument(FileSystem, request.InputPath, request.Protocol, request.MountedIso, request.PlayableStreamFileNames); return(GetMediaInfoInternal(GetInputArgument(inputFiles, request.Protocol), request.InputPath, request.Protocol, extractChapters, GetProbeSizeArgument(inputFiles, request.Protocol), request.MediaType == DlnaProfileType.Audio, request.VideoType, cancellationToken)); }
private async Task ProbeStream(MediaSourceInfo mediaSourceInfo, string probeUrl, string source, CancellationToken cancellationToken) { _logger.Info("[TVHclient] Probe stream for {0}", source); _logger.Info("[TVHclient] Probe URL: {0}", probeUrl); MediaInfoRequest req = new MediaInfoRequest { MediaType = MediaBrowser.Model.Dlna.DlnaProfileType.Video, InputPath = probeUrl, Protocol = MediaProtocol.Http, ExtractChapters = false, VideoType = VideoType.VideoFile, // currently not available !!! // RequiredHttpHeaders = mediaSourceInfo.RequiredHttpHeaders, }; var originalRuntime = mediaSourceInfo.RunTimeTicks; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); MediaInfo info = await _mediaEncoder.GetMediaInfo(req, cancellationToken).ConfigureAwait(false); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); _logger.Info("[TVHclient] Probe RunTime " + elapsedTime); if (info != null) { _logger.Info("[TVHclient] Probe returned:"); mediaSourceInfo.Bitrate = info.Bitrate; _logger.Info("[TVHclient] BitRate: " + info.Bitrate); mediaSourceInfo.Container = info.Container; _logger.Info("[TVHclient] Container: " + info.Container); mediaSourceInfo.Formats = info.Formats; _logger.Info("[TVHclient] Formats: "); LogStringList(info.Formats, " "); mediaSourceInfo.MediaStreams = info.MediaStreams; _logger.Info("[TVHclient] MediaStreams: "); LogMediaStreamList(info.MediaStreams, " "); mediaSourceInfo.RunTimeTicks = info.RunTimeTicks; _logger.Info("[TVHclient] RunTimeTicks: " + info.RunTimeTicks); mediaSourceInfo.Size = info.Size; _logger.Info("[TVHclient] Size: " + info.Size); mediaSourceInfo.Timestamp = info.Timestamp; _logger.Info("[TVHclient] Timestamp: " + info.Timestamp); mediaSourceInfo.Video3DFormat = info.Video3DFormat; _logger.Info("[TVHclient] Video3DFormat: " + info.Video3DFormat); mediaSourceInfo.VideoType = info.VideoType; _logger.Info("[TVHclient] VideoType: " + info.VideoType); mediaSourceInfo.RequiresClosing = true; _logger.Info("[TVHclient] RequiresClosing: " + true); mediaSourceInfo.RequiresOpening = true; _logger.Info("[TVHclient] RequiresOpening: " + true); mediaSourceInfo.SupportsDirectPlay = true; _logger.Info("[TVHclient] SupportsDirectPlay: " + true); mediaSourceInfo.SupportsDirectStream = true; _logger.Info("[TVHclient] SupportsDirectStream: " + true); mediaSourceInfo.SupportsTranscoding = true; _logger.Info("[TVHclient] SupportsTranscoding: " + true); mediaSourceInfo.DefaultSubtitleStreamIndex = null; _logger.Info("[TVHclient] DefaultSubtitleStreamIndex: n/a"); if (!originalRuntime.HasValue) { mediaSourceInfo.RunTimeTicks = null; _logger.Info("[TVHclient] Original runtime: n/a"); } var audioStream = mediaSourceInfo.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Audio); if (audioStream == null || audioStream.Index == -1) { mediaSourceInfo.DefaultAudioStreamIndex = null; _logger.Info("[TVHclient] DefaultAudioStreamIndex: n/a"); } else { mediaSourceInfo.DefaultAudioStreamIndex = audioStream.Index; _logger.Info("[TVHclient] DefaultAudioStreamIndex: '" + info.DefaultAudioStreamIndex + "'"); } } else { _logger.Error("[TVHclient] Cannot probe {0} stream", source); } }