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); }
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); } }