private void Seek(long mediaPosition, double playbackRate, bool seekToSyncPoint)
        {
            viewer.Stop();
            lock (seekingLock)
            {
                // Seek to the closest video sync point in the file.
                fileParser.Seek(ref mediaPosition);

                if (!seekToSyncPoint)
                {
                    // make viewer preroll all samples before this position
                    viewer.SetStartTime((long)mediaPosition);
                }

                if (playbackRate != viewer.PlaybackRate)
                {
                    viewer.PlaybackRate = playbackRate;
                }

                if (CurrentPlaybackState == Enum_VideoPlaybackState.Paused)
                {
                    viewer.Pause();
                }
                else
                {
                    viewer.Start();
                }
            }
        }
Beispiel #2
0
        void RenderThread(object obj)
        {
            IntPtr hWnd = (IntPtr)obj;

            AxisMediaViewer viewer = new AxisMediaViewer();

            viewer.VMR9 = true;

            try
            {
                using (FileStream inFileStream = new FileStream(videoPath, FileMode.Open)) using (BinaryReader inFile = new BinaryReader(inFileStream, Encoding.UTF32))
                    {
                        if (inFile.PeekChar() != -1)
                        {
                            int    mediaTypeSize   = inFile.ReadInt32();
                            byte[] mediaTypeBuffer = inFile.ReadBytes(mediaTypeSize);

                            long startPosition = inFile.BaseStream.Position;

                            while (true)
                            {
                                viewer.Init(1, mediaTypeBuffer, hWnd.ToInt64());

                                viewer.Start();

                                while (inFile.PeekChar() != -1)
                                {
                                    // Read frame data
                                    int    sampleType  = inFile.ReadInt32();
                                    int    sampleFlags = inFile.ReadInt32();
                                    ulong  startTime   = inFile.ReadUInt64();
                                    ulong  stopTime    = inFile.ReadUInt64();
                                    int    bufferSize  = inFile.ReadInt32();
                                    byte[] bufferBytes = inFile.ReadBytes(bufferSize);
                                    // Check that it’s not an audio sample.
                                    if (sampleType != (int)AMV_VIDEO_SAMPLE_TYPE.AMV_VST_MPEG4_AUDIO)
                                    {
                                        // Let the viewer render the frame
                                        viewer.SetVideoPosition(VideoXPos, VideoYPos, VideoXPos + VideoWidth, VideoYPos + VideoHeight);
                                        viewer.RenderVideoSample(sampleFlags, startTime, stopTime, bufferBytes);
                                    }
                                }

                                inFile.BaseStream.Position = startPosition;

                                viewer.Stop();
                            }
                        }
                        else
                        {
                            Console.WriteLine(string.Format("File at {0} is empty or malformed", videoPath));
                            Environment.Exit(0);
                        }
                    }
            }
            catch (COMException e)
            {
                MessageBox.Show(string.Format("Exception {0}", e.Message));
            }
        }
 private void Axis_VideoColse()
 {
     if (parser != null)
     {
         if (parser.Status == (int)AMP_STATUS.AMP_STATUS_RUNNING)
         {
             parser.Stop();
             viewer.Stop();
         }
         if (CurrentVideoPlaySet.VideoRecordEnable && lstVideoRecord.Count > 0)
         {
             Axis_GenerateRecord(CurrentVideoPlaySet.VideoRecordFilePath);
         }
         parser.OnVideoSample    -= OnVideoSample;
         parser.OnAudioSample    -= OnAudioSample;
         parser.OnMetaDataSample -= OnMetaDataSample;
         parser.OnError          -= OnError;
         viewer.OnDecodedImage   -= OnDecodedImage;
         Marshal.FinalReleaseComObject(viewer);
         viewer = null;
         Marshal.FinalReleaseComObject(parser);
         parser            = null;
         VideoRecordStatus = false;
     }
 }
Beispiel #4
0
        void renderThreadDoUpdate(object obj)
        {
            if (!File.Exists(m_videoPath))
            {
                Console.WriteLine("startRenderThread: Could not find file {0}, exiting", m_videoPath);
                throw new Exception("File Not Found");
            }

            using (FileStream inFileStream = new FileStream(m_videoPath, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader inFile = new BinaryReader(inFileStream, Encoding.UTF32))
                {
                    if (inFile.PeekChar() == -1)
                    {
                        Console.WriteLine("startRenderThread: file {0} is empty, exiting", m_videoPath);
                        throw new Exception("File is Empty");
                    }

                    IntPtr hWnd            = (IntPtr)obj;
                    int    mediaTypeSize   = inFile.ReadInt32();
                    byte[] mediaTypeBuffer = inFile.ReadBytes(mediaTypeSize);
                    long   headerOffset    = inFileStream.Position; // save the width of the header so we don't read it again.

                    while (true)
                    {
                        AxisMediaViewer viewer = new AxisMediaViewer();
                        viewer.VMR9 = true;

                        try
                        {
                            viewer.Init(0, mediaTypeBuffer, hWnd.ToInt64());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Got Exception initializing player: {0} exiting", e);
                            throw new Exception("Failed to Initialize Player");
                        }

                        viewer.SetVideoPosition(m_videoXPos, m_videoYPos, m_videoXPos + m_videoWidth, m_videoYPos + m_videoHeight);
                        viewer.Start();

                        while (inFile.PeekChar() != -1)
                        {
                            // Read frame data
                            int    sampleType  = inFile.ReadInt32();
                            int    sampleFlags = inFile.ReadInt32();
                            ulong  startTime   = inFile.ReadUInt64();
                            ulong  stopTime    = inFile.ReadUInt64();
                            int    bufferSize  = inFile.ReadInt32();
                            byte[] bufferBytes = inFile.ReadBytes(bufferSize);

                            if (sampleType != (int)AMV_VIDEO_SAMPLE_TYPE.AMV_VST_MPEG4_AUDIO && bufferSize > 0)
                            {
                                try
                                {
                                    viewer.RenderVideoSample(sampleFlags, startTime, stopTime, bufferBytes);
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine("Caught Exception {0} when trying to render frame.", e);
                                }
                            }
                        }

                        inFileStream.Position = headerOffset;
                        viewer.Stop();
                    }
                }
            }
        }