Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions examples/data_tracks/publisher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import os
import logging
import asyncio
from signal import SIGINT, SIGTERM
from livekit import rtc

# Set the following environment variables with your own values
TOKEN = os.environ.get("LIVEKIT_TOKEN")
URL = os.environ.get("LIVEKIT_URL")

async def read_sensor() -> bytes:
# Dynamically read some sensor data...
return bytes([0xFA] * 256)

async def push_frames(track: rtc.LocalDataTrack):
while True:
data = await read_sensor()
try:
track.try_push(rtc.DataTrackFrame(payload=data).with_user_timestamp_now())
except rtc.PushFrameError as e:
logging.error("Failed to push frame: %s", e)
await asyncio.sleep(0.5)

async def main(room: rtc.Room):
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

await room.connect(URL, TOKEN)
logger.info("connected to room %s", room.name)

track = await room.local_participant.publish_data_track("my_sensor_data")
await push_frames(track)

if __name__ == "__main__":
logging.basicConfig(
level=logging.INFO,
handlers=[
logging.FileHandler("publisher.log"),
logging.StreamHandler(),
],
)

loop = asyncio.get_event_loop()
room = rtc.Room(loop=loop)

main_task = asyncio.ensure_future(main(room))

async def cleanup():
main_task.cancel()
try:
await main_task
except asyncio.CancelledError:
pass
await room.disconnect()
loop.stop()

for signal in [SIGINT, SIGTERM]:
loop.add_signal_handler(signal, lambda: asyncio.ensure_future(cleanup()))

try:
loop.run_forever()
finally:
loop.close()
64 changes: 64 additions & 0 deletions examples/data_tracks/subscriber.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import os
import logging
import asyncio
from signal import SIGINT, SIGTERM
from livekit import rtc

# Set the following environment variables with your own values
TOKEN = os.environ.get("LIVEKIT_TOKEN")
URL = os.environ.get("LIVEKIT_URL")

async def subscribe(track: rtc.RemoteDataTrack):
logging.info(
"Subscribing to '%s' published by '%s'",
track.info.name,
track.publisher_identity,
)
subscription = await track.subscribe()
async for frame in subscription:
logging.info("Received frame (%d bytes)", len(frame.payload))

latency = frame.duration_since_timestamp()
if latency is not None:
logging.info("Latency: %.3f s", latency)

async def main(room: rtc.Room):
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

active_tasks = []

@room.on("remote_data_track_published")
def on_remote_data_track_published(track: rtc.RemoteDataTrack):
task = asyncio.create_task(subscribe(track))
active_tasks.append(task)
task.add_done_callback(lambda _: active_tasks.remove(task))

await room.connect(URL, TOKEN)
logger.info("connected to room %s", room.name)


if __name__ == "__main__":
logging.basicConfig(
level=logging.INFO,
handlers=[
logging.FileHandler("subscriber.log"),
logging.StreamHandler(),
],
)

loop = asyncio.get_event_loop()
room = rtc.Room(loop=loop)

async def cleanup():
await room.disconnect()
loop.stop()

asyncio.ensure_future(main(room))
for signal in [SIGINT, SIGTERM]:
loop.add_signal_handler(signal, lambda: asyncio.ensure_future(cleanup()))

try:
loop.run_forever()
finally:
loop.close()
2 changes: 1 addition & 1 deletion livekit-protocol/protocol
Submodule protocol updated 96 files
+5 −0 .changeset/mighty-beans-taste.md
+18 −0 CHANGELOG.md
+3 −0 auth/grants.go
+226 −0 codecs/codecs.go
+365 −0 codecs/mime/mimetype.go
+5 −5 go.mod
+12 −12 go.sum
+1 −1 infra/link_grpc.pb.go
+1 −1 livekit/agent/livekit_agent_session.pb.go
+35 −312 livekit/livekit_agent.pb.go
+849 −91 livekit/livekit_cloud_agent.pb.go
+1,319 −177 livekit/livekit_cloud_agent.twirp.go
+56 −22 livekit/livekit_connector_whatsapp.pb.go
+13 −3 livekit/livekit_egress.pb.go
+207 −206 livekit/livekit_egress.twirp.go
+42 −20 livekit/livekit_ingress.pb.go
+101 −98 livekit/livekit_ingress.twirp.go
+317 −197 livekit/livekit_models.pb.go
+1 −1 livekit/livekit_phone_number.pb.go
+77 −76 livekit/livekit_phone_number.twirp.go
+1 −1 livekit/livekit_room.twirp.go
+116 −105 livekit/livekit_rtc.pb.go
+45 −35 livekit/livekit_sip.pb.go
+330 −330 livekit/livekit_sip.twirp.go
+1 −1 livekit/logger/options.pb.go
+130 −0 livekit/types.go
+0 −2 magefile.go
+365 −0 mimetype/mimetype.go
+1 −1 observability/agentsobs/gen_reporter.go
+51 −0 observability/core_callobs/gen_reporter.go
+69 −0 observability/core_callobs/gen_reporter_noop.go
+44 −0 observability/core_callobs/gen_source.go
+149 −0 observability/egressobs/egress.go
+289 −0 observability/egressobs/egress_test.go
+33 −11 observability/egressobs/gen_reporter.go
+37 −10 observability/egressobs/gen_reporter_noop.go
+23 −8 observability/egressobs/gen_source.go
+4 −1 observability/gatewayobs/gen_reporter.go
+14 −11 observability/gatewayobs/gen_reporter_noop.go
+8 −0 observability/gatewayobs/gen_source.go
+63 −0 observability/ingressobs/gen_reporter.go
+87 −0 observability/ingressobs/gen_reporter_noop.go
+33 −0 observability/ingressobs/gen_source.go
+30 −8 observability/reporter.go
+1 −1 observability/roomobs/gen_reporter.go
+46 −0 observability/storageobs/gen_reporter.go
+64 −0 observability/storageobs/gen_reporter_noop.go
+25 −0 observability/storageobs/gen_source.go
+78 −0 observability/telephony_callobs/gen_reporter.go
+96 −0 observability/telephony_callobs/gen_reporter_noop.go
+75 −0 observability/telephony_callobs/gen_source.go
+1 −1 observability/telephonyobs/gen_reporter.go
+1 −1 package.json
+32 −0 packages/javascript/CHANGELOG.md
+1 −1 packages/javascript/package.json
+2 −0 protobufs/agent/livekit_agent_session.proto
+78 −0 protobufs/agent/livekit_agent_text.proto
+0 −29 protobufs/livekit_agent.proto
+72 −0 protobufs/livekit_cloud_agent.proto
+8 −2 protobufs/livekit_connector_whatsapp.proto
+2 −1 protobufs/livekit_egress.proto
+4 −0 protobufs/livekit_ingress.proto
+21 −2 protobufs/livekit_models.proto
+2 −0 protobufs/livekit_phone_number.proto
+1 −1 protobufs/livekit_room.proto
+18 −12 protobufs/livekit_rtc.proto
+21 −72 protobufs/livekit_sip.proto
+2 −0 protobufs/logger/options.proto
+0 −26 protobufs/rpc/common.proto
+0 −75 protobufs/rpc/connector.proto
+1 −0 protobufs/rpc/egress.proto
+0 −10 protobufs/rpc/ingress.proto
+31 −25 protobufs/rpc/io.proto
+7 −1 protobufs/rpc/sip.proto
+1 −1 rpc/analytics_grpc.pb.go
+0 −164 rpc/common.pb.go
+0 −294 rpc/connector.pb.go
+0 −365 rpc/connector.psrpc.go
+0 −52 rpc/connector_client.go
+12 −2 rpc/egress.pb.go
+38 −37 rpc/egress.psrpc.go
+18 −22 rpc/ingress.pb.go
+59 −85 rpc/ingress.psrpc.go
+121 −82 rpc/io.pb.go
+129 −126 rpc/io.psrpc.go
+65 −35 rpc/sip.pb.go
+76 −72 rpc/sip.psrpc.go
+10 −4 sip/sip.go
+165 −65 sip/sip_test.go
+2 −1 utils/closers.go
+38 −33 utils/guid/id.go
+11 −10 utils/hwstats/cpu.go
+28 −25 utils/id.go
+17 −28 utils/mono/mono.go
+63 −4 utils/mono/mono_test.go
+25 −0 utils/stack/stack.go
1 change: 1 addition & 0 deletions livekit-rtc/generate_proto.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ protoc \
$FFI_PROTOCOL/participant.proto \
$FFI_PROTOCOL/room.proto \
$FFI_PROTOCOL/track.proto \
$FFI_PROTOCOL/data_track.proto \
$FFI_PROTOCOL/video_frame.proto \
$FFI_PROTOCOL/e2ee.proto \
$FFI_PROTOCOL/stats.proto \
Expand Down
16 changes: 16 additions & 0 deletions livekit-rtc/livekit/rtc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@
ByteStreamWriter,
ByteStreamReader,
)
from .data_track import (
LocalDataTrack,
RemoteDataTrack,
DataTrackSubscription,
DataTrackFrame,
DataTrackInfo,
DataTrackOptions,
PushFrameError,
)
from .frame_processor import FrameProcessor

__all__ = [
Expand Down Expand Up @@ -186,6 +195,13 @@
"ByteStreamWriter",
"AudioProcessingModule",
"FrameProcessor",
"LocalDataTrack",
"RemoteDataTrack",
"DataTrackSubscription",
"DataTrackFrame",
"DataTrackInfo",
"DataTrackOptions",
"PushFrameError",
"__version__",
]

Expand Down
74 changes: 74 additions & 0 deletions livekit-rtc/livekit/rtc/_proto/data_track_pb2.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading