Ustream mp4
by
noromanba
2015-06-21 [2015/06/21 07:17:01]
flash-free Ustream
@@ -6,8 +6,22 @@
* @javascript_url
*/
+// web <video> player
+// http://txton.net/hoehoe/sample/ustplayer02/
+// http://txton.net/hoehoe/2010/100810165217.html
+
+// alt. livestreamer
+// http://docs.livestreamer.io/
+// https://github.com/chrippa/livestreamer
+// https://github.com/chrippa/livestreamer/wiki/Alternative-interfaces
+
+// c.f.
+// http://developer.ustream.tv/data_api/docs
+// http://ustream.github.io/api-docs/
+
// e.g.
-// http://www.ustream.tv/channel/nasahdtv
+// http://www.ustream.tv/nasahdtv
+// http://www.ustream.tv/channel/live-iss-stream
(function () {
// channel-id
// <meta name="ustream:channel_id" content="9408562">
@@ -44,45 +58,66 @@
/*/
// TBD window.open()
- // open w/ mplayer, vlc et al.
+ // open w/ mplayer, ffplay, avplay, cvlc, vlc et al.
window.prompt('streaming URL', HLS_URL);
//*/
})();
-// DBG
+// # DBG
+//
+// ## player info API
//
+// http://api.ustream.tv/html/channel/CHANNEL_ID/getInfo
+// http://api.ustream.tv/html/user/USER_ID/getInfo
+//
+// e.g.
+// http://api.ustream.tv/html/channel/live-iss-stream/getInfo
+// http://api.ustream.tv/html/user/NASAtelevision/getInfo
+//
+// ## HLS API
+//
+// 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
+//
+// e.g.
// 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
-//
-// $
+// ## request
+//
+// ### HEAD
+//
+// $ 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
+//
+// $ 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
+//
+// ----
+//
+// ### Hi-Resolution
+// spoof of 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
*/
// web <video> player
// http://txton.net/hoehoe/sample/ustplayer02/
// http://txton.net/hoehoe/2010/100810165217.html
// alt. livestreamer
// http://docs.livestreamer.io/
// https://github.com/chrippa/livestreamer
// https://github.com/chrippa/livestreamer/wiki/Alternative-interfaces
// c.f.
// http://developer.ustream.tv/data_api/docs
// http://ustream.github.io/api-docs/
// e.g.
// http://www.ustream.tv/nasahdtv
// http://www.ustream.tv/channel/live-iss-stream
(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, ffplay, avplay, cvlc, vlc et al.
window.prompt('streaming URL', HLS_URL);
//*/
})();
// # DBG
//
// ## player info API
//
// http://api.ustream.tv/html/channel/CHANNEL_ID/getInfo
// http://api.ustream.tv/html/user/USER_ID/getInfo
//
// e.g.
// http://api.ustream.tv/html/channel/live-iss-stream/getInfo
// http://api.ustream.tv/html/user/NASAtelevision/getInfo
//
// ## HLS API
//
// 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
//
// e.g.
// http://www.ustream.tv/channel/live-iss-stream
// http://iphone-streaming.ustream.tv/uhls/9408562/streams/live/playlist.m3u8
//
// ## request
//
// ### HEAD
//
// $ 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
//
// $ 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
//
// ----
//
// ### Hi-Resolution
// spoof of 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 です。