Ustream の動画情報
Ustream のチャンネルから配信動画の情報を取得してみたいと思います。
ここでは NASA TV のチャンネル nasa-hd-tv で進めていきます。
cid の取得
ページのソース(HTML)の頭の方にこんな記述があります。
<meta name="twitter:player" value="https://www.ustream.tv/embed/6540154">
6540154 がこのチャンネルの cid です。その他、ソースの各所に埋めこまれていますが、一番みつけやすいのがこの部分です。
Ustream API で HTML 出力を用いた場合は、 一番上の id の箇所になります。
プログラム上で参照したい場合は出力形式を XML か JSON にした方が便利です。 response['results']['id'] です。
AMF ファイルを取得
先程取得した cid で AMF ファイルを取得します。
- http://cdngw.ustream.tv/Viewer/getStream/1/cid.amf
AMF ファイルは AMF0 - 見上げれば、空 で読み方がわかりました。これを解析するといろいろな情報がわかります。
一旦中継が途絶してしまった場合など、ストリームの URL などが変化します。必要に応じて AMF ファイルを取得しなおしてください。
{ "header": [ { "name": "AppendToGatewayUrl", "understand": false, "length": 46, "value": "?PHPSESSID=582995abc22b21bd9fd543c5e8396205" } ], "message": [ { "target_uri": "/1/onResult", "response_uri": "null", "length": 5680, "value": { "__debug_ip": "173.88.220.193", "__debug_countryCode": "US", "isFeaturedOnUstream": true, "socialStreamSettings": { "prefix": "#NASATV", "suffix": " ( #NASATV live at http://ustre.am/rrom)" }, "conviva": true, "quantcast": true, "status": "online", "streamId": "118344159", "broadcasterType": "fme", "startedAt": "2012-11-13 05:44:52", "viewerNumber": "58", "useUmsViewerCount": false, "cdnUrl": "rtmp://ustreamlivefs.fplive.net/ustream4live-live/", "streamName": "stream_live_1_1_6540154", "liveHttpUrl": "http://iphone-streaming.ustream.tv/uhls/6540154/streams/live/iphone/playlist.m3u8", "offairContent": { "videos": [ "27030658" ] }, "moduleConfig": { "meta": { "tags": [ "HD", "NASA", "Science" ], "title": "NASA Public", "tagline": "Broadcasting NASA TV in HD!", "keywords": [ "HD", "NASA", "Science" ], "twitter": { "type": "hash", "prefix": "#NASATV", "suffix": " ( #NASATV live at http://ustre.am/rrom)", "tinyUrl": "http://ustre.am/rrom" }, "url": "http://www.ustream.tv/nasahdtv", "embeds": { "media": "<object ...(略)", "videoFeedWidget": "<object ...(略)", "chat": "<embed ...(略)", "social": "<iframe ...(略)" }, "category": [ "Technology", "Science" ], "userName": "NASAtelevision", "customWidget": false, "broadcasterType": "fme", "broadcasterDevice": "FMSc/1.0 (compatible; FMSc/1.0)", "extAutoPlayFalseMode": false, "extAutoPlayFalseModeBg": false }, "share": [ { "name": "facebook", "url": "http://www.facebook.com/dialog/feed?app_id=123875465478&redirect_uri=http://ustream.tv/&link=" }, { "type": "hash", "prefix": "#NASATV", "name": "twitter", "shortenedUrl": "http://ustre.am/rrom" }, { "name": "embed", "embedCode": "<object ...(略)" }, { "name": "mail" }, { "name": "mixi", "url": "http://mixi.jp/share.pl?k=91ddbbb3ab57e442c177f34c9e09e22dfc15da59&u=" } ], "logo": [ { "align": "2", "margin": "5", "mobile": false } ] }, "localeIn": "empty", "localeOut": "en_US", "socialStreamEnabled": false, "chatEnabled": false, "shortenedUrl": "http://ustre.am/rrom", "streamVersions": { "streams/live_1": { "streamId": "118344159", "audioBitrate": "0", "audioCodec": null, "videoBitrate": "0", "videoCodec": null, "isDefault": "1", "isTranscoded": "0", "transcodingPreset": null, "streamVersionCdn": { "akamai": { "cdnStreamName": "ustream-sj2_902@59146", "cdnStreamUrl": "rtmp://cp152495.live.edgefcs.net/live" }, "level3": { "cdnStreamName": "stream_live_1_1_6540154", "cdnStreamUrl": "rtmp://ustreamlivefs.fplive.net/ustream4live-live/" } } } }, "videoCodec": { "videoBitrate": -280.0, "level": -30.0, "height": -0.0, "compatibleProfiles": -192.0, "width": -0.0, "levelName": -3.0, "videoCodecType": "H264", "profileName": "BaseLine", "profile": -66.0, "version": -1.0 }, "audioCodec": { "audioSampleSize": "16-bit", "audioCodecType": "AAC", "audioSampleRate": "44-kHz", "audioSoundType": "stereo", "audioBitrate": -64.0 }, "success": true } } ], "version": 0, "header_count": 1, "message_count": 1 }