Pracuję nad usługą telewizji internetowej. Jednym z celów jest to, aby wideo było odtwarzane bez dodatkowych wtyczek do przeglądarek (z wyjątkiem Flasha).Transmisja na żywo za pośrednictwem MP4
Postanowiłem użyć MP4, ponieważ jest obsługiwany przez większość przeglądarek HTML5 i Flash (w zastępstwie). Filmy są transkodowane z ASF na serwerze przez FFMpeg.
Jednak znalazłem, że MP4 nie może być transmitowany na żywo, ponieważ ma atom moov dla metadanych, które muszą określać długość. FFMpeg nie może bezpośrednio przesyłać strumienia mp4 na standardowe wyjście, ponieważ umieszcza moov na końcu pliku. (Live transcoding and streaming of MP4 works in Android but fails in Flash player with NetStream.Play.FileStructureInvalid error)
Oczywiście istnieje MPEG-TS, ale nie jest obsługiwany przez HTML5 <video>
.
To, o czym pomyślałem, to metoda transkodowania strumienia w czasie rzeczywistym na MP4 i na każde nowe żądanie HTTP dla niego, najpierw wyślij moov, który określa bardzo długi numer dla długości filmu, a następnie zacznij wysyłać reszta pliku MP4.
Czy można używać MP4 do przesyłania strumieniowego w ten sposób?
Po kilku badaniach i odpowiedzi av501, rozumiem, że rozmiary ramek muszą być znane, aby mogły działać.
Czy plik MP4 można podzielić na mniejsze części, aby można było przesyłać strumieniowo?
Oczywiście przełączenie na inny kontener/format jest opcją, ale jedynym formatem zgodnym zarówno z Flash, jak i HTML5 jest mp4/h264, więc jeśli będę musiał obsługiwać oba, będę musiał dwukrotnie transkodować.
Oto dobre wytłumaczenie, zaczynające brzmieć jak rtmp lub jakiś niestandardowy protokół jest drogą do przejścia http://fabiensanglard.net/mobile_progressive_playback/index.php –
Twoja odpowiedź jest zastrzeżona, została napisana powyżej. Czas jest kwestią strumieniowego przesyłania i odtwarzania. więc -1 – agfe2