Воспроизведение входящего видеопотока через FFMPEG (C#) - PullRequest
0 голосов
/ 20 января 2020

Я создаю приложение, которое захватывает экран компьютера в режиме реального времени и передает его в удаленное приложение через сокеты для просмотра. Я играю видео с помощью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...