Jaki jest najlepszy sposób obliczenia długości pliku flv za pomocą php bez zewnętrznych zależności, takich jak ffmpege, ponieważ strona klienta działa na współdzielonym hostingu, itry http://code.google.com/p/flv4php/, ale wyodrębnia metadane, a nie wszystkie wideo zawierają metadane?obliczyć długość pliku wideo flv? za pomocą czystego php
Odpowiedz
Jest niezbyt skomplikowany sposób, aby to zrobić.
Pliki FLV mają specyficzną strukturę danych, która umożliwia ich analizowanie w odwrotnej kolejności, zakładając, że plik jest dobrze sformułowany.
Po prostu otwórz plik i wyszukaj 4 bajty przed końcem pliku.
Otrzymasz dużą, 32-bitową wartość endianu, która reprezentuje rozmiar tagu tuż przed tymi bajtami (pliki FLV składają się z tagów). Możesz użyć funkcji unpack
ze specyfikacją formatu "N".
Następnie możesz odszukać liczbę znalezionych bajtów, prowadząc do początku ostatniego znacznika w pliku.
Tag zawiera następujące pola:
- jeden bajt sygnalizacji typ znacznika
- duży endian 24 bitowa liczba całkowita reprezentująca długość ciała tego znacznika (powinna być wartość znalazłeś wcześniej, minus 11 ... jeśli nie, to coś jest nie tak)
- duża endianowa 24-bitowa liczba całkowita reprezentująca znacznik czasu znacznika w pliku, w milisekundach plus 8-bitowa liczba całkowita wydłużająca znacznik czasu do 32 bitów.
Wszystko co musisz zrobić to pominąć pierwsze 32 bity i rozpakować ("N", ...) wartość znacznika czasu, którą przeczytałeś.
Ponieważ czas trwania tagu FLV jest zazwyczaj bardzo krótki, powinien dać dość dokładny czas trwania pliku.
Oto przykładowy kod:
$flv = fopen("flvfile.flv", "rb");
fseek($flv, -4, SEEK_END);
$arr = unpack('N', fread($flv, 4));
$last_tag_offset = $arr[1];
fseek($flv, -($last_tag_offset + 4), SEEK_END);
fseek($flv, 4, SEEK_CUR);
$t0 = fread($flv, 3);
$t1 = fread($flv, 1);
$arr = unpack('N', $t1 . $t0);
$milliseconds_duration = $arr[1];
Dwa ostatnie fseek można factorized, ale zostawiłem je zarówno dla jasności.
Edit: Poprawiono kod po pewnym testów
Będę studiować twoją odpowiedź, dzięki – shox
- 1. Oblicz szerokość i wysokość Flv i Swf za pomocą C#
- 2. Jak przekonwertować wideo .flv do formatu .h264 za pomocą FFmpeg?
- 3. Jak zabezpieczyć film wideo mp4 i flv
- 4. FFMpeg - Tworzenie miniatury pliku wideo
- 5. Projektowanie logo za pomocą czystego CSS
- 6. Odtwórz wideo za pomocą AVPlayer
- 7. Tworzenie pliku wsadowego za pomocą komendy "IF"
- 8. "Długość zawartości zbyt długa" podczas przesyłania pliku za pomocą Tornado
- 9. Dostęp do właściwości pliku za pomocą PHP
- 10. Nie można przesłać pliku za pomocą php
- 11. Zapisywanie pliku za pomocą curl i PHP
- 12. Jak wymusić pobranie pliku za pomocą php?
- 13. Oczyszczanie kodu HTML za pomocą PHP w celu utworzenia czystego łańcucha
- 14. Przesyłanie wideo za pomocą iPhone'a
- 15. Nagrywanie wideo za pomocą AVFoundation
- 16. Jak usunąć jedną ścieżkę z pliku wideo za pomocą ffmpeg?
- 17. Kompresja wideo za pomocą FFMPEG i JNI
- 18. Jak obliczyć pochodną za pomocą Numpy?
- 19. JMeter - obliczyć zmienną za pomocą innej zmiennej
- 20. Najbardziej skuteczny sposób ustawiania stylu za pomocą czystego javascript?
- 21. Uzyskaj wartość wybranego elementu dla zdarzenia za pomocą czystego JavaScriptu
- 22. Generowanie losowego koloru za pomocą czystego CSS (bez javascript)?
- 23. Jak przeciągnąć obraz płynnie po ekranie za pomocą czystego javascript
- 24. Jak uzyskać drzewo w HTML za pomocą czystego CSS
- 25. Powiąż zdarzenie z elementem za pomocą czystego kodu JavaScript
- 26. Jak zaimplementować pole tekstowe za pomocą czystego przycisku w WPF?
- 27. Sprawdź długość pola za pomocą awk
- 28. Komponowanie wideo i audio za pomocą AVMutableComposition
- 29. Apache, PHP Niepoprawna długość zawartości
- 30. Parsing Nagłówek FLV (czas trwania) zdalnego pliku w Javie
Czy oznacza to długość wideo w minutach/sekundach? –
tak, to właśnie mam na myśli .. – shox
Spec jest tutaj: http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf Nie można go przebrnąć, ale nie ma trywialnego zadania. – Wrikken