TGViewer
PHP задачи с собеседований PHP задачи с собеседований @phpquiz · 2.88K subscribers
Post #1517 1.07K
❓Вопрос от пользователя

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:

PHP задачи с собеседований
More from @phpquiz
  1. Oct 15, 2026👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефо…
  2. Oct 15, 2026Post #2427
  3. Sep 15, 2026Что будет результатом кода? 👍 — world hello 👾— FiberError 🥰— hellohello world ❤️— hello…
  4. Aug 4, 2026Post #2419
  5. Jul 29, 2026Post #2417
  6. Jul 27, 2026Когда название файла уже само по себе считается техническим долгом 👇
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →