В приложении 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
- неправильный выбор для этой цели?