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); }
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(); } }
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!"); } }