[PYTHON] Versuchen Sie es mit der Admin-API von Janus Gateway

Überblick

Es gibt viele Artikel über den WebRTC-Medienserver namens Janus Gateway. Es gibt fast keine inoffizielle Verwendung der bereitgestellten API. Es fiel mir schwer, das herauszufinden, deshalb möchte ich es hier zusammenfassen.

Referenzseite

API-Typ

Es gibt zwei Haupttypen von APIs, die von Janus bereitgestellt werden.

Eine API zum Verwalten und Überwachen von Janus. Ich werde es in diesem Artikel verwenden.

Janus hat eine Reihe von Plugins für Videoanrufe, Streaming, SIP und mehr. Es ist eine API zum Bedienen des Plug-Ins. Ich werde es im nächsten Artikel verwenden.

Versuchen Sie es mit der Admin-API über Websocket

Stellen Sie die Janus-Konfiguration ein

Legen Sie das Kennwort fest, das beim Aufrufen der Admin-API verwendet werden soll.

/usr/local/etc/janus/janus.cfg


[general]
admin_secret = password

Stellen Sie ein, dass es über Websocket verfügbar ist. Dieses Mal setzen wir ws, aber wenn eine Verschlüsselung erforderlich ist, setzen wir wss und bereiten das Zertifikat vor. Stellen Sie außerdem sicher, dass der hier angegebene Port nicht von FW oder Ähnlichem blockiert wird.

/usr/local/etc/janus/janus.transport.websockets.cfg


[admin]
admin_ws = yes
admin_ws_port = 7188

Schreiben Sie Code in Python

Die Python-Version ist 2.7. Dieses Mal werde ich die Informationen der Benutzer überwachen, die auf Janus zugegriffen haben.

Rufen Sie zunächst die Liste der Sitzungen ab, auf die Sie zugreifen.

python


import websocket
import json
import random
import string

#Janus Endpunkt
janus_admin_url = 'ws://10.0.0.1:7188/janus'

#Administratorkennwort
janus_admin_secret = 'password'

#Zufällige Zeichengenerierung
def random_string(length, seq=string.digits):
    sr = random.SystemRandom()
    return ''.join([sr.choice(seq) for i in range(length)])

#8 zufällige Zeichen
transaction = random_string(8)

# list_Erstellen Sie einen Json, um die Sitzungsmethode aufzurufen
data = {"janus":'list_sessions', "admin_secret": janus_admin_secret, "transaction": transaction}

#Erstellen Sie eine Websocket-Verbindung
websock = websocket.create_connection(janus_admin_url,subprotocols=["janus-admin-protocol"])

#Senden
websock.send(json.dumps(data))

#Erhalten
rejson =  websock.recv()

#Empfangsergebnis anzeigen
print rejson
{
   "janus": "success",
   "transaction": "73677159",
   "sessions": [
      311091039069809
   ]
}

Rufen Sie dann die Liste ab, die von der Sitzung verarbeitet wird. Es werden mehrere Handles zurückgegeben, beispielsweise wenn mehrere Plug-Ins verwendet werden.

python


sessions_list = json.loads(rejson).get('sessions',[])

# list_Erstellen Sie einen Json, der die Handles-Methode aufruft
data = {"janus":'list_handles', "admin_secret": janus_admin_secret, "transaction": transaction, "session_id": sessions_list[0]}

websock.send(json.dumps(data))
rejson =  websock.recv()
print rejson

{
   "janus": "success",
   "transaction": "73677159",
   "session_id": 311091039069809,
   "handles": [
      1721128026873430
   ]
}

Schließlich erhalten Sie die Informationen für dieses Handle.

python


handles_list = json.loads(rejson).get('handles',[])

# handle_Erstellen Sie einen Json, um die Info-Methode aufzurufen
data = {"janus":'handle_info', "admin_secret": janus_admin_secret, "transaction": transaction, "session_id": sessions_list[0], "handle_id": handles_list[0]}

websock.send(json.dumps(data))
rejson =  websock.recv()
print rejson
{
   "janus": "success",
   "transaction": "73677159",
   "session_id": 311091039069809,
   "handle_id": 1721128026873430,
   "info": {
      "session_id": 311091039069809,
      "session_last_activity": 1367674698,
      "session_transport": "janus.transport.http",
      "handle_id": 1721128026873430,
      "opaque_id": "videoroomtest-L4YiOtywt1nm",
      "created": 464048923,
      "send_thread_created": true,
      "current_time": 1368713443,
      "plugin": "janus.plugin.videoroom",
      "plugin_specific": {
         "type": "publisher",
         "room": 1234,
         "id": 4565592288551424,
         "private_id": 3477273478,
         "display": "You",
         "media": {
            "audio": true,
            "audio_codec": "opus",
            "video": true,
            "video_codec": "h264",
            "data": false
         },
         "bitrate": 128000,
         "audio-level-dBov": 0,
         "talking": false,
         "destroyed": 0
      },
      
・ ・ ・
(Kürzung)
・ ・ ・
   }
}

Ich werde die obigen Informationen erklären. Da das Info-Plugin "janus.plugin.videoroom" ist Sie können sehen, dass dieser Benutzer auf den Videoraum zugreift. Die Details zum Plugin finden Sie auch in plugin_specific. Sie können sehen, dass die Zimmernummer "1234" und der Name "Sie" ist. Darüber hinaus können Sie auch Informationen wie Codec, Bitrate und SDP abrufen.

Schließlich

Dieses Mal erklärte ich die grundlegende Verwendung der Admin-API. Es gibt viele andere Methoden in der Admin-API. Bitte überprüfen Sie die offizielle Website. Nächstes Mal möchte ich einen Artikel über die Plug-In-API schreiben.

Beiseite

Dies war mein erster Qiita-Artikel. Bitte weisen Sie auf Fehler hin.

Recommended Posts

Versuchen Sie es mit der Admin-API von Janus Gateway
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der PeeringDB 2.0-API
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit der Aktions-API von Python argparse
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit PDFMiner
Versuchen Sie es mit Geopandas
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Versuchen Sie es mit pandas.DataFrame
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Versuchen Sie es mit der Kabu Station API von au Kabucom Securities
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen
Versuchen Sie es mit virtualenv (virtualenvwrapper)
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Versuchen Sie es jetzt mit virtualenv
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Versuchen Sie es mit W & B.
Versuchen Sie es mit Django templates.html
[Kaggle] Versuchen Sie es mit LGBM
Versuchen Sie es mit dem Feed-Parser von Python.
Versuchen Sie es mit Pythons Tkinter
Probieren Sie die C ++ - API von NNabla aus
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit Pytorchs collate_fn
Versuchen Sie, Lebensmittelfotos mithilfe der Google Cloud Vision-API zu beurteilen
Versuchen Sie vorerst, die Docomo-Chat-Dialog-API zu verwenden
Versuchen Sie, PythonTex mit Texpad zu verwenden.
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Jupyters Docker-Image
Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode
Versuchen Sie die Funktionsoptimierung mit Hyperopt
Testen Sie die CloudStack-API mit Simulator
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie es mit Azure Logic Apps
Alterserkennung mit Peppers API
Versuchen Sie es mit Kubernetes Client -Python-
[Kaggle] Versuchen Sie es mit xg boost
Versuchen Sie es mit OpenCV unter Windows
Laden Sie Videos mit der YouTube-API hoch
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
Versuchen Sie es mit AWS SageMaker Studio
Versuchen Sie, automatisch mit Selen zu twittern.
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 1)
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 2)
Versuchen Sie es mit der Vorlagenfunktion von Django
Versuchen Sie es mit der Entwurfsfunktion von Pelican