Pracuję nad prostym systemem przesyłania wideo i kompresji i obecnie używam następującego procesu.

Pierwszy krok

Używam multipart/form-data, aby przesłać oryginalny plik wideo, który przechowuję w /var/www/site/videos_pre/video.mp4. Mój folder publiczny to var/www/site/public_html/. Przechowuję wpis w mojej bazie danych z informacjami wideo.

Drugi krok

Mam proces konwertera, który jest bardzo prosty, ale wykonuje pracę (przynajmniej w CLI).

Ma następujący kod:

public function converter($content_id)
{
    $content = $this->videos_m->get($content_id);

    $id = uniqid();
    $name_mp4 = $content->name_slug.'_'.$id.'.mp4';
    $name_webm = $content->name_slug.'_'.$id.'.webm';

    $command_mp4 = 'ffmpeg -i ../videos_pre/'.$content->original_file.' -b:v 1500k -bufsize 1500k ./videos/'.$name_mp4;
    system($command_mp4);

    $command_webm = 'ffmpeg -i ./videos/'.$name_mp4.' -c:v vp9 -c:a libvorbis ./videos/'.$name_webm;
    system($command_webm);

    $update_video = new stdClass();
    $update_video->archivo_mp4 = $name_mp4;
    $update_video->archivo_webm = $name_webm;

    $this->db->where('content_id', $content_id);
    $this->db->update('Videos', $update_video);
}

trzeci krok - gdzie występuje problem

Przetestowałem to w systemie Windows 10 i Ubuntu 18.04. Kod działa na systemie Windows 10 zarówno w PHP, jak i CLI. Kod na Ubuntu działa tylko z CLI.

Powstałe polecenia są takie:

// First command to reduce the bitrate of the mp4
ffmpeg -i /var/www/site/videos_pre/video.mp4 -b:v 1500k -bufsize 1500k /var/www/site/public_html/videos/video_5e757d3e0d762.mp4

// Second command to convert the mp4 to a webm to get both types
ffmpeg -i /var/www/site/public_html/videos/video_5e757d3e0d762.mp4 -c:v vp9 -c:a libvorbis /var/www/site/public_html/videos/video_5e757d3e0d762.webm

Jeśli wykonuję te polecenia, które doskonale pracują. Jeśli uruchomię skrypt PHP, czy jesteś w przeglądarce lub przez CLI, dosłownie nic się nie dzieje. Brak komunikatów o błędach nic.

Nie jestem pewien, czy to kwestia pozwolenia, jeśli pHP jest coś konkretnego, czy niektóre moduł, którego nie aktywowałem. Mam wystarczającą ilość czasu wykonania, mam to 600 sekund, ale jak powiedziałem, to nawet nie zajmuje czas, to nie robi nic.

Mogę nawet echo polecenia i pojawiają się. Zasadniczo problem polega na tym, że muszę być w stanie uruchomić te polecenia z PHP. Zrobiłem to w oknach, ale Ubuntu 18.04 nie pozwolę mi. Oba OSS mają ostatnio zainstalowane ffmpeg i udało mi się konwertować na obu.

Próbowałem zmieniać ścieżki od absolutnego do krewnego, w ogóle nie ma różnicy.

0
Mihail Minkov 21 marzec 2020, 05:48

1 odpowiedź

Najlepsza odpowiedź

Udało mi się to rozwiązać, a to okazuje się problem z uprawnieniami.

Miłego folderu /var/www/site z prawami prawnymi: myuser:www-data. Po sprawdzeniu Ta odpowiedź W podobnym problemie zmieniłem pozwolenie na folder na www-data:root i natychmiast działał.

Mam nadzieję, że zmiana pozwolenia nie wpływa na resztę rzeczy, ale na teraz wszystko działa dobrze.

0
Mihail Minkov 22 marzec 2020, 23:18