示例#1
0
        public MKVFileSource(Document document)
        {
            _Document = document;
            _Segment  = document.Segments[0];
            //활성화된 트랙에서 필요한 코덱리스트를 생성
            var codecs = CodecFactory.Create(_Segment.Tracks[0].TrackEntry.Where(x => x.FlagEnabled == 1).ToList());

            //사용가능한 모든 코덱 추가
            UsableCodecs = codecs.Where(x => x.IsSupported).Cast <KnownCodec>();
            //사용가능한 미디어 코덱만 추가
            UsableMediaCodecs = UsableCodecs.Where(x => x.CodecType == TrackTypes.Video || x.CodecType == TrackTypes.Audio);
            //사용가능한 자막 코덱 리스트를 생성
            UsableSubtitleCodecs = UsableCodecs.Where(x => x.CodecType == TrackTypes.Subtitle);

            //디폴트 비디오 트랙의 코덱
            var videoCodec = UsableMediaCodecs.FirstOrDefault(x => x.CodecType == TrackTypes.Video && x.TrackEntry.FlagDefault == 1);

            if (videoCodec == null)
            {
                videoCodec = UsableMediaCodecs.FirstOrDefault(x => x.CodecType == TrackTypes.Video);
            }

            var audioCodec = UsableMediaCodecs.FirstOrDefault(x => x.CodecType == TrackTypes.Audio && x.TrackEntry.FlagDefault == 1);

            if (audioCodec == null)
            {
                audioCodec = UsableMediaCodecs.FirstOrDefault(x => x.CodecType == TrackTypes.Audio);
            }

            //비디오나 오디오코덱을 사용할 수 없는 경우만 사용 불가능 코덱을 저장
            if (videoCodec == null || audioCodec == null)
            {
                //사용 불가능한 미디어 코덱 저장
                UnusableMediaCodecs = codecs.Where(x => !x.IsSupported && (x.CodecType == TrackTypes.Video || x.CodecType == TrackTypes.Audio));
            }
            else
            {
                UnusableMediaCodecs = new List <ICodec>();
                //디폴트 비디오/오디오 트랙으로 미디어 디스크립터 생성
                CreateMediaStreamSource(audioCodec);
            }
        }
        public void Container_GenericWriterUsingCodecFactoryWithNullCodecName()
        {
            Assert.Throws <ArgumentNullException>(() =>
            {
                const string WriterSchema =
                    @"{
                         ""name"":""RecordContainingArray"",
                         ""type"":""record"",
                         ""fields"":
                                   [
                                        {""name"":""IntField"", ""type"":""int""},
                                   ]
                        }";

                var codecFactory = new CodecFactory();

                using (AvroContainer.CreateGenericWriter(WriterSchema,
                                                         this.resultStream, codecFactory.Create(null)))
                {
                }
            }
                                                  );
        }
示例#3
0
        public void Container_GenericWriterUsingCodecFactoryWithInvalidCodecName()
        {
            const string WriterSchema =
                @"{
                 ""name"":""RecordContainingArray"",
                 ""type"":""record"",
                 ""fields"":
                           [
                                {""name"":""IntField"", ""type"":""int""},
                           ]
             }";

            var codecFactory = new CodecFactory();

            using (AvroContainer.CreateGenericWriter(WriterSchema, this.resultStream, codecFactory.Create("InvalidName")))
            {
            }
        }