Медиа из MemoryStream не отображается (или не воспроизводится) - PullRequest
1 голос
/ 10 апреля 2020

В приложении C# я использую LibVL C через пакеты NuGet.

Я создал MemoryStream и передал его Media:

MemoryStream buffer = new MemoryStream();
bool playing = false;

public void dataArrived(byte[] d) {
  buffer.Write(d, 0, d.Length);
  if (!playing) {
    playing = true;
    mediaPlayer.Play(new Media(LibVLC, buffer));
  }
}

Теперь dataArrived is вызывается, когда данные поступают из сети (это прямой эфир). Данные - это действительный поток mp4 (фрагментированный, хорошо воспроизводится в HTML5 видео).

Однако VL C не отображает его. В журнале я вижу много сообщений о предварительной загрузке:

prefetch stream debug: end of stream

VL C может читать и выводить блоки, однако есть сообщение (отладка, а не ошибка!), Которое может быть интересно:

mp4 demux debug: unrecognized major media specification (iso5).

Тогда есть еще один интересный пакет сообщений:

mp4 demux warning: cannot select track[Id 0x1]
main input debug: EOF reached
main decoder debug: killing decoder fourcc `h264'
main decoder debug: removing module "avcodec"
main demux debug: removing module "mp4"
mp4 demux debug: freeing all memory
main input debug: Program doesn't contain anymore ES

Есть ли какой-нибудь трюк (конфиг) для LibVL C для воспроизведения фрагментированного mp4 на лету (данные недоступны заранее)?

А может, MemoryStream - неправильный выбор для этой цели?

1 Ответ

1 голос
/ 10 апреля 2020

MemoryStream не подходит для живого потока, потому что он сигнализирует об окончании потока, потому что не может знать, что новые данные будут добавлены позже.

Используйте вашу собственную реализацию Stream или создайте свой собственный MediaInput.

Будьте осторожны, кажется, вы используете более старую версию LibVLCSharp. Более новый API не использует Stream напрямую, но для его работы требуется MediaInput.

Если вам удастся заставить его работать, хотели бы вы представить образец живого потока в LibVLCSharp? Это особенность, о которой нас спрашивают.

...