Я создаю приложение, которое захватывает экран компьютера в режиме реального времени и передает его в удаленное приложение через сокеты для просмотра. Я играю видео с помощью ffmpeg (с привязками для c#) с пользовательским контекстом ввода-вывода, который читает непосредственно из сокета.
Проблема, с которой я столкнулся, заключается в том, что ffmpeg по какой-то причине продолжает предполагать произвольную длину видео, например, иногда 0,256 с, иногда 10 с, иногда 3 с, независимо от того, какое сообщение ... Сообщение, похожее на это:
VIDEO - Start Time: 0.000; Duration: 0.251
Timing Offsets - Main Component: Video; Start Time: 0.000; Duration: 0.251;
После этого времени воспроизведение прекращается .. Как сделать так, чтобы оно не имело заданной продолжительности, а просто продолжало читать новые данные ??
После некоторой отладки кода я не увидеть любые функции чтения, вызываемые во время воспроизведения видео ... оно просто читает несколько раз, прежде чем определить длину, воспроизводит, а затем останавливает ..
Мой код:
public int Read(void* opaque, byte* targetBuffer, int targetBufferLength)
{
lock (ReadLock)
{
try
{
var readCount = BackingStream.Read(ReadBuffer, 0, ReadBuffer.Length);
if (readCount > 0)
Marshal.Copy(ReadBuffer, 0, (IntPtr)targetBuffer, readCount);
return readCount;
}
catch (Exception)
{
return ffmpeg.AVERROR_EOF;
}
}
}
public long Seek(void* opaque, long offset, int whence)
{
return -1; //Network stream, no seeking here..
}
Любой помощь приветствуется: D