Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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();
                }
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }