Пытаюсь скачать кусок трансляции по адресу 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 (успешно). Проверяем наш скачанный файл и видим, что он успешно получен.
Вот собственно и все, простейшая подмена заголовков открыла нам доступ к необходимому адресу. Удачи!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей