Jak omówiono w artykule previous question, zbudowałem prototyp (za pomocą interfejsu API MVC, NAudio i NAudio.Lame), który przesyła na żywo dźwięk niskiej jakości po konwersji na format mp3. Źródłem strumienia jest PCM: 8K, 16-bit, mono i korzystam z tagu dźwiękowego html5.HTML5 <audio> zły wybór na transmisję na żywo?
Na zarówno Chrome i IE11 jest 15-34 sekund opóźnienie (latency wysokiej) przed dźwięku z przeglądarki, która, jak mi powiedziano, jest nie do przyjęcia dla użytkowników końcowych. Idealnie opóźnienie to nie więcej niż 5 sekund. Opóźnienie występuje nawet w przypadku użycia atrybutu preload = "none" w moim znaczniku audio.
Przyjrzyjmy się bliżej problemowi, wygląda na to, że obie przeglądarki: nie rozpoczną odtwarzania dźwięku, dopóki nie otrzymają ~ 32K danych dźwiękowych. Mając to na uwadze, mogę wpływać na opóźnienie, zmieniając ustawienie bitrate Lame'a MP3. Jeśli jednak zmniejszę opóźnienie (przesyłając więcej danych do przeglądarki o tę samą długość dźwięku), wprowadzę później przerwy audio.
Przykłady:
- Jeśli za pomocą kodowania V0 lame za opóźnienie wynosi prawie 34 sekund co wymaga prawie 0.5 MB źródła dźwięku.
- Jeśli używam kodowania Lame ABR_32, mogę zmniejszyć opóźnienie do 10-15 sekund, ale będę doświadczać przerw i przerw w sesji odsłuchowej.
Pytania:
- Wszelkie pomysły jak mogę zminimalizować opóźnienie rozruchu (latencji)?
- Czy powinienem dalej badać różne "presety" Lame'a w nadziei na wybranie "właściwego"?
- Czy to możliwe, że MP3 to , a nie najlepszy format na transmisję na żywo?
- Czy przejście na pomoc Ogg/Vorbis (lub Ogg/OPUS)?
- Czy potrzebujemy, aby porzucić znacznik dźwiękowy HTML5 i użyć Flasha lub apletu Java?
Dzięki.