Пытаюсь скачать кусок трансляции по адресу Live
Получаю ошибку 401. Когда качаю с помощью ffmpeg то все ок, но ffmpeg очень медленный и требует чтоб файл сразу перекодировался. Хочу качать куски вот так:
var url = @"http://mlsh.co:2086/live/jake/jake1/26685.m3u8";
WebClient webClient = new WebClient();
webClient.DownloadFile(new Uri(url), @"c:\output.ts");
Как обойти эту ошибку?
Если у вас открывается что то и где то, то надо это приложение изучить, к примеру отловив все его запросы через какую либо программу, к примеру, Fiddler
.
Допустим, открываем указанную ссылку в плеере (в моем случае это IP-TV Player
), смотрим отправленный запрос (вы их не пропустите, обычно если это поток, то запросов летит куча):
Смотрим заголовки запроса:
GET http://178.132.6.125/live/jak....... HTTP/1.1
Host: 178.132.6.125
User-Agent: VLC/2.2.8 LibVLC/2.2.8
Range: bytes=0-
Connection: close
Icy-MetaData: 1
Обычно этого достаточно для того, что бы получить необходимый доступ, в некоторых случаях доступ может быть скрыт в Cookies
, которые мы отправляем серверу.
Давайте попробуем отправить элементарный запрос с подменой User-Agent
заголовка:
WebClient client = new WebClient();
client.Headers.Add("user-agent", "VLC/2.2.8 LibVLC/2.2.8");
client.DownloadFile("http://mlsh.co:2086/live/jake/jake1/26685.m3u8", "test.m3u8");
В Fiddler
видим два запроса, отправленный нами со статусом 302
(редирект) и 2-ой запрос со статусом 200
(успешно). Проверяем наш скачанный файл и видим, что он успешно получен.
Вот собственно и все, простейшая подмена заголовков открыла нам доступ к необходимому адресу. Удачи!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли dash replacement service подключить к проекту xamarin forms ?
Есть программа, которая, используя метод ConsoleReadLine(), вводит строку, содержащую три числа через пробел — сумму, процентную ставку (в процентах)...
Необходимо чтобы Клиент передавал данные(переменные) Серверу, а Сервер отвечал на запрос