public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { FrameBufferData frame = null; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { if (keyFrame) { ms.Write(NALUnitHeader, 0, NALUnitHeader.Length); } int i2 = 0, i = data.Length; while (i2 < i) { byte[] nalu = GetNALU(data, i2); ms.Write(NALUSpliter, 0, 3); ms.Write(nalu, 0, nalu.Length); i2 += (nalu.Length + NALULength); } //ms.Position = 0; frame = new FrameBufferData(ms.GetWindowsRuntimeBuffer(), timeCode, duration, keyFrame, discardable, invisible); } return(frame); }
public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { FrameBufferData frame = null; frame = new FrameBufferData(decoder.Decode(data), timeCode, duration, keyFrame, discardable, invisible); return(frame); }
public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { if (keyFrame) { //ms.Write(NALUnitHeader, 0, NALUnitHeader.Length); } var frame = new FrameBufferData(data, timeCode, duration, keyFrame, discardable, invisible); return(frame); }
void mkvStreamSource_SampleRequested(MediaStreamSource sender, MediaStreamSourceSampleRequestedEventArgs args) { MediaStreamSample sample = null; MediaStreamSourceSampleRequest request = args.Request; MediaStreamSourceSampleRequestDeferral deferal = request.GetDeferral(); try { var mkvFs = mediaStreamFileSource as CCPlayer.HWCodecs.Matroska.MKV.MKVFileSource; FrameBufferData fd = mkvFs.GetFrameData(request.StreamDescriptor); if (fd.Data != null) { sample = MediaStreamSample.CreateFromBuffer(fd.Data, fd.TimeCode); sample.Duration = fd.Duration; sample.KeyFrame = fd.KeyFrame; //자막을 검색하여 추가 MessengerInstance.Send <Message>(new Message("SubtitleFrameInMKV", mkvFs.SubtitleFrames), TransportControlViewModel.NAME); } else if (System.Diagnostics.Debugger.IsAttached) { //NUll이 보고되면 자연스럽게 종료처리가 됨. 즉, MediaEnded Event가 발생함. System.Diagnostics.Debug.WriteLine("***************************** null이 보고 되었음. 종료 코드가 들어옴 => MediaElement의 MediaEndedEvent 발생될 것임."); } request.Sample = sample; } catch (Exception e) { System.Diagnostics.Debug.WriteLine("********************************** 샘플오류 또는 강제 종료 => MediaStreamSource의 Closed 이벤트가 발생될 것임 : " + e.Message); //Close 이벤트 발생 sender.NotifyError(MediaStreamSourceErrorStatus.DecodeError); } finally { if (deferal != null) { deferal.Complete(); } } }
public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { //V_MS/VFW/FOURCC ///VIDEOINFOHEADER2 videoInfoHeader = new /// byte[] newData = null; //else { //newData = data; // System.Diagnostics.Debug.WriteLine(keyFrame + ":" + BitConverter.ToString(data).Replace("-", string.Empty)); MemoryStream ms = new MemoryStream(); ms.Write(data, 0, data.Length); //ms.Write(videoPrivateData.GetUserData2(), 0, videoPrivateData.GetUserData2().Length); newData = ms.ToArray(); ms.Dispose(); } var frame = new FrameBufferData(newData, timeCode, duration, keyFrame, discardable, invisible); return(frame); }
public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { //flacInfo.MaxFrameSize, flacInfo.MinFrameSize, data.Length, flacInfo.MaxBlockSize, flacInfo.MinBlockSize); byte[] flacData = data; using (System.IO.MemoryStream src = new System.IO.MemoryStream(data, 0, data.Length)) { src.Position = 0; WaveOverFlacStream flacStream = new WaveOverFlacStream(flacInfo, src); using (var flacDataStream = new System.IO.MemoryStream()) { //byte[] b = new byte[data.Length]; byte[] b = new byte[16384]; while (true) { int i = flacStream.Read(b, 0, b.Length); if (i > 0) { flacDataStream.Write(b, 0, i); } else { flacDataStream.Position = 0; break; } } flacData = flacDataStream.ToArray(); } } FrameBufferData frame = new FrameBufferData(flacData, timeCode, duration, keyFrame, discardable, invisible); //System.Diagnostics.Debug.WriteLine(frame.TimeCode); return(frame); }