Moje rozumienie fragmentacji mp4 polega na tym, że jest to pojedynczy plik, ale wewnętrznie ma strukturę fragmentów. Czy ktoś może mi wyjaśnić, jak te fragmenty mogą być adresowane w pliku .mpd dla DASH? Pliki .mpd, które widziałem, wydają się adresować różne segmenty z osobnymi adresami URL, ale fragmentaryczne MP4, jak sądzę, musiałoby być adresowane przez przesunięcia bajtów do tego samego adresu URL. W jaki sposób przeglądarka wie, jakie czasy odpowiadają zakresom bajtów?MPEG-DASH i fragmentaryczny mp4
Odpowiedz
Oto główny profil MPEG DASH o nazwie example mpd. Plik mp4 opisany przez ten MPD jest fragmentarycznym MP4. Jak widać:
<SegmentURL media="bunny_15s_200kbit/bunny_200kbit_dashNonSeg.mp4" mediaRange="868-347185"/>
<SegmentURL media="bunny_15s_200kbit/bunny_200kbit_dashNonSeg.mp4" mediaRange="347186-664464"/>
Na <SegmentURL>
elementu, fragmenty mogą być adresowane do tej samej zawartości, i można znaleźć offsety bajtowe w atrybucie @mediaRange
.
Serwer ma manifest, który można utworzyć, skanując plik w poszukiwaniu skrzynek moof. Moof + mdat = jeden fragment. Po wysłaniu żądania fragmentu, przesunięcie pliku jest wyświetlane w manifeście i zwracane są poprawne pola.
Czy manifest mówisz tylko o manifeście (pliku .mpd) wysłanym do klienta? Gdziekolwiek czytałem o DASH, jedynym manifestem, o którym mówią, jest ten wysłany do klienta, więc nie wiedziałem że istnieje oddzielna, z której korzysta serwer, czy możesz wskazać mi odniesienie? – bhh1988
Moje doświadczenie jest w silverlight, jest to inny format manifestu, ale ten sam format pliku wideo W silverlight podajesz manifest serwera (ism) Jednak manifest został wygenerowany przez skanowanie pliku multimedialnego, zakładam, że manifest jest generowany przez serwer i przechowywany w pamięci dla kreska, ale ty jesteś rytuałem, którego nie jestem w 100% pewien. – szatmary
O ile rozumiem ... W przypadku profilu DASH "onDemand", zadaniem paczki DASH jest utworzenie pliku * .mpd (manifest) i określenie, które zakresy bajtów mapują do segmentu (może być wiele fragmentów). Następnie klient ładuje plik * .mpd i wysyła żądania w zakresie bajtów http dla zakresów w manifeście. Myślę, że profil "na żywo" DASH jest bardziej podobny do płynnego przesyłania strumieniowego, ponieważ każdy segment ma adres URL.
Jeśli chcesz dowiedzieć się, jaka jest pozycja fragmentów w kontenerze mp4, uważam, że ta informacja znajduje się w polu segmentu "sidx".
Plik .mpd zawiera listę segmentów z ich zakresami bajtów, jak pokazano powyżej. Aby uzyskać dostęp do segmentów, musisz przeanalizować atrybut mediarange dla każdej linii i poprosić o coś podobnego do XHR z setRequestHeader, aby określić zakres bajtów. Dzięki tej metodzie nie jest potrzebny żaden komponent serwerowy. Oto niektóre kodu używam:
var xhr = new XMLHttpRequest();
// Range is in format of 1234-34567
// url is the .mp4 file path
if (range || url) { // make sure we've got content in our params
xhr.open('GET', url);
xhr.setRequestHeader("Range", "bytes=" + range);
xhr.send();
xhr.responseType = 'arraybuffer';
try {
// watch the ready state
xhr.addEventListener("readystatechange", function() {
if (xhr.readyState == 4) { //wait for video to load
// add response to buffer
try {
// videoSource is a sourceBuffer on your mediaSource object.
videoSource.appendBuffer(new Uint8Array(xhr.response));
videoSource.onreadystatechange = function() {
if (videoSource.readyState == videoSource.done) {
videoElement.play();
}
};
} catch (e) {
// fail quietly
}
}
}, false);
Wydaje się, że teraz ma support for HLS directly as well ffmpeg.
- 1. Android: odczytywanie i zapisywanie metadanych .mp4 -Tag
- 2. Jak zabezpieczyć film wideo mp4 i flv
- 3. MP4 nieobsługiwany w JavaFX?
- 4. Format pliku MP4 Specyfikacja
- 5. Wyodrębnianie klatek z MP4/FLV?
- 6. Naprawianie uszkodzonego pliku wideo MP4
- 7. Korygowanie kolorów Wideo MP4/Webm
- 8. ffmpeg 2.4.2 Łączyć pliki mp4
- 9. Konwertowanie HLS (m3u8) na MP4
- 10. Prześlij wideo i przekonwertuj do .mp4 online w .net
- 11. Tworzenie wideo C# MP4 z obrazów i plików MP3
- 12. Przesyłanie strumieniowe plików wideo MP4 na Gstreamer
- 13. Lista odtwarzania wideo MP4 dla iPhone'a
- 14. Transmisja na żywo za pośrednictwem MP4
- 15. Streaming wideo MP4 przez .NET HTML5
- 16. WebM do konwersji mp4 przy użyciu ffmpeg
- 17. Android VideoView Nie można odtworzyć wideo mp4
- 18. Tworzenie plików mp4 na Androidzie używając Jcodec
- 19. Jak odtwarzać filmy MP4 z serwisu YouTube?
- 20. Nie można odtwarzać filmów MP4 w AVPlayer
- 21. Jak znaleźć datę nagrania wideo (.AVI .MP4)?
- 22. Jak odtwarzać filmy HTML5 mp4 na Androida?
- 23. mutagen: jak wykrywać i umieszczać okładki albumów w formacie mp3, flac i mp4
- 24. chrome może odtwarzać wideo mp4 w html5, ale html5test powiedział, że chrome nie obsługuje kodeku wideo mp4
- 25. Jak zmniejszyć rozmiar MP4 za pomocą biblioteki FFMPEG do Androida
- 26. Jak owinąć plik h.264 jako mp4 na iOS
- 27. Co oznaczają znaczniki metadanych MP4, takie jak "gssd" lub "gsst"?
- 28. Kolejna: zmuś Chrome do pełnego buforowania wideo mp4
- 29. H.264 Muxed do MP4 przy użyciu libavformat nie odtwarza
- 30. Najszybszy sposób na tworzenie animowanych gifów z mp4
Widzę, że nikt nie odpowiedział na część 2 twojego pytania "Jak przeglądarka wie, jakie czasy odpowiadają zakresom bajtów?" :( –