[PYTHON] Essayez d'utiliser l'API Admin de la passerelle Janus

Aperçu

Il existe de nombreux articles sur le serveur multimédia WebRTC appelé passerelle Janus, Il n'y a presque aucune utilisation non officielle de l'API fournie. J'ai eu du mal à le découvrir, alors j'aimerais le résumer ici.

Site de référence

Type d'API

Il existe deux principaux types d'API fournis par Janus.

Une API pour gérer et surveiller Janus. Je vais l'utiliser dans cet article.

Janus propose un certain nombre de plugins pour les appels vidéo, le streaming, le SIP, etc. C'est une API pour faire fonctionner le plug-in. Je vais l'utiliser dans le prochain article.

Essayez d'utiliser l'API Admin via Websocket

Définir la configuration de Janus

Définissez le mot de passe à utiliser lors de l'appel de l'API Admin.

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


[general]
admin_secret = password

Définissez-le pour qu'il soit disponible via Websocket. Cette fois, nous définissons ws, mais si le chiffrement est requis, définissons wss et préparons le certificat. Assurez-vous également que le port spécifié ici n'est pas bloqué par FW ou autre.

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


[admin]
admin_ws = yes
admin_ws_port = 7188

Écrire du code en Python

La version Python est 2.7. Cette fois, je surveillerai les informations des utilisateurs qui ont accédé à Janus.

Tout d'abord, obtenez la liste des sessions auxquelles vous accédez.

python


import websocket
import json
import random
import string

#Point de terminaison Janus
janus_admin_url = 'ws://10.0.0.1:7188/janus'

#Mot de passe administrateur
janus_admin_secret = 'password'

#Génération de caractères aléatoires
def random_string(length, seq=string.digits):
    sr = random.SystemRandom()
    return ''.join([sr.choice(seq) for i in range(length)])

#8 caractères aléatoires
transaction = random_string(8)

# list_Créez un Json pour appeler la méthode sessions
data = {"janus":'list_sessions', "admin_secret": janus_admin_secret, "transaction": transaction}

#Créer une connexion Websocket
websock = websocket.create_connection(janus_admin_url,subprotocols=["janus-admin-protocol"])

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

#Recevoir
rejson =  websock.recv()

#Afficher le résultat de la réception
print rejson
{
   "janus": "success",
   "transaction": "73677159",
   "sessions": [
      311091039069809
   ]
}

Ensuite, récupérez la liste que la session gère. Plusieurs poignées sont renvoyées, par exemple si plusieurs plug-ins sont utilisés.

python


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

# list_Créez un Json qui appelle la méthode handles
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
   ]
}

Enfin, obtenez les informations relatives à ce descripteur.

python


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

# handle_Créez un Json pour appeler la méthode info
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
      },
      
・ ・ ・
(réduction)
・ ・ ・
   }
}

Je vais expliquer les informations ci-dessus. Puisque le plugin info est "janus.plugin.videoroom" Vous pouvez voir que cet utilisateur accède à la salle vidéo. De plus, les détails du plugin peuvent être trouvés dans plugin_specific. Vous pouvez voir que le numéro de chambre est "1234" et que le nom est "Vous". En outre, vous pouvez également obtenir des informations telles que le codec, le débit binaire et SDP.

finalement

Cette fois, j'ai expliqué l'utilisation de base de l'API Admin. Il existe de nombreuses autres méthodes dans l'API Admin. Veuillez consulter le site officiel. La prochaine fois, j'aimerais écrire un article sur l'API du plug-in.

De côté

C'était mon premier article sur Qiita. Veuillez signaler toute erreur.

Recommended Posts

Essayez d'utiliser l'API Admin de la passerelle Janus
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API PeeringDB 2.0
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Essayez d'utiliser l'API d'action de Python argparse
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser Cookiecutter
Essayez d'utiliser PDFMiner
Essayez d'utiliser des géopandas
Essayez d'utiliser Selenium
Essayez d'utiliser scipy
Essayez d'utiliser pandas.DataFrame
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser PyODE
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Essayez d'utiliser l'API kabu station de au Kabucom Securities
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
Essayez de dessiner un graphe social à l'aide de l'API Twitter v2
Essayez d'utiliser virtualenv (virtualenvwrapper)
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
[Azure] Essayez d'utiliser Azure Functions
Essayez d'utiliser virtualenv maintenant
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Essayez d'utiliser W & B
Essayez d'utiliser Django templates.html
[Kaggle] Essayez d'utiliser LGBM
Essayez d'utiliser l'analyseur de flux de Python.
Essayez d'utiliser Tkinter de Python
Essayez l'API C ++ de NNabla
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser collate_fn de Pytorch
Essayez de juger des photos de plats à l'aide de l'API Google Cloud Vision
Pour le moment, essayez d'utiliser l'API de dialogue de discussion docomo
Essayez d'utiliser PythonTex avec Texpad.
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser l'image Docker de Jupyter
Essayez d'utiliser scikit-learn (1) - Clustering K par méthode moyenne
Essayez l'optimisation des fonctions à l'aide d'Hyperopt
Tester l'API CloudStack à l'aide du simulateur
Essayez d'utiliser matplotlib avec PyCharm
Essayez d'utiliser Azure Logic Apps
Reconnaissance de l'âge à l'aide de l'API de Pepper
Essayez d'utiliser Kubernetes Client -Python-
[Kaggle] Essayez d'utiliser xg boost
Essayez d'utiliser OpenCV sur Windows
Mettre en ligne des vidéos à l'aide de l'API YouTube
Essayez d'utiliser Jupyter Notebook de manière dynamique
Essayez d'utiliser AWS SageMaker Studio
Essayez de tweeter automatiquement en utilisant Selenium.
Essayez d'utiliser SQLAlchemy + MySQL (partie 1)
Essayez d'utiliser SQLAlchemy + MySQL (partie 2)
Essayez d'utiliser la fonction de modèle de Django
Essayez d'utiliser la fonction de brouillon de Pelican