Exemplo n.º 1
0
        public void DvdInfoContainerTest()
        {
            var expectResult = new[]
            {
                new { Name = "Chapter 01", Time = "00:00:00.000" },
                new { Name = "Chapter 02", Time = "00:17:42.500" },
                new { Name = "Chapter 03", Time = "00:37:14.767" },
                new { Name = "Chapter 04", Time = "00:56:24.167" },
                new { Name = "Chapter 05", Time = "01:12:36.701" },
                new { Name = "Chapter 06", Time = "01:32:26.268" },
                new { Name = "Chapter 07", Time = "01:49:06.136" },
                new { Name = "Chapter 08", Time = "01:49:06.636" }
            };
            string path = @"..\..\[ifo_Sample]\VTS_05_0.IFO";

            if (!File.Exists(path))
            {
                path = @"..\" + path;
            }
            var result = new DvdInfoContainer(path).GetChapterInfo();
            int index  = 0;

            foreach (var chapter in result[0].Chapters)
            {
                Console.WriteLine(chapter);
                expectResult[index].Name.Should().Be(chapter.Name);
                expectResult[index].Time.Should().Be(chapter.Time.Time2String());
                ++index;
            }
        }
Exemplo n.º 2
0
        public void GetDvdTitleList()
        {
            const string strChapters  = "Chapters";
            const string strVideo     = "Video";
            const string strAudio     = "Audio";
            const string strSubtitles = "Subtitles";

            var dvd = new DvdInfoContainer(JobInfo.InputFile);

            foreach (var info in dvd.Titles)
            {
                int videoId     = info.TitleNumber;
                var fps         = info.VideoStream.Framerate;
                var videoFormat = info.VideoStream.VideoStandard.ToString();
                var codec       = _processingService.StringValueOf(info.VideoStream.CodingMode);
                var aspect      = _processingService.StringValueOf(info.VideoStream.AspectRatio);

                var resolution = _processingService.StringValueOf(info.VideoStream.VideoResolution);

                var resolutionArray = resolution.Split(new[] { "x" }, StringSplitOptions.RemoveEmptyEntries);
                int width = 0, height = 0;

                try
                {
                    int.TryParse(resolutionArray[0], out width);
                    int.TryParse(resolutionArray[1], out height);
                }
                catch (Exception ex)
                {
                    Log.Error(ex);
                }

                var letterboxed = _processingService.StringValueOf(info.VideoStream.DisplayFormat);
                int vtsID       = info.TitleSetNumber;

                var duration = DateTime.MinValue.Add(info.VideoStream.Runtime);
                var treeRoot = $"Title: {videoId:0}, Length: {duration.ToString("H:mm:ss.fff")}";

                var treeData = new Dictionary <string, object>
                {
                    { "Name", JobInfo.InputFile },
                    { "TrackID", videoId }
                };
                var root = new StreamTreeNode
                {
                    ID         = _treeNodeID++,
                    Name       = treeRoot,
                    Data       = treeData,
                    Children   = new List <StreamTreeNode>(),
                    IsChecked  = true,
                    IsExpanded = true
                };
                _tree.Add(root);

                var chaptersTree = CreateNode(root, strChapters, null);
                var videoTree    = CreateNode(root, strVideo, null);
                var audioTree    = CreateNode(root, strAudio, null);
                var subTree      = CreateNode(root, strSubtitles, null);

                if (info.Chapters != null && info.Chapters.Count > 0)
                {
                    var chaptersFormat = $"{info.Chapters.Count:0} {strChapters}";
                    CreateNode(chaptersTree, chaptersFormat, info.Chapters);
                }

                var videoStream = $"{codec} {resolution} {aspect} ({letterboxed}) {videoFormat} {fps:0.000} fps";
                var vid         = new VideoInfo
                {
                    VtsId                = vtsID,
                    TrackId              = videoId,
                    StreamId             = 1,
                    Fps                  = fps,
                    Interlaced           = true,
                    Format               = codec,
                    FrameCount           = 0,
                    Width                = width,
                    Height               = height,
                    Encoded              = false,
                    IsRawStream          = false,
                    DemuxStreamNames     = new List <string>(),
                    StreamSize           = 0,
                    Length               = info.VideoStream.Runtime.TotalSeconds,
                    FrameRateEnumerator  = info.VideoStream.FrameRateNumerator,
                    FrameRateDenominator = info.VideoStream.FrameRateDenominator,
                    AspectRatio          = info.VideoStream.AspectRatio == DvdVideoAspectRatio.Aspect4By3 ? 4f / 3f : 16f / 9f
                };

                CreateNode(videoTree, videoStream, vid);

                foreach (var stream in info.AudioStreams)
                {
                    var audioID      = stream.StreamIndex;
                    var langCode     = stream.Language.Code;
                    var language     = stream.Language.Name;
                    var format       = _processingService.StringValueOf(stream.CodingMode);
                    var frequency    = stream.SampleRate;
                    var quantization = _processingService.StringValueOf(stream.Quantization);
                    var channels     = stream.Channels;
                    var content      = _processingService.StringValueOf(stream.Extension);
                    var streamID     = stream.StreamId;

                    var audioStream =
                        $"Track {audioID:0} ({streamID:0}), {langCode} ({language} - {content}), {format} {channels:0} Channels {frequency:0} Hz, {quantization}";

                    var aud = new AudioInfo
                    {
                        Format        = format,
                        FormatProfile = string.Empty,
                        Id            = audioID,
                        StreamId      = streamID,
                        LangCode      = langCode,
                        TempFile      = string.Empty,
                        OriginalId    = audioID,
                        Delay         = 0,
                        Bitrate       = 0,
                        SampleRate    = frequency,
                        ChannelCount  = channels,
                        ShortLang     = langCode,
                        StreamSize    = 0,
                        IsHdStream    = false
                    };

                    CreateNode(audioTree, audioStream, aud);
                }

                foreach (var stream in info.SubtitleStreams)
                {
                    var subID    = stream.StreamIndex;
                    var langCode = stream.Language.Code;
                    var language = stream.Language.Name;
                    var content  = _processingService.StringValueOf(stream.Extension);
                    var streamID = stream.StreamId;

                    var subtitleStream = $"Track {subID:0} ({streamID:0}), {langCode} ({language} - {content})";

                    var subInfo = new SubtitleInfo
                    {
                        Id         = subID + info.AudioStreams.Count,
                        StreamId   = streamID,
                        TempFile   = string.Empty,
                        LangCode   = langCode,
                        Format     = "VobSub",
                        Delay      = 0,
                        StreamSize = 0
                    };

                    CreateNode(subTree, subtitleStream, subInfo);
                }
            }

            int longestTrack =
                dvd.Titles.Single(
                    info => info.VideoStream.Runtime == dvd.Titles.Max(infoLocl => infoLocl.VideoStream.Runtime))
                .TitleNumber;

            _defaultSelection = longestTrack - 1;
        }