diff --git a/trunk/research/api-server/server.py b/trunk/research/api-server/server.py index 3ec083458..fdd0f0f15 100755 --- a/trunk/research/api-server/server.py +++ b/trunk/research/api-server/server.py @@ -548,6 +548,7 @@ class ArmServer: data["heartbeat"] = self.heartbeat data["heartbeat_h"] = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(self.heartbeat)) data["summaries"] = "http://%s:1985/api/v1/summaries"%(self.ip) + data["console"] = "http://ossrs.net/console/ng_index.html#/summaries?host=%s&port=1985"%(self.ip) return data ''' @@ -579,29 +580,6 @@ class RESTServers(object): if not has_dead_node: break - def __json_dump_nodes(self, peers): - data = [] - for node in peers: - data.append(node.json_dump()) - return data - - def __get_peers_for_play(self, device_id): - peers = [] - for node in self.__nodes: - if node.device_id == device_id: - peers.append(node) - return peers - - def __select_peer(self, peers, device_id): - target = None - for peer in peers: - if target is None or target.clients > peer.clients: - target = peer - if target is None: - return None - target.clients += 1 - return target.ip - ''' post to update server ip. request body: the new raspberry-pi server ip. TODO: FIXME: more info. @@ -637,183 +615,21 @@ class RESTServers(object): self.__lock.release() ''' - id canbe: - pi: the pi demo, raspberry-pi default demo. - device_id: the id of device to get. - action: canbe play or mgmt, play to play the inest stream, mgmt to get api/v1/versions. - stream: the stream to play, for example, live/livestream for http://server:8080/live/livestream.html - meeting: the meeting demo. jump to web meeting if index is None. - device_id: the id of device to get. - local: whether view the local raspberry-pi stream. if "true", redirect to the local(internal) api server. - index: the meeting stream index, dynamic get the streams from root.api.v1.chats.get_url_by_index(index) - gslb: the gslb to get edge ip - device_id: the id of device to get. - ingest: deprecated, alias for pi. + get all servers which report to this api-server. ''' - def GET(self, id=None, action="play", stream="live/livestream", index=None, local="false", device_id=None): + def GET(self): enable_crossdomain() try: self.__lock.acquire() self.__refresh_nodes() - data = self.__json_dump_nodes(self.__nodes) - server_ip = "demo.chnvideo.com" - ip = cherrypy.request.remote.ip - if type is not None: - peers = self.__get_peers_for_play(device_id) - if len(peers) > 0: - server_ip = self.__select_peer(peers, device_id) + data = [] + for node in self.__nodes: + data.append(node.json_dump()) - # demo, srs meeting urls. - if id == "meeting": - if index is None: - url = "http://%s:8085"%(server_ip) - elif local == "true": - url = "http://%s:8085/api/v1/servers?id=%s&index=%s&local=false"%(server_ip, id, index) - else: - rtmp_url = root.api.v1.chats.get_url_by_index(index) - if rtmp_url is None: - return "meeting stream not found" - urls = rtmp_url.replace("...vhost...", "?vhost=").replace("rtmp://", "").split("/") - hls_url = "http://%s:8080/%s/%s.m3u8"%(urls[0].strip(":19350").strip(":1935"), urls[1].split("?")[0], urls[2]) - return self.__generate_hls(hls_url) - # raspberry-pi urls. - elif id == "ingest" or id == "pi": - if action == "play": - url = "http://%s:8080/%s.html"%(server_ip, stream) - elif action == "rtmp": - url = "../../players/srs_player.html?server=%s&vhost=%s&app=%s&stream=%s&autostart=true"%(server_ip, server_ip, stream.split("/")[0], stream.split("/")[1]) - elif action == "hls": - hls_url = "http://%s:8080/%s.m3u8"%(server_ip, stream); - if stream.startswith("http://"): - hls_url = stream; - return self.__generate_hls(hls_url.replace(".m3u8.m3u8", ".m3u8")) - else: - url = "http://%s:8080/api/v1/versions"%(server_ip) - elif id == "gslb": - return json.dumps({"code":Error.success, "data": { - "edge":server_ip, "client":ip, - "peers":self.__json_dump_nodes(peers), - "streams": { - "pi": { - "livestream": { - "sales-pi-hls": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-arm&stream=live/livestream", - "dev-pi-hls": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-dev-arm&stream=live/livestream" - }, - "cztv": { - "sales-pi-hls": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-arm&stream=live/rtmp_cztv01-sd", - "dev-pi-hls": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-dev-arm&stream=live/rtmp_cztv01-sd" - } - }, - "hiwifi": { - "hls": { - "dev-livestream": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-dev-hiwifi&stream=live/livestream", - "sales-livestream": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/livestream" - }, - "rtmp":{ - "dev-livestream": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-dev-hiwifi&stream=live/livestream", - "sales-livestream": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/livestream" - }, - "meiyi": { - "rtmp": { - "avatar": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/avatar", - "MenInBlack3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/MenInBlack3", - "skyfall": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/skyfall", - "SpiderMan": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/SpiderMan", - "thehobbit": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/thehobbit", - "thorthedarkworld": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/thorthedarkworld", - "transformers": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-sales-hiwifi&stream=live/transformers" - }, - "hls": { - "avatar": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/avatar", - "MenInBlack3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/MenInBlack3", - "skyfall": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/skyfall", - "SpiderMan": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/SpiderMan", - "thehobbit": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/thehobbit", - "thorthedarkworld": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/thorthedarkworld", - "transformers": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-sales-hiwifi&stream=live/transformers" - } - } - }, - "cubieboard": { - "meiyi": { - "rtmp": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/livestream", - "stream1": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream1", - "stream2": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream2", - "stream3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream3", - "stream4": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream4", - "stream5": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream5", - "stream6": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream6", - "stream7": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard&stream=live/stream7" - }, - "hls": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/livestream", - "stream1": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream1", - "stream2": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream2", - "stream3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream3", - "stream4": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream4", - "stream5": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream5", - "stream6": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream6", - "stream7": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard&stream=live/stream7" - } - }, - "meiyi-house": { - "rtmp": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-house&stream=live/livestream" - }, - "hls": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-house&stream=live/livestream" - } - }, - "meiyi-bk": { - "rtmp": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/livestream", - "stream1": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream1", - "stream2": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream2", - "stream3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream3", - "stream4": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream4", - "stream5": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream5", - "stream6": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream6", - "stream7": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream7" - }, - "hls": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/livestream", - "stream1": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream1", - "stream2": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream2", - "stream3": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream3", - "stream4": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream4", - "stream5": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream5", - "stream6": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream6", - "stream7": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-bk&stream=live/stream7" - } - }, - "meiyi-dev1": { - "rtmp": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-dev1&stream=live/livestream" - }, - "hls": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-dev1&stream=live/livestream" - } - }, - "meiyi-dev2": { - "rtmp": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=rtmp&device_id=chnvideo-meiyi-cubieboard-dev2&stream=live/livestream" - }, - "hls": { - "livesteam": "http://demo.chnvideo.com:8085/api/v1/servers?id=ingest&action=hls&device_id=chnvideo-meiyi-cubieboard-dev2&stream=live/livestream" - } - } - } - } - }}) - # others, default. - else: - return json.dumps(data) - #return "id=%s, action=%s, stream=%s, url=%s, index=%s, local=%s"%(id, action, stream, url, index, local) - raise cherrypy.HTTPRedirect(url) + return json.dumps(data) finally: self.__lock.release() @@ -827,248 +643,6 @@ class RESTServers(object): def OPTIONS(self, *args, **kwargs): enable_crossdomain() - - def __generate_hls(self, hls_url): - return SrsUtility().hls_html(hls_url) - -class SrsUtility: - def hls_html(self, hls_url): - return """ -