PHP FFMPEG - не работает поток RTSP на IOS

World! Этот код выполняет команду для ffmpeg на получение потока с камеры, копирует его и выводит в mp4.


if (isset($_REQUEST["get"])) {
    header('Accept-Ranges:bytes');
    header('Connection:keep-alive');
        
    if (ffmpeg_getVersion()[0] >= 5) {$timeout_opt = "-timeout {$timeout}";}else {$timeout_opt = "-stimeout {$timeout}";}
    
    $rtsp = $ncrypt->decrypt($_REQUEST["a"]); // Ссылка на основной поток
    
    if (substr($rtsp, 0, 7) !== "rtsp://") die('RTSP URL is invalid!');
    $ffmpeg_base = "{$ffmpeg_path} -rtsp_transport {$rtsp_transport} -probesize 32 {$timeout_opt} -i \"{$rtsp}\" -loglevel quiet";
    
    if (isset($_REQUEST["c"])) {
        $rtsp_lq = $ncrypt->decrypt($_REQUEST["c"]);  // Ссылка на доп поток
        
        if (substr($rtsp_lq, 0, 7) !== "rtsp://") die('RTSP URL (sub/second stream) is invalid!');
        $ffmpeg_base_lq = "{$ffmpeg_path} -rtsp_transport {$rtsp_transport} -probesize 32 {$timeout_opt} -i \"{$rtsp_lq}\" -loglevel quiet";
    }else {
        $ffmpeg_base_lq = $ffmpeg_base;
    }

    switch ($_REQUEST["get"]) {
        case "mp4":
            disableBrowserCaching();
            header('Content-type: video/mp4');
            passthru("{$ffmpeg_base} -t {$duration_limit} -c copy -an -movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof -f mp4 pipe:");
        break;
    }
    
}

Таким образом я подгружаю поток - просто гет запросом элементом

<video id="videobox" controlsList="nodownload nofullscreen " autoplay muted playsinline preload="metadata" poster="player_loading.png">
            <source src="?get=mp4&a='.$rtsp_url.'&c='.$rtsp_lq_url.'" type="video/mp4">
            <p>Ваш браузер не поддерживает видео в формате MP4.</p>
        </video>

Это работает для десктопных браузеров (опера, хром, яндекс), а так же для android устройств, но если открывать это под IOS (тестирую на iphone 14) - ни с одного браузера не проигрывается. До этого пробовал через библиотеку Video.js, и там была ошибка о невозможности воспроизвести поток. Я предполагаю, что дело в команде для ffmpeg, может кто-то сталкивался с подобным?

UPD:

Обнаружил, что при выполнении команды без "-f mp4 pipe:" passthru("{$ffmpeg_base} -t {$duration_limit} -c copy -an -movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof XXXXXXXX"); если вместо XXXXX выводить out.mp4, после чего открыть файл в браузере на IOS - файл прекрасно воспроизводится, проблема именно при выдаче потока -f mp4 pipe:


Ответы (0 шт):