#asp.net-core #video #ffmpeg #streaming #mp4
#asp.net-core #Видео #ffmpeg #потоковая передача #МР4
Вопрос:
Пролог:
У меня есть ip-камера hikvision, которая транслирует необработанный файл h264 с rtsp: // url, мне нужно воспроизвести эту прямую трансляцию в браузере.
Мне удалось запустить базовый конвейер RTSP-> ffmpeg-> (faststart) mp4, и я могу воспроизводить видео при сохранении в файл.
Я не понимаю, как сделать действие моего контроллера «потоковым».
Я пробовал различные подходы, такие как написание ответа.Тело, передача-кодирование: фрагментировано, но, похоже, ничего не работает. Вот базовый код:
public IActionResult Play5(){
var ms = new MemoryStream();
var muxer = new RTSPToMp4(ms);
Task.Run(() => muxer.Stream());
return new FileStreamResult(ms, "video/mp4");
}
Поток памяти содержит прямую трансляцию, но ответ пуст, вот запрос ответ от chrome:
Запрос
method: GET
:path: /api/stream/play5
:scheme: https
accept: */*
accept-encoding: identity;q=1, *;q=0
accept-language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
cache-control: no-cache
pragma: no-cache
range: bytes=0-
referer: https://localhost:5001/Stream
sec-fetch-dest: video
sec-fetch-mode: no-cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Ответ
content-length: 0
content-type: video/mp4
date: Thu, 08 Oct 2020 14:31:06 GMT
server: Kestrel
status: 200
Я что-то упускаю?
Ответ №1:
MP4 не может транслироваться в прямом эфире.
Самое быстрое решение заключается в том, что вы должны сохранить формат H.264 как есть (не содержащийся в каком-либо файле MP4) и просто использовать любой декодер H.264 на основе JavaScript.