Имя: Пароль:
IT
Веб-мастеринг
<video></video> и получение видео частями ASP.NET
0 oleg_km
 
04.05.20
16:58
Упражняюсь в ASP.NET. Есть видео файл mp4 размером например 4 гига. Как его отдавать веб-клиенту частями? Хочу сделать типа локального Youtube
1 vde69
 
04.05.20
17:00
библиотеку поищи...
2 oleg_km
 
04.05.20
17:10
Второй день ищу. Не пойму как сформулировать запрос
3 vde69
 
04.05.20
17:58
4 Сияющий в темноте
 
04.05.20
18:11
отдавать-то нужно не частями,а потоком и клиент уже сам решает насколько быстро нужно получать.
для сервера нужно иметь возможность отдать с производьной точки.
5 oleg_km
 
04.05.20
18:14
(4) Я могу отдать часть файла mp4 с любого места, но похоже <video> так не умеет?

(3) Так я тоже могу
6 Serginio1
 
04.05.20
18:44
7 Serginio1
 
04.05.20
18:46
8 Serginio1
 
04.05.20
18:52
9 Serginio1
 
04.05.20
20:12
10 ProgAL
 
04.05.20
20:22
11 Asmody
 
04.05.20
21:47
в самом простом случае достаточно такого:
ffmpeg -i <файл.mp4> -c:v libx264 -crf 21 -preset veryfast -c:a aac -b:a 128k -ac 2 -f hls -hls_time 4 -hls_playlist_type event stream.m3u8

в результате получится много файлов-слайсов типа stream0.ts, stream1.ts, и т.д. длинной по 4 сек (параметр -hls_time) и плей-лист stream.m3u8
всё это выкладываешь в папку на веб-сервере и отдаешь ссылку на плей-лист
12 oleg_km
 
04.05.20
21:54
(11) Те просто отдавать файл с помощью Range не получится? Типа как здесь в конце:

https://overcoder.net/q/1000624/как-я-могу-потоковое-видео-используя-aspnet-mvc
13 Asmody
 
04.05.20
22:16
(12) Видео нельзя резать просто так. Правильно резать по I-фреймам, иначе будут квадраты на границе чанков. Плюс должна сохраняться синхра между видео и аудио стримами. Резать файлы в реалтайме - это высоконагруженное дело. Для VOD обычно транскодируют и режут заранее. В реалтайм только вещание обрабатывают.
14 oleg_km
 
05.05.20
18:34
(11) Попробовал - проигрывание плейлистов не работает в десктопном хроме, в эдже работает. Но показывает классно, без рывков. Правда это теперь все гопрошные файлы надо нарезать... И качество похоже потерялось исходный размер был 4 гига, стало 1.8 гига
15 Garykom
 
гуру
05.05.20
18:55
(14) За качество вот эта часть отвечает "-c:v libx264 -crf 21 -preset veryfast"
тут перекодировка x264 кодеком с "Constant Rate Factor"=21 и veryfast предустановкой дефолтной

Кстати не всегда меньший размер это ухудшение качества, можно без заметной потери ужать только долго это и железо надо хорошее.
16 Garykom
 
гуру
05.05.20
18:56
(15)+ тут слегка на аглицком https://trac.ffmpeg.org/wiki/Encode/H.265
17 Garykom
 
гуру
05.05.20
18:57
(16)+ сорри 264 же https://trac.ffmpeg.org/wiki/Encode/H.264
18 Serginio1
 
05.05.20
18:57
(14) А ты пробовал (9)
19 Serginio1
 
05.05.20
19:06
20 oleg_km
 
05.05.20
22:08
(18) Байтами отдавать? Пробовал, сначала работало в хроме, не работало в эдже. Потом я причесал код - перестало работать в хроме, но заработало в эдже. Теперь что-то нигде не работает. Похоже я на стороне сервера не могу рассчитывать что браузер сам запросить нужные куски файла и нормально склеит видео. Хотя он же с диска как-то читает.
21 Asmody
 
05.05.20
22:45
(20) почитай про кодирование MPEG, там все не так просто. В мире потокового видео рулят HLS и MPEG DASH.
22 Serginio1
 
06.05.20
13:04
(20) Ну вот в https://odetocode.com/blogs/scott/archive/2018/01/09/streaming-content-in-asp-net-core.aspx

он сам режет

HTTP/1.1 206 Partial Content
Content-Length: 11
Content-Type: video/mp4
Content-Range: bytes 0-10/10630899
Last-Modified: Wed, 14 May 2014 23:39:15 GMT
Accept-Ranges: bytes
ETag: "1cf6fcdb79b6573
23 Serginio1
 
06.05.20
13:45
24 Serginio1
 
06.05.20
14:02
25 mistеr
 
06.05.20
14:13
(0) VLC ставишь, настраиваешь и он стримит тебе все что хочешь.
26 mistеr
 
06.05.20
14:14
Это если "ехать", а не "заморочиться"
27 oleg_km
 
10.05.20
22:01
(24) Попробовал .NET Core 3.1 - все работает из коробки. Да и среда .NET Core как-то больше понравилась, более все логично. Буду переносить на .NET Core 3.1
28 Serginio1
 
11.05.20
21:13
(27) Да .NET Framework конец приходит. Не будет больше развиваться. https://habr.com/ru/company/microsoft/blog/493390/
Мы также работали над этими выпусками, чтобы завершить перенос моделей приложений из .NET Framework. В .NET Core 3 мы перенесли все наиболее используемые модели приложений, а также представили новые кроссплатформенные инфраструктуры вместо тех, которые не были портированы.

В ожидании следующего основного выпуска .NET 5 мы продолжим объединять .NET в единую платформу, включив нашу модель приложения для мобильных устройств .NET (Xamarin) в .NET 5. .NET 5 будет включать ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin и ML.NET. Впервые вся платформа будет использовать унифицированный BCL (библиотеки базовых классов) для всех моделей приложений. Наличие версии 5, которая выше, чем у .NET Core и .NET Framework, также дает понять, что .NET 5 — это будущее .NET, единой унифицированной платформы для создания приложений любого типа.