/// <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); var probeSize = EncodingUtils.GetProbeSizeArgument(inputFiles.Length); string analyzeDuration; if (request.AnalyzeDurationSections > 0) { analyzeDuration = "-analyzeduration " + (request.AnalyzeDurationSections*1000000).ToString(CultureInfo.InvariantCulture); } else { analyzeDuration = EncodingUtils.GetAnalyzeDurationArgument(inputFiles.Length); } probeSize = probeSize + " " + analyzeDuration; probeSize = probeSize.Trim(); return GetMediaInfoInternal(GetInputArgument(inputFiles, request.Protocol), request.InputPath, request.Protocol, extractChapters, probeSize, request.MediaType == DlnaProfileType.Audio, request.VideoType, 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<Model.MediaInfo.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); }
public 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, }; 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) { mediaSourceInfo.Bitrate = info.Bitrate; mediaSourceInfo.Container = info.Container; mediaSourceInfo.Formats = info.Formats; mediaSourceInfo.MediaStreams = info.MediaStreams; mediaSourceInfo.RunTimeTicks = info.RunTimeTicks; mediaSourceInfo.Size = info.Size; mediaSourceInfo.Timestamp = info.Timestamp; mediaSourceInfo.Video3DFormat = info.Video3DFormat; mediaSourceInfo.VideoType = info.VideoType; mediaSourceInfo.RequiresClosing = true; mediaSourceInfo.RequiresOpening = true; mediaSourceInfo.SupportsDirectPlay = true; mediaSourceInfo.SupportsDirectStream = true; mediaSourceInfo.SupportsTranscoding = true; mediaSourceInfo.DefaultSubtitleStreamIndex = null; if (!originalRuntime.HasValue) { mediaSourceInfo.RunTimeTicks = null; } var audioStream = mediaSourceInfo.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Audio); if (audioStream == null || audioStream.Index == -1) { mediaSourceInfo.DefaultAudioStreamIndex = null; } else { mediaSourceInfo.DefaultAudioStreamIndex = audioStream.Index; } } else { _logger.Error("[TVHclient] Cannot probe {0} stream", source); } }