livekit 1.0.0__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. {livekit-1.0.0 → livekit-1.0.2}/PKG-INFO +1 -1
  2. livekit-1.0.2/livekit/rtc/_proto/audio_frame_pb2.py +129 -0
  3. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/audio_frame_pb2.pyi +35 -0
  4. livekit-1.0.2/livekit/rtc/_proto/ffi_pb2.py +52 -0
  5. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/ffi_pb2.pyi +14 -6
  6. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/apm.py +25 -0
  7. livekit-1.0.2/livekit/rtc/jupyter.py +53 -0
  8. livekit-1.0.2/livekit/rtc/resources/jupyter-html/index.html +101 -0
  9. livekit-1.0.2/livekit/rtc/version.py +1 -0
  10. {livekit-1.0.0 → livekit-1.0.2}/livekit.egg-info/PKG-INFO +1 -1
  11. {livekit-1.0.0 → livekit-1.0.2}/livekit.egg-info/SOURCES.txt +2 -0
  12. {livekit-1.0.0 → livekit-1.0.2}/setup.py +8 -1
  13. livekit-1.0.0/livekit/rtc/_proto/audio_frame_pb2.py +0 -125
  14. livekit-1.0.0/livekit/rtc/_proto/ffi_pb2.py +0 -52
  15. livekit-1.0.0/livekit/rtc/version.py +0 -1
  16. {livekit-1.0.0 → livekit-1.0.2}/README.md +0 -0
  17. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/__init__.py +0 -0
  18. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_ffi_client.py +0 -0
  19. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/__init__.py +0 -0
  20. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/e2ee_pb2.py +0 -0
  21. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/e2ee_pb2.pyi +0 -0
  22. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/handle_pb2.py +0 -0
  23. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/handle_pb2.pyi +0 -0
  24. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/participant_pb2.py +0 -0
  25. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/participant_pb2.pyi +0 -0
  26. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/room_pb2.py +0 -0
  27. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/room_pb2.pyi +0 -0
  28. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/rpc_pb2.py +0 -0
  29. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/rpc_pb2.pyi +0 -0
  30. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/stats_pb2.py +0 -0
  31. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/stats_pb2.pyi +0 -0
  32. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/track_pb2.py +0 -0
  33. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/track_pb2.pyi +0 -0
  34. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/track_publication_pb2.py +0 -0
  35. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/track_publication_pb2.pyi +0 -0
  36. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/video_frame_pb2.py +0 -0
  37. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_proto/video_frame_pb2.pyi +0 -0
  38. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/_utils.py +0 -0
  39. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_filter.py +0 -0
  40. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_frame.py +0 -0
  41. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_mixer.py +0 -0
  42. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_resampler.py +0 -0
  43. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_source.py +0 -0
  44. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/audio_stream.py +0 -0
  45. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/data_stream.py +0 -0
  46. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/e2ee.py +0 -0
  47. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/event_emitter.py +0 -0
  48. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/log.py +0 -0
  49. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/participant.py +0 -0
  50. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/py.typed +0 -0
  51. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/resources/__init__.py +0 -0
  52. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/room.py +0 -0
  53. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/rpc.py +0 -0
  54. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/synchronizer.py +0 -0
  55. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/track.py +0 -0
  56. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/track_publication.py +0 -0
  57. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/transcription.py +0 -0
  58. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/utils.py +0 -0
  59. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/video_frame.py +0 -0
  60. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/video_source.py +0 -0
  61. {livekit-1.0.0 → livekit-1.0.2}/livekit/rtc/video_stream.py +0 -0
  62. {livekit-1.0.0 → livekit-1.0.2}/livekit.egg-info/dependency_links.txt +0 -0
  63. {livekit-1.0.0 → livekit-1.0.2}/livekit.egg-info/requires.txt +0 -0
  64. {livekit-1.0.0 → livekit-1.0.2}/livekit.egg-info/top_level.txt +0 -0
  65. {livekit-1.0.0 → livekit-1.0.2}/pyproject.toml +0 -0
  66. {livekit-1.0.0 → livekit-1.0.2}/setup.cfg +0 -0
  67. {livekit-1.0.0 → livekit-1.0.2}/tests/test_apm.py +0 -0
  68. {livekit-1.0.0 → livekit-1.0.2}/tests/test_emitter.py +0 -0
  69. {livekit-1.0.0 → livekit-1.0.2}/tests/test_mixer.py +0 -0
  70. {livekit-1.0.0 → livekit-1.0.2}/tests/test_resampler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: livekit
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Python Real-time SDK for LiveKit
5
5
  Home-page: https://github.com/livekit/python-sdks
6
6
  License: Apache-2.0
@@ -0,0 +1,129 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: audio_frame.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from . import handle_pb2 as handle__pb2
16
+ from . import track_pb2 as track__pb2
17
+
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x61udio_frame.proto\x12\rlivekit.proto\x1a\x0chandle.proto\x1a\x0btrack.proto\"\xc4\x01\n\x15NewAudioStreamRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.AudioStreamType\x12\x13\n\x0bsample_rate\x18\x03 \x01(\r\x12\x14\n\x0cnum_channels\x18\x04 \x01(\r\x12\x1e\n\x16\x61udio_filter_module_id\x18\x05 \x01(\t\x12\x1c\n\x14\x61udio_filter_options\x18\x06 \x01(\t\"I\n\x16NewAudioStreamResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedAudioStream\"\x88\x02\n!AudioStreamFromParticipantRequest\x12\x1a\n\x12participant_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.AudioStreamType\x12\x30\n\x0ctrack_source\x18\x03 \x01(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x13\n\x0bsample_rate\x18\x05 \x01(\r\x12\x14\n\x0cnum_channels\x18\x06 \x01(\r\x12\x1e\n\x16\x61udio_filter_module_id\x18\x07 \x01(\t\x12\x1c\n\x14\x61udio_filter_options\x18\x08 \x01(\t\"U\n\"AudioStreamFromParticipantResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedAudioStream\"\xbb\x01\n\x15NewAudioSourceRequest\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.AudioSourceType\x12\x32\n\x07options\x18\x02 \x01(\x0b\x32!.livekit.proto.AudioSourceOptions\x12\x13\n\x0bsample_rate\x18\x03 \x02(\r\x12\x14\n\x0cnum_channels\x18\x04 \x02(\r\x12\x15\n\rqueue_size_ms\x18\x05 \x01(\r\"I\n\x16NewAudioSourceResponse\x12/\n\x06source\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedAudioSource\"f\n\x18\x43\x61ptureAudioFrameRequest\x12\x15\n\rsource_handle\x18\x01 \x02(\x04\x12\x33\n\x06\x62uffer\x18\x02 \x02(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\"-\n\x19\x43\x61ptureAudioFrameResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"<\n\x19\x43\x61ptureAudioFrameCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"0\n\x17\x43learAudioBufferRequest\x12\x15\n\rsource_handle\x18\x01 \x02(\x04\"\x1a\n\x18\x43learAudioBufferResponse\"\x1a\n\x18NewAudioResamplerRequest\"R\n\x19NewAudioResamplerResponse\x12\x35\n\tresampler\x18\x01 \x02(\x0b\x32\".livekit.proto.OwnedAudioResampler\"\x93\x01\n\x17RemixAndResampleRequest\x12\x18\n\x10resampler_handle\x18\x01 \x02(\x04\x12\x33\n\x06\x62uffer\x18\x02 \x02(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\x12\x14\n\x0cnum_channels\x18\x03 \x02(\r\x12\x13\n\x0bsample_rate\x18\x04 \x02(\r\"P\n\x18RemixAndResampleResponse\x12\x34\n\x06\x62uffer\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedAudioFrameBuffer\"\x95\x01\n\rNewApmRequest\x12\x1e\n\x16\x65\x63ho_canceller_enabled\x18\x01 \x02(\x08\x12\x1f\n\x17gain_controller_enabled\x18\x02 \x02(\x08\x12 \n\x18high_pass_filter_enabled\x18\x03 \x02(\x08\x12!\n\x19noise_suppression_enabled\x18\x04 \x02(\x08\"6\n\x0eNewApmResponse\x12$\n\x03\x61pm\x18\x01 \x02(\x0b\x32\x17.livekit.proto.OwnedApm\"x\n\x17\x41pmProcessStreamRequest\x12\x12\n\napm_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_ptr\x18\x02 \x02(\x04\x12\x0c\n\x04size\x18\x03 \x02(\r\x12\x13\n\x0bsample_rate\x18\x04 \x02(\r\x12\x14\n\x0cnum_channels\x18\x05 \x02(\r\")\n\x18\x41pmProcessStreamResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"\x7f\n\x1e\x41pmProcessReverseStreamRequest\x12\x12\n\napm_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_ptr\x18\x02 \x02(\x04\x12\x0c\n\x04size\x18\x03 \x02(\r\x12\x13\n\x0bsample_rate\x18\x04 \x02(\r\x12\x14\n\x0cnum_channels\x18\x05 \x02(\r\"0\n\x1f\x41pmProcessReverseStreamResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"@\n\x18\x41pmSetStreamDelayRequest\x12\x12\n\napm_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x65lay_ms\x18\x02 \x02(\x05\"*\n\x19\x41pmSetStreamDelayResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"\x9c\x02\n\x16NewSoxResamplerRequest\x12\x12\n\ninput_rate\x18\x01 \x02(\x01\x12\x13\n\x0boutput_rate\x18\x02 \x02(\x01\x12\x14\n\x0cnum_channels\x18\x03 \x02(\r\x12<\n\x0finput_data_type\x18\x04 \x02(\x0e\x32#.livekit.proto.SoxResamplerDataType\x12=\n\x10output_data_type\x18\x05 \x02(\x0e\x32#.livekit.proto.SoxResamplerDataType\x12\x37\n\x0equality_recipe\x18\x06 \x02(\x0e\x32\x1f.livekit.proto.SoxQualityRecipe\x12\r\n\x05\x66lags\x18\x07 \x01(\r\"l\n\x17NewSoxResamplerResponse\x12\x35\n\tresampler\x18\x01 \x01(\x0b\x32 .livekit.proto.OwnedSoxResamplerH\x00\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x42\t\n\x07message\"S\n\x17PushSoxResamplerRequest\x12\x18\n\x10resampler_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_ptr\x18\x02 \x02(\x04\x12\x0c\n\x04size\x18\x03 \x02(\r\"K\n\x18PushSoxResamplerResponse\x12\x12\n\noutput_ptr\x18\x01 \x02(\x04\x12\x0c\n\x04size\x18\x02 \x02(\r\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"4\n\x18\x46lushSoxResamplerRequest\x12\x18\n\x10resampler_handle\x18\x01 \x02(\x04\"L\n\x19\x46lushSoxResamplerResponse\x12\x12\n\noutput_ptr\x18\x01 \x02(\x04\x12\x0c\n\x04size\x18\x02 \x02(\r\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"p\n\x14\x41udioFrameBufferInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x02(\x04\x12\x14\n\x0cnum_channels\x18\x02 \x02(\r\x12\x13\n\x0bsample_rate\x18\x03 \x02(\r\x12\x1b\n\x13samples_per_channel\x18\x04 \x02(\r\"y\n\x15OwnedAudioFrameBuffer\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\x31\n\x04info\x18\x02 \x02(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\"?\n\x0f\x41udioStreamInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.AudioStreamType\"o\n\x10OwnedAudioStream\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.AudioStreamInfo\"\x9f\x01\n\x10\x41udioStreamEvent\x12\x15\n\rstream_handle\x18\x01 \x02(\x04\x12;\n\x0e\x66rame_received\x18\x02 \x01(\x0b\x32!.livekit.proto.AudioFrameReceivedH\x00\x12,\n\x03\x65os\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.AudioStreamEOSH\x00\x42\t\n\x07message\"I\n\x12\x41udioFrameReceived\x12\x33\n\x05\x66rame\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedAudioFrameBuffer\"\x10\n\x0e\x41udioStreamEOS\"e\n\x12\x41udioSourceOptions\x12\x19\n\x11\x65\x63ho_cancellation\x18\x01 \x02(\x08\x12\x19\n\x11noise_suppression\x18\x02 \x02(\x08\x12\x19\n\x11\x61uto_gain_control\x18\x03 \x02(\x08\"?\n\x0f\x41udioSourceInfo\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.AudioSourceType\"o\n\x10OwnedAudioSource\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.AudioSourceInfo\"\x14\n\x12\x41udioResamplerInfo\"u\n\x13OwnedAudioResampler\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12/\n\x04info\x18\x02 \x02(\x0b\x32!.livekit.proto.AudioResamplerInfo\"9\n\x08OwnedApm\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\"\x12\n\x10SoxResamplerInfo\"q\n\x11OwnedSoxResampler\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12-\n\x04info\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.SoxResamplerInfo\"\\\n\x1cLoadAudioFilterPluginRequest\x12\x13\n\x0bplugin_path\x18\x01 \x02(\t\x12\x14\n\x0c\x64\x65pendencies\x18\x02 \x03(\t\x12\x11\n\tmodule_id\x18\x03 \x02(\t\".\n\x1dLoadAudioFilterPluginResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t*J\n\x14SoxResamplerDataType\x12\x18\n\x14SOXR_DATATYPE_INT16I\x10\x00\x12\x18\n\x14SOXR_DATATYPE_INT16S\x10\x01*\x8b\x01\n\x10SoxQualityRecipe\x12\x16\n\x12SOXR_QUALITY_QUICK\x10\x00\x12\x14\n\x10SOXR_QUALITY_LOW\x10\x01\x12\x17\n\x13SOXR_QUALITY_MEDIUM\x10\x02\x12\x15\n\x11SOXR_QUALITY_HIGH\x10\x03\x12\x19\n\x15SOXR_QUALITY_VERYHIGH\x10\x04*\x97\x01\n\x0bSoxFlagBits\x12\x16\n\x12SOXR_ROLLOFF_SMALL\x10\x00\x12\x17\n\x13SOXR_ROLLOFF_MEDIUM\x10\x01\x12\x15\n\x11SOXR_ROLLOFF_NONE\x10\x02\x12\x18\n\x14SOXR_HIGH_PREC_CLOCK\x10\x03\x12\x19\n\x15SOXR_DOUBLE_PRECISION\x10\x04\x12\x0b\n\x07SOXR_VR\x10\x05*A\n\x0f\x41udioStreamType\x12\x17\n\x13\x41UDIO_STREAM_NATIVE\x10\x00\x12\x15\n\x11\x41UDIO_STREAM_HTML\x10\x01**\n\x0f\x41udioSourceType\x12\x17\n\x13\x41UDIO_SOURCE_NATIVE\x10\x00\x42\x10\xaa\x02\rLiveKit.Proto')
20
+
21
+ _globals = globals()
22
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'audio_frame_pb2', _globals)
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ _globals['DESCRIPTOR']._options = None
26
+ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto'
27
+ _globals['_SOXRESAMPLERDATATYPE']._serialized_start=4372
28
+ _globals['_SOXRESAMPLERDATATYPE']._serialized_end=4446
29
+ _globals['_SOXQUALITYRECIPE']._serialized_start=4449
30
+ _globals['_SOXQUALITYRECIPE']._serialized_end=4588
31
+ _globals['_SOXFLAGBITS']._serialized_start=4591
32
+ _globals['_SOXFLAGBITS']._serialized_end=4742
33
+ _globals['_AUDIOSTREAMTYPE']._serialized_start=4744
34
+ _globals['_AUDIOSTREAMTYPE']._serialized_end=4809
35
+ _globals['_AUDIOSOURCETYPE']._serialized_start=4811
36
+ _globals['_AUDIOSOURCETYPE']._serialized_end=4853
37
+ _globals['_NEWAUDIOSTREAMREQUEST']._serialized_start=64
38
+ _globals['_NEWAUDIOSTREAMREQUEST']._serialized_end=260
39
+ _globals['_NEWAUDIOSTREAMRESPONSE']._serialized_start=262
40
+ _globals['_NEWAUDIOSTREAMRESPONSE']._serialized_end=335
41
+ _globals['_AUDIOSTREAMFROMPARTICIPANTREQUEST']._serialized_start=338
42
+ _globals['_AUDIOSTREAMFROMPARTICIPANTREQUEST']._serialized_end=602
43
+ _globals['_AUDIOSTREAMFROMPARTICIPANTRESPONSE']._serialized_start=604
44
+ _globals['_AUDIOSTREAMFROMPARTICIPANTRESPONSE']._serialized_end=689
45
+ _globals['_NEWAUDIOSOURCEREQUEST']._serialized_start=692
46
+ _globals['_NEWAUDIOSOURCEREQUEST']._serialized_end=879
47
+ _globals['_NEWAUDIOSOURCERESPONSE']._serialized_start=881
48
+ _globals['_NEWAUDIOSOURCERESPONSE']._serialized_end=954
49
+ _globals['_CAPTUREAUDIOFRAMEREQUEST']._serialized_start=956
50
+ _globals['_CAPTUREAUDIOFRAMEREQUEST']._serialized_end=1058
51
+ _globals['_CAPTUREAUDIOFRAMERESPONSE']._serialized_start=1060
52
+ _globals['_CAPTUREAUDIOFRAMERESPONSE']._serialized_end=1105
53
+ _globals['_CAPTUREAUDIOFRAMECALLBACK']._serialized_start=1107
54
+ _globals['_CAPTUREAUDIOFRAMECALLBACK']._serialized_end=1167
55
+ _globals['_CLEARAUDIOBUFFERREQUEST']._serialized_start=1169
56
+ _globals['_CLEARAUDIOBUFFERREQUEST']._serialized_end=1217
57
+ _globals['_CLEARAUDIOBUFFERRESPONSE']._serialized_start=1219
58
+ _globals['_CLEARAUDIOBUFFERRESPONSE']._serialized_end=1245
59
+ _globals['_NEWAUDIORESAMPLERREQUEST']._serialized_start=1247
60
+ _globals['_NEWAUDIORESAMPLERREQUEST']._serialized_end=1273
61
+ _globals['_NEWAUDIORESAMPLERRESPONSE']._serialized_start=1275
62
+ _globals['_NEWAUDIORESAMPLERRESPONSE']._serialized_end=1357
63
+ _globals['_REMIXANDRESAMPLEREQUEST']._serialized_start=1360
64
+ _globals['_REMIXANDRESAMPLEREQUEST']._serialized_end=1507
65
+ _globals['_REMIXANDRESAMPLERESPONSE']._serialized_start=1509
66
+ _globals['_REMIXANDRESAMPLERESPONSE']._serialized_end=1589
67
+ _globals['_NEWAPMREQUEST']._serialized_start=1592
68
+ _globals['_NEWAPMREQUEST']._serialized_end=1741
69
+ _globals['_NEWAPMRESPONSE']._serialized_start=1743
70
+ _globals['_NEWAPMRESPONSE']._serialized_end=1797
71
+ _globals['_APMPROCESSSTREAMREQUEST']._serialized_start=1799
72
+ _globals['_APMPROCESSSTREAMREQUEST']._serialized_end=1919
73
+ _globals['_APMPROCESSSTREAMRESPONSE']._serialized_start=1921
74
+ _globals['_APMPROCESSSTREAMRESPONSE']._serialized_end=1962
75
+ _globals['_APMPROCESSREVERSESTREAMREQUEST']._serialized_start=1964
76
+ _globals['_APMPROCESSREVERSESTREAMREQUEST']._serialized_end=2091
77
+ _globals['_APMPROCESSREVERSESTREAMRESPONSE']._serialized_start=2093
78
+ _globals['_APMPROCESSREVERSESTREAMRESPONSE']._serialized_end=2141
79
+ _globals['_APMSETSTREAMDELAYREQUEST']._serialized_start=2143
80
+ _globals['_APMSETSTREAMDELAYREQUEST']._serialized_end=2207
81
+ _globals['_APMSETSTREAMDELAYRESPONSE']._serialized_start=2209
82
+ _globals['_APMSETSTREAMDELAYRESPONSE']._serialized_end=2251
83
+ _globals['_NEWSOXRESAMPLERREQUEST']._serialized_start=2254
84
+ _globals['_NEWSOXRESAMPLERREQUEST']._serialized_end=2538
85
+ _globals['_NEWSOXRESAMPLERRESPONSE']._serialized_start=2540
86
+ _globals['_NEWSOXRESAMPLERRESPONSE']._serialized_end=2648
87
+ _globals['_PUSHSOXRESAMPLERREQUEST']._serialized_start=2650
88
+ _globals['_PUSHSOXRESAMPLERREQUEST']._serialized_end=2733
89
+ _globals['_PUSHSOXRESAMPLERRESPONSE']._serialized_start=2735
90
+ _globals['_PUSHSOXRESAMPLERRESPONSE']._serialized_end=2810
91
+ _globals['_FLUSHSOXRESAMPLERREQUEST']._serialized_start=2812
92
+ _globals['_FLUSHSOXRESAMPLERREQUEST']._serialized_end=2864
93
+ _globals['_FLUSHSOXRESAMPLERRESPONSE']._serialized_start=2866
94
+ _globals['_FLUSHSOXRESAMPLERRESPONSE']._serialized_end=2942
95
+ _globals['_AUDIOFRAMEBUFFERINFO']._serialized_start=2944
96
+ _globals['_AUDIOFRAMEBUFFERINFO']._serialized_end=3056
97
+ _globals['_OWNEDAUDIOFRAMEBUFFER']._serialized_start=3058
98
+ _globals['_OWNEDAUDIOFRAMEBUFFER']._serialized_end=3179
99
+ _globals['_AUDIOSTREAMINFO']._serialized_start=3181
100
+ _globals['_AUDIOSTREAMINFO']._serialized_end=3244
101
+ _globals['_OWNEDAUDIOSTREAM']._serialized_start=3246
102
+ _globals['_OWNEDAUDIOSTREAM']._serialized_end=3357
103
+ _globals['_AUDIOSTREAMEVENT']._serialized_start=3360
104
+ _globals['_AUDIOSTREAMEVENT']._serialized_end=3519
105
+ _globals['_AUDIOFRAMERECEIVED']._serialized_start=3521
106
+ _globals['_AUDIOFRAMERECEIVED']._serialized_end=3594
107
+ _globals['_AUDIOSTREAMEOS']._serialized_start=3596
108
+ _globals['_AUDIOSTREAMEOS']._serialized_end=3612
109
+ _globals['_AUDIOSOURCEOPTIONS']._serialized_start=3614
110
+ _globals['_AUDIOSOURCEOPTIONS']._serialized_end=3715
111
+ _globals['_AUDIOSOURCEINFO']._serialized_start=3717
112
+ _globals['_AUDIOSOURCEINFO']._serialized_end=3780
113
+ _globals['_OWNEDAUDIOSOURCE']._serialized_start=3782
114
+ _globals['_OWNEDAUDIOSOURCE']._serialized_end=3893
115
+ _globals['_AUDIORESAMPLERINFO']._serialized_start=3895
116
+ _globals['_AUDIORESAMPLERINFO']._serialized_end=3915
117
+ _globals['_OWNEDAUDIORESAMPLER']._serialized_start=3917
118
+ _globals['_OWNEDAUDIORESAMPLER']._serialized_end=4034
119
+ _globals['_OWNEDAPM']._serialized_start=4036
120
+ _globals['_OWNEDAPM']._serialized_end=4093
121
+ _globals['_SOXRESAMPLERINFO']._serialized_start=4095
122
+ _globals['_SOXRESAMPLERINFO']._serialized_end=4113
123
+ _globals['_OWNEDSOXRESAMPLER']._serialized_start=4115
124
+ _globals['_OWNEDSOXRESAMPLER']._serialized_end=4228
125
+ _globals['_LOADAUDIOFILTERPLUGINREQUEST']._serialized_start=4230
126
+ _globals['_LOADAUDIOFILTERPLUGINREQUEST']._serialized_end=4322
127
+ _globals['_LOADAUDIOFILTERPLUGINRESPONSE']._serialized_start=4324
128
+ _globals['_LOADAUDIOFILTERPLUGINRESPONSE']._serialized_end=4370
129
+ # @@protoc_insertion_point(module_scope)
@@ -585,6 +585,41 @@ class ApmProcessReverseStreamResponse(google.protobuf.message.Message):
585
585
 
586
586
  global___ApmProcessReverseStreamResponse = ApmProcessReverseStreamResponse
587
587
 
588
+ @typing.final
589
+ class ApmSetStreamDelayRequest(google.protobuf.message.Message):
590
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
591
+
592
+ APM_HANDLE_FIELD_NUMBER: builtins.int
593
+ DELAY_MS_FIELD_NUMBER: builtins.int
594
+ apm_handle: builtins.int
595
+ delay_ms: builtins.int
596
+ def __init__(
597
+ self,
598
+ *,
599
+ apm_handle: builtins.int | None = ...,
600
+ delay_ms: builtins.int | None = ...,
601
+ ) -> None: ...
602
+ def HasField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "delay_ms", b"delay_ms"]) -> builtins.bool: ...
603
+ def ClearField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "delay_ms", b"delay_ms"]) -> None: ...
604
+
605
+ global___ApmSetStreamDelayRequest = ApmSetStreamDelayRequest
606
+
607
+ @typing.final
608
+ class ApmSetStreamDelayResponse(google.protobuf.message.Message):
609
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
610
+
611
+ ERROR_FIELD_NUMBER: builtins.int
612
+ error: builtins.str
613
+ def __init__(
614
+ self,
615
+ *,
616
+ error: builtins.str | None = ...,
617
+ ) -> None: ...
618
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
619
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
620
+
621
+ global___ApmSetStreamDelayResponse = ApmSetStreamDelayResponse
622
+
588
623
  @typing.final
589
624
  class NewSoxResamplerRequest(google.protobuf.message.Message):
590
625
  """New resampler using SoX (much better quality)"""
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: ffi.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from . import e2ee_pb2 as e2ee__pb2
16
+ from . import track_pb2 as track__pb2
17
+ from . import track_publication_pb2 as track__publication__pb2
18
+ from . import room_pb2 as room__pb2
19
+ from . import video_frame_pb2 as video__frame__pb2
20
+ from . import audio_frame_pb2 as audio__frame__pb2
21
+ from . import rpc_pb2 as rpc__pb2
22
+
23
+
24
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tffi.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0btrack.proto\x1a\x17track_publication.proto\x1a\nroom.proto\x1a\x11video_frame.proto\x1a\x11\x61udio_frame.proto\x1a\trpc.proto\"\x8e\x1d\n\nFfiRequest\x12\x30\n\x07\x64ispose\x18\x02 \x01(\x0b\x32\x1d.livekit.proto.DisposeRequestH\x00\x12\x30\n\x07\x63onnect\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.ConnectRequestH\x00\x12\x36\n\ndisconnect\x18\x04 \x01(\x0b\x32 .livekit.proto.DisconnectRequestH\x00\x12;\n\rpublish_track\x18\x05 \x01(\x0b\x32\".livekit.proto.PublishTrackRequestH\x00\x12?\n\x0funpublish_track\x18\x06 \x01(\x0b\x32$.livekit.proto.UnpublishTrackRequestH\x00\x12\x39\n\x0cpublish_data\x18\x07 \x01(\x0b\x32!.livekit.proto.PublishDataRequestH\x00\x12=\n\x0eset_subscribed\x18\x08 \x01(\x0b\x32#.livekit.proto.SetSubscribedRequestH\x00\x12\x44\n\x12set_local_metadata\x18\t \x01(\x0b\x32&.livekit.proto.SetLocalMetadataRequestH\x00\x12<\n\x0eset_local_name\x18\n \x01(\x0b\x32\".livekit.proto.SetLocalNameRequestH\x00\x12H\n\x14set_local_attributes\x18\x0b \x01(\x0b\x32(.livekit.proto.SetLocalAttributesRequestH\x00\x12\x42\n\x11get_session_stats\x18\x0c \x01(\x0b\x32%.livekit.proto.GetSessionStatsRequestH\x00\x12K\n\x15publish_transcription\x18\r \x01(\x0b\x32*.livekit.proto.PublishTranscriptionRequestH\x00\x12@\n\x10publish_sip_dtmf\x18\x0e \x01(\x0b\x32$.livekit.proto.PublishSipDtmfRequestH\x00\x12\x44\n\x12\x63reate_video_track\x18\x0f \x01(\x0b\x32&.livekit.proto.CreateVideoTrackRequestH\x00\x12\x44\n\x12\x63reate_audio_track\x18\x10 \x01(\x0b\x32&.livekit.proto.CreateAudioTrackRequestH\x00\x12@\n\x10local_track_mute\x18\x11 \x01(\x0b\x32$.livekit.proto.LocalTrackMuteRequestH\x00\x12\x46\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32\'.livekit.proto.EnableRemoteTrackRequestH\x00\x12\x33\n\tget_stats\x18\x13 \x01(\x0b\x32\x1e.livekit.proto.GetStatsRequestH\x00\x12\x63\n\"set_track_subscription_permissions\x18\x30 \x01(\x0b\x32\x35.livekit.proto.SetTrackSubscriptionPermissionsRequestH\x00\x12@\n\x10new_video_stream\x18\x14 \x01(\x0b\x32$.livekit.proto.NewVideoStreamRequestH\x00\x12@\n\x10new_video_source\x18\x15 \x01(\x0b\x32$.livekit.proto.NewVideoSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32\'.livekit.proto.CaptureVideoFrameRequestH\x00\x12;\n\rvideo_convert\x18\x17 \x01(\x0b\x32\".livekit.proto.VideoConvertRequestH\x00\x12Y\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x30.livekit.proto.VideoStreamFromParticipantRequestH\x00\x12@\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32$.livekit.proto.NewAudioStreamRequestH\x00\x12@\n\x10new_audio_source\x18\x1a \x01(\x0b\x32$.livekit.proto.NewAudioSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32\'.livekit.proto.CaptureAudioFrameRequestH\x00\x12\x44\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32&.livekit.proto.ClearAudioBufferRequestH\x00\x12\x46\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32\'.livekit.proto.NewAudioResamplerRequestH\x00\x12\x44\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32&.livekit.proto.RemixAndResampleRequestH\x00\x12*\n\x04\x65\x32\x65\x65\x18\x1f \x01(\x0b\x32\x1a.livekit.proto.E2eeRequestH\x00\x12Y\n\x1d\x61udio_stream_from_participant\x18 \x01(\x0b\x32\x30.livekit.proto.AudioStreamFromParticipantRequestH\x00\x12\x42\n\x11new_sox_resampler\x18! \x01(\x0b\x32%.livekit.proto.NewSoxResamplerRequestH\x00\x12\x44\n\x12push_sox_resampler\x18\" \x01(\x0b\x32&.livekit.proto.PushSoxResamplerRequestH\x00\x12\x46\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32\'.livekit.proto.FlushSoxResamplerRequestH\x00\x12\x42\n\x11send_chat_message\x18$ \x01(\x0b\x32%.livekit.proto.SendChatMessageRequestH\x00\x12\x42\n\x11\x65\x64it_chat_message\x18% \x01(\x0b\x32%.livekit.proto.EditChatMessageRequestH\x00\x12\x37\n\x0bperform_rpc\x18& \x01(\x0b\x32 .livekit.proto.PerformRpcRequestH\x00\x12\x46\n\x13register_rpc_method\x18\' \x01(\x0b\x32\'.livekit.proto.RegisterRpcMethodRequestH\x00\x12J\n\x15unregister_rpc_method\x18( \x01(\x0b\x32).livekit.proto.UnregisterRpcMethodRequestH\x00\x12[\n\x1erpc_method_invocation_response\x18) \x01(\x0b\x32\x31.livekit.proto.RpcMethodInvocationResponseRequestH\x00\x12]\n\x1f\x65nable_remote_track_publication\x18* \x01(\x0b\x32\x32.livekit.proto.EnableRemoteTrackPublicationRequestH\x00\x12p\n)update_remote_track_publication_dimension\x18+ \x01(\x0b\x32;.livekit.proto.UpdateRemoteTrackPublicationDimensionRequestH\x00\x12\x44\n\x12send_stream_header\x18, \x01(\x0b\x32&.livekit.proto.SendStreamHeaderRequestH\x00\x12\x42\n\x11send_stream_chunk\x18- \x01(\x0b\x32%.livekit.proto.SendStreamChunkRequestH\x00\x12\x46\n\x13send_stream_trailer\x18. \x01(\x0b\x32\'.livekit.proto.SendStreamTrailerRequestH\x00\x12x\n.set_data_channel_buffered_amount_low_threshold\x18/ \x01(\x0b\x32>.livekit.proto.SetDataChannelBufferedAmountLowThresholdRequestH\x00\x12O\n\x18load_audio_filter_plugin\x18\x31 \x01(\x0b\x32+.livekit.proto.LoadAudioFilterPluginRequestH\x00\x12/\n\x07new_apm\x18\x32 \x01(\x0b\x32\x1c.livekit.proto.NewApmRequestH\x00\x12\x44\n\x12\x61pm_process_stream\x18\x33 \x01(\x0b\x32&.livekit.proto.ApmProcessStreamRequestH\x00\x12S\n\x1a\x61pm_process_reverse_stream\x18\x34 \x01(\x0b\x32-.livekit.proto.ApmProcessReverseStreamRequestH\x00\x12G\n\x14\x61pm_set_stream_delay\x18\x35 \x01(\x0b\x32\'.livekit.proto.ApmSetStreamDelayRequestH\x00\x42\t\n\x07message\"\xfe\x1c\n\x0b\x46\x66iResponse\x12\x31\n\x07\x64ispose\x18\x02 \x01(\x0b\x32\x1e.livekit.proto.DisposeResponseH\x00\x12\x31\n\x07\x63onnect\x18\x03 \x01(\x0b\x32\x1e.livekit.proto.ConnectResponseH\x00\x12\x37\n\ndisconnect\x18\x04 \x01(\x0b\x32!.livekit.proto.DisconnectResponseH\x00\x12<\n\rpublish_track\x18\x05 \x01(\x0b\x32#.livekit.proto.PublishTrackResponseH\x00\x12@\n\x0funpublish_track\x18\x06 \x01(\x0b\x32%.livekit.proto.UnpublishTrackResponseH\x00\x12:\n\x0cpublish_data\x18\x07 \x01(\x0b\x32\".livekit.proto.PublishDataResponseH\x00\x12>\n\x0eset_subscribed\x18\x08 \x01(\x0b\x32$.livekit.proto.SetSubscribedResponseH\x00\x12\x45\n\x12set_local_metadata\x18\t \x01(\x0b\x32\'.livekit.proto.SetLocalMetadataResponseH\x00\x12=\n\x0eset_local_name\x18\n \x01(\x0b\x32#.livekit.proto.SetLocalNameResponseH\x00\x12I\n\x14set_local_attributes\x18\x0b \x01(\x0b\x32).livekit.proto.SetLocalAttributesResponseH\x00\x12\x43\n\x11get_session_stats\x18\x0c \x01(\x0b\x32&.livekit.proto.GetSessionStatsResponseH\x00\x12L\n\x15publish_transcription\x18\r \x01(\x0b\x32+.livekit.proto.PublishTranscriptionResponseH\x00\x12\x41\n\x10publish_sip_dtmf\x18\x0e \x01(\x0b\x32%.livekit.proto.PublishSipDtmfResponseH\x00\x12\x45\n\x12\x63reate_video_track\x18\x0f \x01(\x0b\x32\'.livekit.proto.CreateVideoTrackResponseH\x00\x12\x45\n\x12\x63reate_audio_track\x18\x10 \x01(\x0b\x32\'.livekit.proto.CreateAudioTrackResponseH\x00\x12\x41\n\x10local_track_mute\x18\x11 \x01(\x0b\x32%.livekit.proto.LocalTrackMuteResponseH\x00\x12G\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32(.livekit.proto.EnableRemoteTrackResponseH\x00\x12\x34\n\tget_stats\x18\x13 \x01(\x0b\x32\x1f.livekit.proto.GetStatsResponseH\x00\x12\x64\n\"set_track_subscription_permissions\x18/ \x01(\x0b\x32\x36.livekit.proto.SetTrackSubscriptionPermissionsResponseH\x00\x12\x41\n\x10new_video_stream\x18\x14 \x01(\x0b\x32%.livekit.proto.NewVideoStreamResponseH\x00\x12\x41\n\x10new_video_source\x18\x15 \x01(\x0b\x32%.livekit.proto.NewVideoSourceResponseH\x00\x12G\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32(.livekit.proto.CaptureVideoFrameResponseH\x00\x12<\n\rvideo_convert\x18\x17 \x01(\x0b\x32#.livekit.proto.VideoConvertResponseH\x00\x12Z\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x31.livekit.proto.VideoStreamFromParticipantResponseH\x00\x12\x41\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32%.livekit.proto.NewAudioStreamResponseH\x00\x12\x41\n\x10new_audio_source\x18\x1a \x01(\x0b\x32%.livekit.proto.NewAudioSourceResponseH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameResponseH\x00\x12\x45\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32\'.livekit.proto.ClearAudioBufferResponseH\x00\x12G\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32(.livekit.proto.NewAudioResamplerResponseH\x00\x12\x45\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32\'.livekit.proto.RemixAndResampleResponseH\x00\x12Z\n\x1d\x61udio_stream_from_participant\x18\x1f \x01(\x0b\x32\x31.livekit.proto.AudioStreamFromParticipantResponseH\x00\x12+\n\x04\x65\x32\x65\x65\x18 \x01(\x0b\x32\x1b.livekit.proto.E2eeResponseH\x00\x12\x43\n\x11new_sox_resampler\x18! \x01(\x0b\x32&.livekit.proto.NewSoxResamplerResponseH\x00\x12\x45\n\x12push_sox_resampler\x18\" \x01(\x0b\x32\'.livekit.proto.PushSoxResamplerResponseH\x00\x12G\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32(.livekit.proto.FlushSoxResamplerResponseH\x00\x12\x43\n\x11send_chat_message\x18$ \x01(\x0b\x32&.livekit.proto.SendChatMessageResponseH\x00\x12\x38\n\x0bperform_rpc\x18% \x01(\x0b\x32!.livekit.proto.PerformRpcResponseH\x00\x12G\n\x13register_rpc_method\x18& \x01(\x0b\x32(.livekit.proto.RegisterRpcMethodResponseH\x00\x12K\n\x15unregister_rpc_method\x18\' \x01(\x0b\x32*.livekit.proto.UnregisterRpcMethodResponseH\x00\x12\\\n\x1erpc_method_invocation_response\x18( \x01(\x0b\x32\x32.livekit.proto.RpcMethodInvocationResponseResponseH\x00\x12^\n\x1f\x65nable_remote_track_publication\x18) \x01(\x0b\x32\x33.livekit.proto.EnableRemoteTrackPublicationResponseH\x00\x12q\n)update_remote_track_publication_dimension\x18* \x01(\x0b\x32<.livekit.proto.UpdateRemoteTrackPublicationDimensionResponseH\x00\x12\x45\n\x12send_stream_header\x18+ \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderResponseH\x00\x12\x43\n\x11send_stream_chunk\x18, \x01(\x0b\x32&.livekit.proto.SendStreamChunkResponseH\x00\x12G\n\x13send_stream_trailer\x18- \x01(\x0b\x32(.livekit.proto.SendStreamTrailerResponseH\x00\x12y\n.set_data_channel_buffered_amount_low_threshold\x18. \x01(\x0b\x32?.livekit.proto.SetDataChannelBufferedAmountLowThresholdResponseH\x00\x12P\n\x18load_audio_filter_plugin\x18\x30 \x01(\x0b\x32,.livekit.proto.LoadAudioFilterPluginResponseH\x00\x12\x30\n\x07new_apm\x18\x31 \x01(\x0b\x32\x1d.livekit.proto.NewApmResponseH\x00\x12\x45\n\x12\x61pm_process_stream\x18\x32 \x01(\x0b\x32\'.livekit.proto.ApmProcessStreamResponseH\x00\x12T\n\x1a\x61pm_process_reverse_stream\x18\x33 \x01(\x0b\x32..livekit.proto.ApmProcessReverseStreamResponseH\x00\x12H\n\x14\x61pm_set_stream_delay\x18\x34 \x01(\x0b\x32(.livekit.proto.ApmSetStreamDelayResponseH\x00\x42\t\n\x07message\"\xdf\x0c\n\x08\x46\x66iEvent\x12.\n\nroom_event\x18\x01 \x01(\x0b\x32\x18.livekit.proto.RoomEventH\x00\x12\x30\n\x0btrack_event\x18\x02 \x01(\x0b\x32\x19.livekit.proto.TrackEventH\x00\x12=\n\x12video_stream_event\x18\x03 \x01(\x0b\x32\x1f.livekit.proto.VideoStreamEventH\x00\x12=\n\x12\x61udio_stream_event\x18\x04 \x01(\x0b\x32\x1f.livekit.proto.AudioStreamEventH\x00\x12\x31\n\x07\x63onnect\x18\x05 \x01(\x0b\x32\x1e.livekit.proto.ConnectCallbackH\x00\x12\x37\n\ndisconnect\x18\x07 \x01(\x0b\x32!.livekit.proto.DisconnectCallbackH\x00\x12\x31\n\x07\x64ispose\x18\x08 \x01(\x0b\x32\x1e.livekit.proto.DisposeCallbackH\x00\x12<\n\rpublish_track\x18\t \x01(\x0b\x32#.livekit.proto.PublishTrackCallbackH\x00\x12@\n\x0funpublish_track\x18\n \x01(\x0b\x32%.livekit.proto.UnpublishTrackCallbackH\x00\x12:\n\x0cpublish_data\x18\x0b \x01(\x0b\x32\".livekit.proto.PublishDataCallbackH\x00\x12L\n\x15publish_transcription\x18\x0c \x01(\x0b\x32+.livekit.proto.PublishTranscriptionCallbackH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\r \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameCallbackH\x00\x12\x45\n\x12set_local_metadata\x18\x0e \x01(\x0b\x32\'.livekit.proto.SetLocalMetadataCallbackH\x00\x12=\n\x0eset_local_name\x18\x0f \x01(\x0b\x32#.livekit.proto.SetLocalNameCallbackH\x00\x12I\n\x14set_local_attributes\x18\x10 \x01(\x0b\x32).livekit.proto.SetLocalAttributesCallbackH\x00\x12\x34\n\tget_stats\x18\x11 \x01(\x0b\x32\x1f.livekit.proto.GetStatsCallbackH\x00\x12\'\n\x04logs\x18\x12 \x01(\x0b\x32\x17.livekit.proto.LogBatchH\x00\x12\x43\n\x11get_session_stats\x18\x13 \x01(\x0b\x32&.livekit.proto.GetSessionStatsCallbackH\x00\x12%\n\x05panic\x18\x14 \x01(\x0b\x32\x14.livekit.proto.PanicH\x00\x12\x41\n\x10publish_sip_dtmf\x18\x15 \x01(\x0b\x32%.livekit.proto.PublishSipDtmfCallbackH\x00\x12>\n\x0c\x63hat_message\x18\x16 \x01(\x0b\x32&.livekit.proto.SendChatMessageCallbackH\x00\x12\x38\n\x0bperform_rpc\x18\x17 \x01(\x0b\x32!.livekit.proto.PerformRpcCallbackH\x00\x12H\n\x15rpc_method_invocation\x18\x18 \x01(\x0b\x32\'.livekit.proto.RpcMethodInvocationEventH\x00\x12\x45\n\x12send_stream_header\x18\x19 \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderCallbackH\x00\x12\x43\n\x11send_stream_chunk\x18\x1a \x01(\x0b\x32&.livekit.proto.SendStreamChunkCallbackH\x00\x12G\n\x13send_stream_trailer\x18\x1b \x01(\x0b\x32(.livekit.proto.SendStreamTrailerCallbackH\x00\x42\t\n\x07message\"\x1f\n\x0e\x44isposeRequest\x12\r\n\x05\x61sync\x18\x01 \x02(\x08\"#\n\x0f\x44isposeResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\"#\n\x0f\x44isposeCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x85\x01\n\tLogRecord\x12&\n\x05level\x18\x01 \x02(\x0e\x32\x17.livekit.proto.LogLevel\x12\x0e\n\x06target\x18\x02 \x02(\t\x12\x13\n\x0bmodule_path\x18\x03 \x01(\t\x12\x0c\n\x04\x66ile\x18\x04 \x01(\t\x12\x0c\n\x04line\x18\x05 \x01(\r\x12\x0f\n\x07message\x18\x06 \x02(\t\"5\n\x08LogBatch\x12)\n\x07records\x18\x01 \x03(\x0b\x32\x18.livekit.proto.LogRecord\"\x18\n\x05Panic\x12\x0f\n\x07message\x18\x01 \x02(\t*S\n\x08LogLevel\x12\r\n\tLOG_ERROR\x10\x00\x12\x0c\n\x08LOG_WARN\x10\x01\x12\x0c\n\x08LOG_INFO\x10\x02\x12\r\n\tLOG_DEBUG\x10\x03\x12\r\n\tLOG_TRACE\x10\x04\x42\x10\xaa\x02\rLiveKit.Proto')
25
+
26
+ _globals = globals()
27
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
28
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ffi_pb2', _globals)
29
+ if _descriptor._USE_C_DESCRIPTORS == False:
30
+ _globals['DESCRIPTOR']._options = None
31
+ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto'
32
+ _globals['_LOGLEVEL']._serialized_start=9539
33
+ _globals['_LOGLEVEL']._serialized_end=9622
34
+ _globals['_FFIREQUEST']._serialized_start=140
35
+ _globals['_FFIREQUEST']._serialized_end=3866
36
+ _globals['_FFIRESPONSE']._serialized_start=3869
37
+ _globals['_FFIRESPONSE']._serialized_end=7579
38
+ _globals['_FFIEVENT']._serialized_start=7582
39
+ _globals['_FFIEVENT']._serialized_end=9213
40
+ _globals['_DISPOSEREQUEST']._serialized_start=9215
41
+ _globals['_DISPOSEREQUEST']._serialized_end=9246
42
+ _globals['_DISPOSERESPONSE']._serialized_start=9248
43
+ _globals['_DISPOSERESPONSE']._serialized_end=9283
44
+ _globals['_DISPOSECALLBACK']._serialized_start=9285
45
+ _globals['_DISPOSECALLBACK']._serialized_end=9320
46
+ _globals['_LOGRECORD']._serialized_start=9323
47
+ _globals['_LOGRECORD']._serialized_end=9456
48
+ _globals['_LOGBATCH']._serialized_start=9458
49
+ _globals['_LOGBATCH']._serialized_end=9511
50
+ _globals['_PANIC']._serialized_start=9513
51
+ _globals['_PANIC']._serialized_end=9537
52
+ # @@protoc_insertion_point(module_scope)
@@ -145,6 +145,7 @@ class FfiRequest(google.protobuf.message.Message):
145
145
  NEW_APM_FIELD_NUMBER: builtins.int
146
146
  APM_PROCESS_STREAM_FIELD_NUMBER: builtins.int
147
147
  APM_PROCESS_REVERSE_STREAM_FIELD_NUMBER: builtins.int
148
+ APM_SET_STREAM_DELAY_FIELD_NUMBER: builtins.int
148
149
  @property
149
150
  def dispose(self) -> global___DisposeRequest: ...
150
151
  @property
@@ -265,6 +266,8 @@ class FfiRequest(google.protobuf.message.Message):
265
266
  def apm_process_stream(self) -> audio_frame_pb2.ApmProcessStreamRequest: ...
266
267
  @property
267
268
  def apm_process_reverse_stream(self) -> audio_frame_pb2.ApmProcessReverseStreamRequest: ...
269
+ @property
270
+ def apm_set_stream_delay(self) -> audio_frame_pb2.ApmSetStreamDelayRequest: ...
268
271
  def __init__(
269
272
  self,
270
273
  *,
@@ -319,10 +322,11 @@ class FfiRequest(google.protobuf.message.Message):
319
322
  new_apm: audio_frame_pb2.NewApmRequest | None = ...,
320
323
  apm_process_stream: audio_frame_pb2.ApmProcessStreamRequest | None = ...,
321
324
  apm_process_reverse_stream: audio_frame_pb2.ApmProcessReverseStreamRequest | None = ...,
325
+ apm_set_stream_delay: audio_frame_pb2.ApmSetStreamDelayRequest | None = ...,
322
326
  ) -> None: ...
323
- def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ...
324
- def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ...
325
- def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "e2ee", "audio_stream_from_participant", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "edit_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream"] | None: ...
327
+ def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ...
328
+ def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ...
329
+ def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "e2ee", "audio_stream_from_participant", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "edit_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay"] | None: ...
326
330
 
327
331
  global___FfiRequest = FfiRequest
328
332
 
@@ -382,6 +386,7 @@ class FfiResponse(google.protobuf.message.Message):
382
386
  NEW_APM_FIELD_NUMBER: builtins.int
383
387
  APM_PROCESS_STREAM_FIELD_NUMBER: builtins.int
384
388
  APM_PROCESS_REVERSE_STREAM_FIELD_NUMBER: builtins.int
389
+ APM_SET_STREAM_DELAY_FIELD_NUMBER: builtins.int
385
390
  @property
386
391
  def dispose(self) -> global___DisposeResponse: ...
387
392
  @property
@@ -500,6 +505,8 @@ class FfiResponse(google.protobuf.message.Message):
500
505
  def apm_process_stream(self) -> audio_frame_pb2.ApmProcessStreamResponse: ...
501
506
  @property
502
507
  def apm_process_reverse_stream(self) -> audio_frame_pb2.ApmProcessReverseStreamResponse: ...
508
+ @property
509
+ def apm_set_stream_delay(self) -> audio_frame_pb2.ApmSetStreamDelayResponse: ...
503
510
  def __init__(
504
511
  self,
505
512
  *,
@@ -553,10 +560,11 @@ class FfiResponse(google.protobuf.message.Message):
553
560
  new_apm: audio_frame_pb2.NewApmResponse | None = ...,
554
561
  apm_process_stream: audio_frame_pb2.ApmProcessStreamResponse | None = ...,
555
562
  apm_process_reverse_stream: audio_frame_pb2.ApmProcessReverseStreamResponse | None = ...,
563
+ apm_set_stream_delay: audio_frame_pb2.ApmSetStreamDelayResponse | None = ...,
556
564
  ) -> None: ...
557
- def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ...
558
- def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ...
559
- def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "audio_stream_from_participant", "e2ee", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream"] | None: ...
565
+ def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ...
566
+ def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_chat_message", b"send_chat_message", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ...
567
+ def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "audio_stream_from_participant", "e2ee", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay"] | None: ...
560
568
 
561
569
  global___FfiResponse = FfiResponse
562
570
 
@@ -86,3 +86,28 @@ class AudioProcessingModule:
86
86
 
87
87
  if resp.apm_process_stream.error:
88
88
  raise RuntimeError(resp.apm_process_stream.error)
89
+
90
+ def set_stream_delay_ms(self, delay_ms: int) -> None:
91
+ """
92
+ This must be called if and only if echo processing is enabled.
93
+
94
+ Sets the `delay` in ms between `process_reverse_stream()` receiving a far-end
95
+ frame and `process_stream()` receiving a near-end frame containing the
96
+ corresponding echo. On the client-side this can be expressed as
97
+ delay = (t_render - t_analyze) + (t_process - t_capture)
98
+ where,
99
+ - t_analyze is the time a frame is passed to `process_reverse_stream()` and
100
+ t_render is the time the first sample of the same frame is rendered by
101
+ the audio hardware.
102
+ - t_capture is the time the first sample of a frame is captured by the
103
+ audio hardware and t_process is the time the same frame is passed to
104
+ `process_stream()`.
105
+ """
106
+ req = proto_ffi.FfiRequest()
107
+ req.apm_set_stream_delay.apm_handle = self._ffi_handle.handle
108
+ req.apm_set_stream_delay.delay_ms = delay_ms
109
+
110
+ resp = FfiClient.instance.request(req)
111
+
112
+ if resp.apm_set_stream_delay.error:
113
+ raise RuntimeError(resp.apm_set_stream_delay.error)
@@ -0,0 +1,53 @@
1
+ # type: ignore
2
+ from __future__ import annotations
3
+
4
+ import atexit
5
+ import contextlib
6
+ from IPython.core.display import HTML
7
+ from IPython.display import display
8
+ from importlib.resources import as_file, files
9
+
10
+ _resource_stack = contextlib.ExitStack()
11
+ atexit.register(_resource_stack.close)
12
+
13
+
14
+ def room_html(url: str, token: str) -> HTML:
15
+ """
16
+ Generate the HTML needed to embed a LiveKit room.
17
+
18
+ Args:
19
+ url (str): The LiveKit room URL.
20
+ token (str): The LiveKit join token.
21
+
22
+ Important:
23
+ The returned HTML contains the provided `url` and `token` values directly.
24
+ Avoid using sensitive tokens in public notebooks (e.g., tokens with long expiration times).
25
+ """
26
+ token_placeholder = "##livekit-token-placeholder##"
27
+ url_placeholder = "##livekit-url-placeholder##"
28
+
29
+ index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html"
30
+ index_path = _resource_stack.enter_context(as_file(index_path))
31
+
32
+ # turns out that directly replacing the URL/token is necessary, as Colab or Jupyter comms become
33
+ # unreliable when the main thread is busy/blocked.
34
+ # it also avoid the need to use --expose-app-in-browser when starting jupyter notebook
35
+ html_text = index_path.read_text()
36
+ html_text = html_text.replace(token_placeholder, token)
37
+ html_text = html_text.replace(url_placeholder, url)
38
+ return HTML(html_text)
39
+
40
+
41
+ def display_room(url: str, token: str) -> None:
42
+ """
43
+ Display a LiveKit room in a Jupyter notebook or Google Colab.
44
+
45
+ Args:
46
+ url (str): The LiveKit room URL.
47
+ token (str): The LiveKit join token.
48
+
49
+ Important:
50
+ The rendered HTML will include the provided `url` and `token` in plain text.
51
+ Avoid using sensitive tokens in public notebooks (e.g., tokens with long expiration times).
52
+ """
53
+ display(room_html(url, token))