Как получить полный URL-адрес mp4, чтобы воспроизвести видео из его фактического местоположения в моем приложении, используя какой-то другой источник, кроме Youtube. API gdata/youtube устарел, поэтому у меня проблемы. Любая помощь будет оценена. Спасибо.
Как получить URL-адрес mp4 для видео Youtube с помощью API Youtube v3
Ответ 1
я сделал очень простой API: https://gist.github.com/el3zahaby/9e60f1ae3168c38cc0f0054c15cd6a83
Например: ссылка на видео YouTube: https://www.youtube.com/watch?v= YGCLs9Bt_KY
сейчас, чтобы получить прямую ссылку
вам нужно вызвать API, как это:
https://script-url.com/?url=https://www.youtube.com/watch?v=YGCLs9Bt_KY
возвращает:
[
{
"url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&signature=81D86D3BC3D34D8A3B865464BE7BC54F34C1B0BC.7316033C2DD2F65E4D345CFA890257B63D7FE2A2&mt=1522999783&expire=1523021537&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&requiressl=yes&ei=gSLHWvuxDMOUVYaTqYgB&dur=244.204&pl=22&itag=22&ip=185.27.134.50&lmt=1522960451860848&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&ratebypass=yes&ms=au%2Conr&fvip=2&source=youtube&mv=m&ipbits=0&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&mime=video%2Fmp4&c=WEB&initcwndbps=710000",
"quality": "hd720",
"itag": "22",
"type": "video\/mp4; codecs=\"avc1.64001F, mp4a.40.2\""
},
{
"url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&itag=43&ratebypass=yes&fvip=2&ipbits=0&mime=video%2Fwebm&initcwndbps=710000&signature=71DC48B9BF4B2E3ED46FE0A4CD36FE027DACF31E.4624B7B4BCB947336CEB029E9958B136F79759EB&clen=24203231&requiressl=yes&dur=0.000&pl=22&ip=185.27.134.50&lmt=1522961642553275&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
"quality": "medium",
"itag": "43",
"type": "video\/webm; codecs=\"vp8.0, vorbis\""
},
{
"url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&itag=18&ratebypass=yes&fvip=2&ipbits=0&mime=video%2Fmp4&initcwndbps=710000&signature=C83DE33E3DC80981A65DB3FE4E6B3A48BF7500E4.361D0EE6210B30D3D3A80F43228DEF1BD20691A4&clen=15954979&requiressl=yes&dur=244.204&pl=22&ip=185.27.134.50&lmt=1522960340235683&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
"quality": "medium",
"itag": "18",
"type": "video\/mp4; codecs=\"avc1.42001E, mp4a.40.2\""
},
{
"url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&itag=36&fvip=2&ipbits=0&mime=video%2F3gpp&initcwndbps=710000&signature=3E993D911492DA039A16BB26182ACDC6C6A04FCC.BFB9728C71CD03970B0F15AFD51A7355F9D3F899&clen=6759799&requiressl=yes&dur=244.273&pl=22&ip=185.27.134.50&lmt=1522957367267598&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
"quality": "small",
"itag": "36",
"type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&itag=17&fvip=2&ipbits=0&mime=video%2F3gpp&initcwndbps=710000&signature=810D13A2C507A4EA220E6DA895B39B237FA22DAF.898D020851087CF3C10BC6E3ED7360736A239904&clen=2443931&requiressl=yes&dur=244.273&pl=22&ip=185.27.134.50&lmt=1522957365473654&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
"quality": "small",
"itag": "17",
"type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
}
]
Обновить:
чтобы увидеть исходный код:
GIST: https://gist.github.com/el3zahaby/9e60f1ae3168c38cc0f0054c15cd6a83
Ответ 2
Просто нашел этот полезный онлайн-инструмент:
https://weibomiaopai.com/online-video-downloader/youtube
Он имеет даже API, который можно использовать (в соответствии с политикой справедливого использования).
https://uploadbeta.com/api/video/?cached&video=https://www.youtube.com/watch?v=A4HnJWou-zA
возвращает:
{"host":"youtube.com","url":"https:\/\/r7---sn-aigllnzz.googlevideo.com\/videoplayback?mime=video%2Fmp4&key=yt6&nh=IgpwcjAzLmxocjE0KgkxMjcuMC4wLjE&ratebypass=yes&dur=572.023&clen=50056536&ei=h4USWJWFD6jgigaznbKQAg&source=youtube&initcwndbps=1032500&requiressl=yes&ipbits=0&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&lmt=1449751349064477&ms=au&itag=18&mt=1477608646&upn=u_oP6elD68k&mv=m&id=o-AELeRAI92RCDYH53_v2FnLLEcougM-nuCT4rjkJjheds&gir=yes&pl=19&expire=1477630439&mm=31&ip=78.157.200.133&mn=sn-aigllnzz&signature=B148629A698BB964393DF0BE595E7A8EAF8B73AC.719EFB797D2829AC81AEDDB3683D895040EE33D9"}
Документация по API: https://weibomiaopai.com/download-video-parser.php#api
Ответ 3
Для Local на Java/Android, вот как я достиг этого, кредит переходит к @abdo-el-zahaby. Я преобразовал его php-скрипт в ~ эквивалентный java-код, который использует okhttp-клиент для получения URL-адресов.
final String videoInfoUrl = "http://www.youtube.com/get_video_info?video_id=some_video_id&el=embedded&ps=default&eurl=&gl=US&hl=en";
Request request = new Request.Builder()
.cacheControl(CacheControl.FORCE_NETWORK)
.url(videoInfoUrl)
.build();
final Response response = okHttpClient.newCall(request).execute();
InputStream inputStream = response.body().byteStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
final StringBuilder contentBuilder = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
contentBuilder.append(line);
}
final String streamKey = "url_encoded_fmt_stream_map";
final Map<String, String> map = new HashMap<>();
final String content = contentBuilder.toString();
String[] ampSplit = content.split("&");
for (String s : ampSplit) {
printDivider();
final String[] equalsPlit = s.split("=");
if (equalsPlit.length >= 2) {
String key;
String value;
key = equalsPlit[0];
value = equalsPlit[1];
map.put(key, value);
}
printDivider();
}
int count = 0;
if (map.containsKey(streamKey)) {
String[] streams = map.get(streamKey).split(",");
for (String stream : streams) {
String[] streamSplit = stream.split("&");
for (String s : streamSplit) {
printDivider();
final String urlDecoded = URLDecoder.decode(s, "UTF-8");
String[] details = urlDecoded.split(",");
for (String detail : details) {
System.out.println("Detail " + URLDecoder.decode(detail, "UTF-8"));
final String urlContent= URLDecoder.decode(detail, "UTF-8");
final String url = urlContent.substring(urlContent.indexOf("http"), urlContent.indexOf(";"));
mp4Url.put(Integer.toString(count++), url);
}
}
printDivider();
}
}
Это код, который я использую для загрузки и хранения в SDCard/внутренней памяти
Request request = new Request.Builder()
.cacheControl(CacheControl.FORCE_NETWORK)
.url(url)
.build();
final Response response = okHttpClient.newCall(request).execute();
InputStream inputStream = response.body().byteStream();
final File newFile = new File(location);
boolean created = newFile.createNewFile();
System.out.println(location + " new file created: " + created);
byte[] buff = new byte[4096];
long downloaded = 0;
long target = response.body().contentLength();
System.out.println("File size is: " + Long.toString(target));
OutputStream outStream = new FileOutputStream(newFile);
while (true) {
int read = inputStream.read(buff);
if (read == -1) {
break;
}
outStream.write(buff, 0, read);
//write buff
downloaded += read;
}
System.out.println("Target: " + target +", Downloaded: " + downloaded);
outStream.flush();
Ответ 4
Извините, сэр, вы не можете сделать это с помощью youtube api v3. вы должны использовать URL-адрес youtube, который не является api, но здесь вы можете получить все видеоролики, связанные с этим. Видеть http://www.youtube.com/get_video_info?&video_id= '. $My_id '&. ASV = 3 & эль = detailpage & гл = ru
Или вы можете сделать, чтобы получить ссылку на скачивание видео, даже если она закрыта или не разрешена для вашей страны 1-й: перейдите на любую веб-страницу ссылки видео youtube https://www.youtube.com/watch?v=9mdJV5-eias
2nd: просмотр источника этой страницы
3: 188 или 187, где вы найдете исходные коды Javascript, где также доступно местоположение видео с форматом mp4.
Вы можете сделать вторую идею через simplehtmldom и некоторые php-функции. и первый из них можно получить, используя curl, который легко, но немного затруднительно с помощью php. Спасибо, что это поможет вам.
Ответ 5
... Получить Youtube mp4 URL для видео на YouTube противоречит их Условиям предоставления услуг, поэтому иногда их API не поддерживает это. Вы можете увидеть страницу со ссылкой относится к Youtube ToS, которая гласит:
Но в прошлом месяце мне пришлось использовать YouTube API для загрузки видео на сайте FbTube. Вы можете увидеть здесь.
Загрузка с YouTube - это простая однострочная версия.
>>> from pytube import YouTube
>>> YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()
>>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
>>> yt.streams
... .filter(progressive=True, file_extension='mp4')
... .order_by('resolution')
... .desc()
... .first()
... .download()
Ответ 6
Похоже, что этот по-прежнему работает на 20190509 https://www.codexworld.com/download-youtube-video-using-php/
... хотя MP4, который он загружает, не может быть воспроизведен - так что скрипт может потребоваться обновить тоже. Отзовусь, если получу работу.
Ответ 7
Я не знаю, как это работает, но зайдите https://podsync.net/.
Когда вы вводите ссылку на плейлист youtube, он делает некоторую магию и генерирует ссылку mp4, которая будет использоваться подлодкими подкастов. Изучите возвращенный файл xml и вы увидите строки, подобные этому для каждого видео в плейлисте:
<enclosure url="http://podsync.net/download/[random-letters]/[video-id].mp4" length="x" type="video/mp4"></enclosure>
По моему опыту, этот URL-адрес работает независимо от того, какой видео-идентификатор вы используете.