コード例 #1
0
ファイル: VideoEncode.cs プロジェクト: vzolotov/WebSharp
        private void HandleEncoderFrame(object sender, VideoFrameInfo videoFrameInfo)
        {
            var result = videoFrameInfo.Result;

            if (result == PPError.Aborted)
            {
                videoTrack.RecycleFrame(encoderTrackFrame);
                return;
            }
            if (result != PPError.Ok)
            {
                videoTrack.RecycleFrame(encoderTrackFrame);
                LogError(result, $"Cannot get video frame from video encoder {videoFrameInfo.VideoFrame} / {encoderTrackFrame}");
                return;
            }

            encoderTrackFrame.GetSize(out frameSize);

            if (frameSize != encoderSize)
            {
                videoTrack.RecycleFrame(encoderTrackFrame);
                LogError(PPError.Failed, "MediaStreamVideoTrack frame size incorrect");
                return;
            }

            if (CopyVideoFrame(videoFrameInfo.VideoFrame, encoderTrackFrame) == PPError.Ok)
            {
                EncodeFrame(videoFrameInfo.VideoFrame);
            }
            videoTrack.RecycleFrame(encoderTrackFrame);
        }
コード例 #2
0
ファイル: VideoEncode.cs プロジェクト: vzolotov/WebSharp
        void OnTrackFrame(object sender, VideoFrameInfo frameInfo)
        {
            var result = frameInfo.Result;

            if (result == PPError.Aborted)
            {
                return;
            }

            if (currentTrackFrame != null && !currentTrackFrame.IsEmpty)
            {
                videoTrack.RecycleFrame(currentTrackFrame);
                currentTrackFrame.Detach();
            }

            if (result != PPError.Ok)
            {
                LogError(result, "Cannot get video frame from video track");
                return;
            }

            currentTrackFrame = new VideoFrame(frameInfo.VideoFrame);
            if (IsReceivingTrackFrames)
            {
                videoTrack.GetFrame();
            }
        }
コード例 #3
0
        private void AnalyseV1(string frameLine, List <VideoFrameInfo> videoFrameList)
        {
            // Get elements
            // elements[0] first frame
            // elememts[1] last frame
            // elements[2] framerate
            string[] elements = frameLine.Split(new string[] { "," }, StringSplitOptions.None);

            // Check for valid elements
            if (elements.Length == 3)
            {
                // Calculate FrameInfo data
                if (!int.TryParse(elements[0], out int start))
                {
                    throw new Exception("Could not parse V1 timecodes!");
                }
                if (!int.TryParse(elements[1], out int end))
                {
                    throw new Exception("Could not parse V1 timecodes!");
                }

                for (int i = start; i <= end; i++)
                {
                    VideoFrameInfo tmp = new VideoFrameInfo
                    {
                        Number    = i,
                        FrameRate = elements[2].ParseDecimal()
                    };

                    if (i == 0)
                    {
                        tmp.StartTime = 0.0m;
                    }
                    else
                    {
                        tmp.StartTime = videoFrameList[i - 1].Duration + videoFrameList[i - 1].StartTime;
                    }

                    // Add FrameInfo to FrameList
                    videoFrameList.Add(tmp);
                }
            }
            else
            {
                throw new Exception("Invalid format v1 timecodes!");
            }
        }