예제 #1
0
        public MediaStreamSource CreateMediaStreamSource(ICodec audioCodec)
        {
            //디폴트 비디오 트랙의 코덱
            var currentVideoCodec = UsableMediaCodecs.FirstOrDefault(x => x.CodecType == TrackTypes.Video && x.TrackEntry.FlagDefault == 1);

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

            MediaStreamSource = CreateMediaStreamSource(currentVideoCodec, audioCodec);

            return(MediaStreamSource);
        }
예제 #2
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);
            }
        }