Ustream mp4
by
noromanba
2015-06-21 [2015/06/21 07:17:01]
flash-free Ustream
@@ -6,31 +6,20 @@
* @javascript_url
*/
-
// e.g.
-// http://www.ustream.tv/channel/ubuntu-offline-meeting-1506
-// http://iphone-streaming.ustream.tv/ustreamVideo/20760528/streams/live/playlist.m3u8
+// http://www.ustream.tv/channel/nasahdtv
(function () {
- // ustream:channel_id
- // <meta name="ustream:channel_id" content="20760528">
- //*
- var id = (document.querySelector('meta[name="ustream:channel_id"][content]') || {}).content;
-
- /*/
- // data-content-id
- var id;
- Array.prototype.some.call(document.querySelectorAll('[data-content-id]'), function (node) {
- if (id = node.dataset.contentId) {
- return true;
- }
- });
- //*/
-
+ // channel-id
+ // <meta name="ustream:channel_id" content="9408562">
+ // TODO use API w/ ajax c.f. http://let.hatelabo.jp/noromanba/let/gYC-x-X5mL3cAA
+ // header unchanged when pjax, so differ <head> and <body> WTF
+ var id = (document.head.querySelector('meta[name="ustream:channel_id"][content]') || {}).content;
if (!id) return;
// HTML5 HLS endpoint (http only)
// http://iphone-streaming.ustream.tv/uhls/CHANNEL_ID/streams/live/iphone/playlist.m3u8
// http://iphone-streaming.ustream.tv/ustreamVideo/CHANNEL_ID/streams/live/playlist.m3u8
+ // TODO 480p+, needs spoof UA to iPad/Safari
var HLS_URL = [
'http://iphone-streaming.ustream.tv/uhls/',
id,
@@ -38,7 +27,7 @@
].join('');
// TODO open in same tab/window, but couldn't X-domain GET
- // not provide CORS; 'Access-Control-Allow-Origin'
+ // not provided CORS: 'Access-Control-Allow-Origin'
// cleanup c.f. http://jsperf.com/innerhtml-vs-removechild/157
/*/
var body = document.body;
@@ -46,8 +35,11 @@
body.removeChild(body.firstChild);
}
+ // Safari/iPad only
var video = document.createElement('video');
video.src = HLS_URL;
+ //video.type = 'video/mp4'
+ //video.controls = true;
document.body.appendChild(video);
/*/
@@ -56,3 +48,41 @@
window.prompt('streaming URL', HLS_URL);
//*/
})();
+
+// DBG
+//
+// http://www.ustream.tv/channel/live-iss-stream
+// http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8
+//
+// $ HEAD "http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8"
+// 200 OK
+// Connection: close
+// Date: Sat, 20 Jun 2015 16:05:57 GMT
+// Server: Jetty(7.x.y-SNAPSHOT)
+// Content-Type: application/vnd.apple.mpegurl
+// Client-Date: Sat, 20 Jun 2015 16:05:57 GMT
+// Client-Peer: 199.66.239.195:80
+// Client-Response-Num: 1
+// Set-Cookie: uhls.9408562=oldurl-9cabc150074b9f6d82847995553273e98f5ba294; path=/; domain=sjc-uhls-proxy103.ustream.tv; Max-Age=900; HttpOnly
+//
+// $
+//
+// $ GET "http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8"
+// #EXTM3U
+// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=719615,CODECS="avc1.77.21, mp4a.40.2",RESOLUTION=426x284
+// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=103&appVersion=3&conn=wifi&cid=9408562&stream=viewer_240p&connectionId=oldurl-9cabc150074b9f6d82847995553273e98f5ba294&group=iphone
+//
+// $
+
+// spoof UA to iPad/Safari
+// $ GET "http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?cid=17074538&appType=11&appVersion=2&locks=97d170e1550eee4afc0af065b78cda302a97674c&geo=JP&geocity=&userId=&connectionId=sjc-flot-live03_1894980111&ts=1434828433&ip=XXX.XXX.XX.XX&cdn=uhs_akamai&sgn=5bada09321398f9f40485e8de2681490b2d43a98"
+// #EXTM3U
+// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1080779,CODECS="avc1.77.30, mp4a.40.2",RESOLUTION=640x360
+// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_360p&connectionId=sjc-flot-live03_1894980111&group=iphone
+// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1420901,CODECS="avc1.77.31, mp4a.40.2",RESOLUTION=854x480
+// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_480p&connectionId=sjc-flot-live03_1894980111&group=iphone
+// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=744729,CODECS="avc1.77.21, mp4a.40.2",RESOLUTION=426x240
+// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_240p&connectionId=sjc-flot-live03_1894980111&group=iphone
+//
+// $
+
/*
* @title Ustream mp4
* @description flash-free Ustream
* @include http://www.ustream.tv/*
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// e.g.
// http://www.ustream.tv/channel/nasahdtv
(function () {
// channel-id
// <meta name="ustream:channel_id" content="9408562">
// TODO use API w/ ajax c.f. http://let.hatelabo.jp/noromanba/let/gYC-x-X5mL3cAA
// header unchanged when pjax, so differ <head> and <body> WTF
var id = (document.head.querySelector('meta[name="ustream:channel_id"][content]') || {}).content;
if (!id) return;
// HTML5 HLS endpoint (http only)
// http://iphone-streaming.ustream.tv/uhls/CHANNEL_ID/streams/live/iphone/playlist.m3u8
// http://iphone-streaming.ustream.tv/ustreamVideo/CHANNEL_ID/streams/live/playlist.m3u8
// TODO 480p+, needs spoof UA to iPad/Safari
var HLS_URL = [
'http://iphone-streaming.ustream.tv/uhls/',
id,
'/streams/live/playlist.m3u8'
].join('');
// TODO open in same tab/window, but couldn't X-domain GET
// not provided CORS: 'Access-Control-Allow-Origin'
// cleanup c.f. http://jsperf.com/innerhtml-vs-removechild/157
/*/
var body = document.body;
while (body.firstChild) { // TBD range
body.removeChild(body.firstChild);
}
// Safari/iPad only
var video = document.createElement('video');
video.src = HLS_URL;
//video.type = 'video/mp4'
//video.controls = true;
document.body.appendChild(video);
/*/
// TBD window.open()
// open w/ mplayer, vlc et al.
window.prompt('streaming URL', HLS_URL);
//*/
})();
// DBG
//
// http://www.ustream.tv/channel/live-iss-stream
// http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8
//
// $ HEAD "http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8"
// 200 OK
// Connection: close
// Date: Sat, 20 Jun 2015 16:05:57 GMT
// Server: Jetty(7.x.y-SNAPSHOT)
// Content-Type: application/vnd.apple.mpegurl
// Client-Date: Sat, 20 Jun 2015 16:05:57 GMT
// Client-Peer: 199.66.239.195:80
// Client-Response-Num: 1
// Set-Cookie: uhls.9408562=oldurl-9cabc150074b9f6d82847995553273e98f5ba294; path=/; domain=sjc-uhls-proxy103.ustream.tv; Max-Age=900; HttpOnly
//
// $
//
// $ GET "http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8"
// #EXTM3U
// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=719615,CODECS="avc1.77.21, mp4a.40.2",RESOLUTION=426x284
// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=103&appVersion=3&conn=wifi&cid=9408562&stream=viewer_240p&connectionId=oldurl-9cabc150074b9f6d82847995553273e98f5ba294&group=iphone
//
// $
// spoof UA to iPad/Safari
// $ GET "http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?cid=17074538&appType=11&appVersion=2&locks=97d170e1550eee4afc0af065b78cda302a97674c&geo=JP&geocity=&userId=&connectionId=sjc-flot-live03_1894980111&ts=1434828433&ip=XXX.XXX.XX.XX&cdn=uhs_akamai&sgn=5bada09321398f9f40485e8de2681490b2d43a98"
// #EXTM3U
// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1080779,CODECS="avc1.77.30, mp4a.40.2",RESOLUTION=640x360
// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_360p&connectionId=sjc-flot-live03_1894980111&group=iphone
// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1420901,CODECS="avc1.77.31, mp4a.40.2",RESOLUTION=854x480
// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_480p&connectionId=sjc-flot-live03_1894980111&group=iphone
// #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=744729,CODECS="avc1.77.21, mp4a.40.2",RESOLUTION=426x240
// http://sjc-uhls-proxy103.ustream.tv/watch/playlist.m3u8?appType=11&appVersion=2&conn=wifi&cdn=uhs_akamai&locks=97d170e1550eee4afc0af065b78cda302a97674c&cid=17074538&stream=viewer_240p&connectionId=sjc-flot-live03_1894980111&group=iphone
//
// $
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。