admin管理员组文章数量:1023815
I'm writing a tool for downloading videos from youtube including live stream videos in c#.What I'm doing is: get html source from youtube url like "" then I'll find a javascript fragment of code that contains the configurations for the playing video in JSON which contains a list of actual video url that I can be abale to download for 1080p-720p-480p-360p and so on,Its working perfectly with normal videos and some livestream videos but with Fox News Live chanel("") I can't find any urls for 080p-720p-480p-360p other than a .m3u8 url
(".1~23716582/go/1/gcr/vn/sparams/ei,gcr,go,hfr,id,ip,ipbits,itag,maudio,playlist_type,ratebypass,requiressl,source,tx,txs,expire/requiressl/yes/itag/0/playlist_type/DVR/signature/3696DA0D44C88FCB370F27A780985017099507B2.9D3CB7209C75E0656424848394DAB3C65161365D/txs/9486106,9486107,9486108,9486113,9486114/maudio/1/expire/1514883856/ipbits/0/ratebypass/yes/dover/8/source/yt_live_broadcast/ip/118.107.71.247/key/yt6/ei/sPZKWu7RG4qx4AKKwJmACg/tx/9486113/hfr/1/file/index.m3u8"),
I've tried that .m3u8 url with VLC media player but there was only one image display on screen. So anyone please tell me is my solution to get videos from youtube ok? is there a better way? I'm writing the tool in c# but I can switch to any other programming languages.
I'm writing a tool for downloading videos from youtube including live stream videos in c#.What I'm doing is: get html source from youtube url like "https://www.youtube./watch?v=bnpPLjEudoU" then I'll find a javascript fragment of code that contains the configurations for the playing video in JSON which contains a list of actual video url that I can be abale to download for 1080p-720p-480p-360p and so on,Its working perfectly with normal videos and some livestream videos but with Fox News Live chanel("https://www.youtube./watch?v=bnpPLjEudoU") I can't find any urls for 080p-720p-480p-360p other than a .m3u8 url
("https://manifest.googlevideo./api/manifest/hls_variant/keepalive/yes/id/bnpPLjEudoU.1~23716582/go/1/gcr/vn/sparams/ei,gcr,go,hfr,id,ip,ipbits,itag,maudio,playlist_type,ratebypass,requiressl,source,tx,txs,expire/requiressl/yes/itag/0/playlist_type/DVR/signature/3696DA0D44C88FCB370F27A780985017099507B2.9D3CB7209C75E0656424848394DAB3C65161365D/txs/9486106,9486107,9486108,9486113,9486114/maudio/1/expire/1514883856/ipbits/0/ratebypass/yes/dover/8/source/yt_live_broadcast/ip/118.107.71.247/key/yt6/ei/sPZKWu7RG4qx4AKKwJmACg/tx/9486113/hfr/1/file/index.m3u8"),
I've tried that .m3u8 url with VLC media player but there was only one image display on screen. So anyone please tell me is my solution to get videos from youtube ok? is there a better way? I'm writing the tool in c# but I can switch to any other programming languages.
Share Improve this question edited Jan 2, 2018 at 3:17 user2905416 asked Jan 2, 2018 at 3:10 user2905416user2905416 4428 silver badges25 bronze badges1 Answer
Reset to default 3*Finally I found a solution myself,with normal video on youtube: +I get HTMLpage source from a youtube url using:
string pageSource = WebClient.DownloadString(youtubeURL)
+From HTML source I find the configurations for the video I want to download using Regularexpression and convert what I found to JSON:
var dataRegex = new Regex(@"ytplayer\.config\s*=\s*(\{.+?\});", RegexOptions.Multiline);
string extractedJson = dataRegex.Match(pageSource).Result("$1");
Object[] objs = new Object[] { url, JObject.Parse(extractedJson) };
+Json object that I got will has the format like this:
{
"attrs": {
"id": "movie_player"
},
"params": {
"allowscriptaccess": "always",
"allowfullscreen": "true",
"bgcolor": "#000000"
},
"args": {
"c": "WEB",
"vmap": "",
"iv_load_policy": "1",
"innertube_api_version": "v1",
"xhr_apiary_host": "youtubei.youtube.",
"length_seconds": "3826",
"relative_loudness": "-8.05900001526",
"pltype": "contentugc",
"title": "",
"host_language": "vi",
"enablecsi": "1",
"vm": "CAEQARgE",
"eventid": "gN9VWsD2HYu1qQHYh6DYCQ",
"plid": "AAViaNGgboLtCsQo",
"watermark": "",
"enablejsapi": "1",
"no_get_video_log": "1",
"loaderUrl": "https://www.youtube./watch?v=oGeAFd9zjDI",
"vss_host": "s.youtube.",
"oid": "h6xIstk06YQWVvfO-FkUjg",
"cver": "1.20180108",
"ldpj": "-35",
"timestamp": "1515577216",
"thumbnail_url": "https://i.ytimg./vi/oGeAFd9zjDI/default.jpg",
"view_count": "941366",
"idpj": "-9",
"fexp":"",
"loudness": "-29.0590000153",
"allow_ratings": "1",
"pyv_ad_channel": "",
"apiary_host": "",
"tmi": "1",
"fmt_list": "22/1280x720,43/640x360,18/640x360,36/320x180,17/176x144",
"video_id": "oGeAFd9zjDI",
"subtitles_xlb": "https://s.ytimg./yts/xlbbin/subtitles-strings-vi_VN-vfl-WQ1GC.xlb",
"videostats_playback_base_url": " ",
"player_response": "{}",
"ptk": "youtube_single",
"ucid": "UCIt0gjo6BZk37cLWm04LmCQ",
"apiary_host_firstparty": "",
"t": "1",
"swf_player_response": "1",
"ssl": "1",
"avg_rating": "4.11271858215",
"allow_embed": "1",
"is_listed": "1",
"cr": "VN",
"itct": "CAMQu2kiEwjAtvmMjc3YAhWLWioKHdgDCJso-B0=",
"atc":"",
"fflags":"",
"cl": "181278566",
"iv_invideo_url": "",
"player_error_log_fraction": "1.0",
"of": "Ds_CbA89Q3Fyo-EOejl1bA",
"token": "1",
"external_play_video": "1",
"show_pyv_in_related": false,
"account_playback_token": "",
"innertube_api_key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
"csi_page_type": "watch,watch7_html5",
"adaptive_fmts": "",
"gapi_hint_params": "",
"author": "Mr Dolphin",
"ppv_remarketing_url": "",
"innertube_context_client_version": "1.20180108",
"hl": "vi_VN",
"url_encoded_fmt_stream_map": "list of actual urls for 1080p,720p,360p and so on, that will be able to download after decode",
"iv3_module": "1",
"keywords": " ",
"ismb": "8340000",
"watch_xlb": "https://s.ytimg./yts/xlbbin/watch-strings-vi_VN-vflzKZ5ht.xlb"
},
"url": "",
"min_version": "8.0.0",
"sts": 17536,
"assets": {
"js": "/yts/jsbin/player-vfluepRD8/vi_VN/base.js",
"css": "/yts/cssbin/player-vfl_z2Ycb/www-player.css"
}, "html5": true }
+Now when I have JsonObject I will find all the urls that can be able to download the video using:
string urlsToDownload = json["args"]["url_encoded_fmt_stream_map"].ToString();
*With Live stream video I go through the same process as normal video but in last step instead of get a list of download able urls I have to get the .m3u8 url by:
string downloadUrl = WebUtility.UrlDecode(json["args"]["hlsvp"].ToString());
+When I have .m3u8 url I download the livestream video using "FFMPEG"
I'm writing a tool for downloading videos from youtube including live stream videos in c#.What I'm doing is: get html source from youtube url like "" then I'll find a javascript fragment of code that contains the configurations for the playing video in JSON which contains a list of actual video url that I can be abale to download for 1080p-720p-480p-360p and so on,Its working perfectly with normal videos and some livestream videos but with Fox News Live chanel("") I can't find any urls for 080p-720p-480p-360p other than a .m3u8 url
(".1~23716582/go/1/gcr/vn/sparams/ei,gcr,go,hfr,id,ip,ipbits,itag,maudio,playlist_type,ratebypass,requiressl,source,tx,txs,expire/requiressl/yes/itag/0/playlist_type/DVR/signature/3696DA0D44C88FCB370F27A780985017099507B2.9D3CB7209C75E0656424848394DAB3C65161365D/txs/9486106,9486107,9486108,9486113,9486114/maudio/1/expire/1514883856/ipbits/0/ratebypass/yes/dover/8/source/yt_live_broadcast/ip/118.107.71.247/key/yt6/ei/sPZKWu7RG4qx4AKKwJmACg/tx/9486113/hfr/1/file/index.m3u8"),
I've tried that .m3u8 url with VLC media player but there was only one image display on screen. So anyone please tell me is my solution to get videos from youtube ok? is there a better way? I'm writing the tool in c# but I can switch to any other programming languages.
I'm writing a tool for downloading videos from youtube including live stream videos in c#.What I'm doing is: get html source from youtube url like "https://www.youtube./watch?v=bnpPLjEudoU" then I'll find a javascript fragment of code that contains the configurations for the playing video in JSON which contains a list of actual video url that I can be abale to download for 1080p-720p-480p-360p and so on,Its working perfectly with normal videos and some livestream videos but with Fox News Live chanel("https://www.youtube./watch?v=bnpPLjEudoU") I can't find any urls for 080p-720p-480p-360p other than a .m3u8 url
("https://manifest.googlevideo./api/manifest/hls_variant/keepalive/yes/id/bnpPLjEudoU.1~23716582/go/1/gcr/vn/sparams/ei,gcr,go,hfr,id,ip,ipbits,itag,maudio,playlist_type,ratebypass,requiressl,source,tx,txs,expire/requiressl/yes/itag/0/playlist_type/DVR/signature/3696DA0D44C88FCB370F27A780985017099507B2.9D3CB7209C75E0656424848394DAB3C65161365D/txs/9486106,9486107,9486108,9486113,9486114/maudio/1/expire/1514883856/ipbits/0/ratebypass/yes/dover/8/source/yt_live_broadcast/ip/118.107.71.247/key/yt6/ei/sPZKWu7RG4qx4AKKwJmACg/tx/9486113/hfr/1/file/index.m3u8"),
I've tried that .m3u8 url with VLC media player but there was only one image display on screen. So anyone please tell me is my solution to get videos from youtube ok? is there a better way? I'm writing the tool in c# but I can switch to any other programming languages.
Share Improve this question edited Jan 2, 2018 at 3:17 user2905416 asked Jan 2, 2018 at 3:10 user2905416user2905416 4428 silver badges25 bronze badges1 Answer
Reset to default 3*Finally I found a solution myself,with normal video on youtube: +I get HTMLpage source from a youtube url using:
string pageSource = WebClient.DownloadString(youtubeURL)
+From HTML source I find the configurations for the video I want to download using Regularexpression and convert what I found to JSON:
var dataRegex = new Regex(@"ytplayer\.config\s*=\s*(\{.+?\});", RegexOptions.Multiline);
string extractedJson = dataRegex.Match(pageSource).Result("$1");
Object[] objs = new Object[] { url, JObject.Parse(extractedJson) };
+Json object that I got will has the format like this:
{
"attrs": {
"id": "movie_player"
},
"params": {
"allowscriptaccess": "always",
"allowfullscreen": "true",
"bgcolor": "#000000"
},
"args": {
"c": "WEB",
"vmap": "",
"iv_load_policy": "1",
"innertube_api_version": "v1",
"xhr_apiary_host": "youtubei.youtube.",
"length_seconds": "3826",
"relative_loudness": "-8.05900001526",
"pltype": "contentugc",
"title": "",
"host_language": "vi",
"enablecsi": "1",
"vm": "CAEQARgE",
"eventid": "gN9VWsD2HYu1qQHYh6DYCQ",
"plid": "AAViaNGgboLtCsQo",
"watermark": "",
"enablejsapi": "1",
"no_get_video_log": "1",
"loaderUrl": "https://www.youtube./watch?v=oGeAFd9zjDI",
"vss_host": "s.youtube.",
"oid": "h6xIstk06YQWVvfO-FkUjg",
"cver": "1.20180108",
"ldpj": "-35",
"timestamp": "1515577216",
"thumbnail_url": "https://i.ytimg./vi/oGeAFd9zjDI/default.jpg",
"view_count": "941366",
"idpj": "-9",
"fexp":"",
"loudness": "-29.0590000153",
"allow_ratings": "1",
"pyv_ad_channel": "",
"apiary_host": "",
"tmi": "1",
"fmt_list": "22/1280x720,43/640x360,18/640x360,36/320x180,17/176x144",
"video_id": "oGeAFd9zjDI",
"subtitles_xlb": "https://s.ytimg./yts/xlbbin/subtitles-strings-vi_VN-vfl-WQ1GC.xlb",
"videostats_playback_base_url": " ",
"player_response": "{}",
"ptk": "youtube_single",
"ucid": "UCIt0gjo6BZk37cLWm04LmCQ",
"apiary_host_firstparty": "",
"t": "1",
"swf_player_response": "1",
"ssl": "1",
"avg_rating": "4.11271858215",
"allow_embed": "1",
"is_listed": "1",
"cr": "VN",
"itct": "CAMQu2kiEwjAtvmMjc3YAhWLWioKHdgDCJso-B0=",
"atc":"",
"fflags":"",
"cl": "181278566",
"iv_invideo_url": "",
"player_error_log_fraction": "1.0",
"of": "Ds_CbA89Q3Fyo-EOejl1bA",
"token": "1",
"external_play_video": "1",
"show_pyv_in_related": false,
"account_playback_token": "",
"innertube_api_key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
"csi_page_type": "watch,watch7_html5",
"adaptive_fmts": "",
"gapi_hint_params": "",
"author": "Mr Dolphin",
"ppv_remarketing_url": "",
"innertube_context_client_version": "1.20180108",
"hl": "vi_VN",
"url_encoded_fmt_stream_map": "list of actual urls for 1080p,720p,360p and so on, that will be able to download after decode",
"iv3_module": "1",
"keywords": " ",
"ismb": "8340000",
"watch_xlb": "https://s.ytimg./yts/xlbbin/watch-strings-vi_VN-vflzKZ5ht.xlb"
},
"url": "",
"min_version": "8.0.0",
"sts": 17536,
"assets": {
"js": "/yts/jsbin/player-vfluepRD8/vi_VN/base.js",
"css": "/yts/cssbin/player-vfl_z2Ycb/www-player.css"
}, "html5": true }
+Now when I have JsonObject I will find all the urls that can be able to download the video using:
string urlsToDownload = json["args"]["url_encoded_fmt_stream_map"].ToString();
*With Live stream video I go through the same process as normal video but in last step instead of get a list of download able urls I have to get the .m3u8 url by:
string downloadUrl = WebUtility.UrlDecode(json["args"]["hlsvp"].ToString());
+When I have .m3u8 url I download the livestream video using "FFMPEG"
本文标签: javascriptHow to get download able url of live stream videos on youtubeStack Overflow
版权声明:本文标题:javascript - How to get download able url of live stream videos on youtube - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745604937a2158675.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论