Janus WebRTC gateway Python async client.
Project description
Python Janus Client
Janus WebRTC gateway Python async client.
Install
pip install janus-client
Description
This Python client communicates with Janus WebRTC server to use provided services.
It's using aiortc
for WebRTC communication and subsequently PyAV
for media stack.
FFmpeg support for VideoRoom plugin has now been moved to experiments
folder, together with GStreamer support.
Goals
- Simple interface
- Minimal dependency/Maximum compatibility
- Extendable
✅ Features ✅
- Connect to Janus server using:
- Websocket
- HTTP
- Manage Janus client connection, session, and plugins
- Multiple connections in parallel
- Direct message transactions to correct senders asynchronously
- Support authentication with shared static secret (API key) and/or stored token
- Expose Admin/Monitor API client
- Support Janus plugins:
- EchoTest plugin
- VideoCall plugin (Please refer to eg_videocall_in.py and eg_videocall_out.py)
- VideoRoom plugin
Examples
Simple Connect And Disconnect
import asyncio
from janus_client import JanusSession, JanusEchoTestPlugin, JanusVideoRoomPlugin
# Protocol will be derived from base_url
base_url = "wss://janusmy.josephgetmyip.com/janusbasews/janus"
# OR
base_url = "https://janusmy.josephgetmyip.com/janusbase/janus"
session = JanusSession(base_url=base_url)
plugin_handle = JanusEchoTestPlugin()
# Attach to Janus session
await plugin_handle.attach(session=session)
# Destroy plugin handle
await plugin_handle.destroy()
This will create a plugin handle and then destroy it.
Notice that we don't need to call connect or disconnect explicitly. It's managed internally.
Make Video Calls
import asyncio
from janus_client import JanusSession, JanusVideoCallPlugin
from aiortc.contrib.media import MediaPlayer, MediaRecorder
async def main():
# Create session
session = JanusSession(
base_url="wss://janusmy.josephgetmyip.com/janusbasews/janus",
)
# Create plugin
plugin_handle = JanusVideoCallPlugin()
# Attach to Janus session
await plugin_handle.attach(session=session)
# Prepare username and media stream
username = "testusernamein"
username_out = "testusernameout"
player = MediaPlayer(
"desktop",
format="gdigrab",
options={
"video_size": "640x480",
"framerate": "30",
"offset_x": "20",
"offset_y": "30",
},
)
recorder = MediaRecorder("./videocall_record_out.mp4")
# Register myself as testusernameout
result = await plugin_handle.register(username=username_out)
# Call testusernamein
result = await plugin_handle.call(
username=username, player=player, recorder=recorder
)
# Wait awhile then hangup
await asyncio.sleep(30)
result = await plugin_handle.hangup()
# Destroy plugin
await plugin_handle.destroy()
# Destroy session
await session.destroy()
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
pass
This example will register to the VideoCall plugin using username testusernameout
. It will then call the user registered using the username testusernamein
.
A portion of the screen will be captured and sent in the call media stream.
The incoming media stream will be saved into videocall_record_out.mp4
file.
Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file janus_client-0.6.0.tar.gz
.
File metadata
- Download URL: janus_client-0.6.0.tar.gz
- Upload date:
- Size: 31.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 10039e84cb58f8668a66a2ebb7e261d49bff321f4501bbc337194c871fedb289 |
|
MD5 | 533955125679a31b60580cdbefbe0da6 |
|
BLAKE2b-256 | b4d35aad84f13224c232dfb83690f3f0c316657c1853cd3aa3b381dab9302218 |
File details
Details for the file janus_client-0.6.0-py3-none-any.whl
.
File metadata
- Download URL: janus_client-0.6.0-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 65a8f626eff7e1d187130d21ba2620f0c87a580e73c6c2a1190d34ccd2551923 |
|
MD5 | 269f0b258f8ca19c2b77b05139f40378 |
|
BLAKE2b-256 | df96cb8d9971d65688f17a508e97101a6dc36ced383535b2db12e11ab6987d31 |