Still getting Unable to add one or more frames to the frame collector (Logged only once a minute). Error code = 5 errors.
Code now looks like this:
internal class MIPDriver2VideoStreamSession : BaseMIPDriver2StreamSession
{
public MIPDriver2VideoStreamSession(ISettingsManager settingsManager, MIPDriver2ConnectionManager connectionManager, Guid sessionId, string deviceId, Guid streamId) :
base(settingsManager, connectionManager, sessionId, deviceId, streamId)
{
// TODO: Set Channel to correct channel number
Channel = 1;
start();
}
private Queue<PanoptechFrame> _queue = new Queue<PanoptechFrame>(10000);
private DateTime _lastSyncTimestamp;
private int frames;
private long lastSecond;
private async void start()
{
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
Toolbox.Log.LogDebug("Panoptech Driver", "Starting");
var uri = new Uri("rtsp://---/rtsp/live");
var connectionParameters = new ConnectionParameters(uri);
connectionParameters.RtpTransport = RtpTransportProtocol.TCP;
connectionParameters.ReceiveTimeout = TimeSpan.FromSeconds(120);
using (var rtspClient = new RtspClient(connectionParameters))
{
PanoptechFrame panoptechFrame;
rtspClient.FrameReceived += (sender, frame) =>
{
switch (frame)
{
case RawH264IFrame iframe:
_sequence++;
frames++;
_lastSyncTimestamp = iframe.Timestamp;
// Toolbox.Log.LogDebug("Panoptech Driver", "New IFrame");
panoptechFrame = new PanoptechFrame(
_sequence, iframe.FrameSegment.Array, _lastSyncTimestamp, iframe.Timestamp, true
);
_queue.Enqueue(panoptechFrame);
break;
case RawH264PFrame pframe:
_sequence++;
frames++;
// Toolbox.Log.LogDebug("Panoptech Driver", "New PFrame");
panoptechFrame = new PanoptechFrame(
_sequence, pframe.FrameSegment.Array, _lastSyncTimestamp, pframe.Timestamp, true
);
_queue.Enqueue(panoptechFrame);
break;
}
};
await rtspClient.ConnectAsync(token);
await rtspClient.ReceiveAsync(token);
}
}
protected override bool GetLiveFrameInternal(TimeSpan timeout, out BaseDataHeader header, out byte[] data)
{
header = null;
data = null;
if (_queue.Count <= 0) {
return false;
}
long now = DateTimeOffset.Now.ToUnixTimeMilliseconds();
PanoptechFrame frame = _queue.Dequeue();
data = frame.Data;
if (data == null || data.Length == 0) {
return false;
}
if (now - lastSecond > 1000)
{
lastSecond = now;
Toolbox.Log.LogDebug("Panoptech Driver", "{0} frames in queue ({1} fps)", _queue.Count, frames);
frames = 0;
}
else
{
Toolbox.Log.LogDebug("Panoptech Driver", "{0} frames in queue", _queue.Count);
}
header = new VideoHeader()
{
CodecType = VideoCodecType.H264,
Length = (ulong) data.Length,
SequenceNumber = frame.Sequence,
SyncFrame = frame.Keyframe,
TimestampSync = frame.SyncTimestamp,
TimestampFrame = frame.FrameTimestamp
};
return true;
}
And the driver logs look like:
2021-03-31 10:37:20.820+01:00 INFO - Panoptech Driver: 1 frames in queue (27 fps) (8192 data length)
2021-03-31 10:37:20.820+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:20.913+01:00 INFO - Panoptech Driver: 2 frames in queue (8192 data length)
2021-03-31 10:37:20.913+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:20.913+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.054+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.054+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.054+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.132+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.163+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.179+01:00 INFO - Panoptech Driver: 0 frames in queue (16384 data length)
2021-03-31 10:37:21.273+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.273+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.351+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.351+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.429+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.429+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.507+01:00 INFO - Panoptech Driver: 2 frames in queue (8192 data length)
2021-03-31 10:37:21.507+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.507+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.585+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.648+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.726+01:00 INFO - Panoptech Driver: 2 frames in queue (8192 data length)
2021-03-31 10:37:21.726+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.726+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.804+01:00 INFO - Panoptech Driver: 1 frames in queue (8192 data length)
2021-03-31 10:37:21.804+01:00 INFO - Panoptech Driver: 0 frames in queue (8192 data length)
2021-03-31 10:37:21.866+01:00 INFO - Panoptech Driver: 1 frames in queue (27 fps) (8192 data length)
So we’re getting frames at a regular pace, of the right size and is being taken from the queue. Any help would be appreciated as we still don’t know what the error code (Unable to add one or more frames to the frame collector) means.
Thanks,
Patrick