From 0ba405db43642e661b5c285b4ca9743d5fcdc66c Mon Sep 17 00:00:00 2001 From: Yukari Dumburs <45432538+ydumburs@users.noreply.github.com> Date: Thu, 28 Aug 2025 15:16:21 +0100 Subject: [PATCH 1/3] Add video API snippets - Created a 'video' folder and added video code snippets. - Added video-related environment variables to .env.dist. --- .env.dist | 9 ++++++ video/add-stream-to-archive.py | 32 +++++++++++++++++++++ video/add-stream-to-broadcast.py | 32 +++++++++++++++++++++ video/change-archive-layout.py | 27 ++++++++++++++++++ video/change-broadcast-layout.py | 27 ++++++++++++++++++ video/create-session.py | 31 ++++++++++++++++++++ video/generate-client-token.py | 34 ++++++++++++++++++++++ video/get-archive.py | 24 ++++++++++++++++ video/get-broadcast.py | 24 ++++++++++++++++ video/get-experience-composer.py | 25 +++++++++++++++++ video/list-archives.py | 27 ++++++++++++++++++ video/list-broadcasts.py | 28 +++++++++++++++++++ video/list-experience-composer.py | 28 +++++++++++++++++++ video/start-archive copy.py | 33 ++++++++++++++++++++++ video/start-archive.py | 32 +++++++++++++++++++++ video/start-broadcast.py | 45 ++++++++++++++++++++++++++++++ video/start-captions.py | 30 ++++++++++++++++++++ video/start-experience-composer.py | 34 ++++++++++++++++++++++ video/stop-archive.py | 21 ++++++++++++++ video/stop-broadcast.py | 21 ++++++++++++++ video/stop-captions.py | 25 +++++++++++++++++ video/stop-experience-composer.py | 21 ++++++++++++++ 22 files changed, 610 insertions(+) create mode 100644 video/add-stream-to-archive.py create mode 100644 video/add-stream-to-broadcast.py create mode 100644 video/change-archive-layout.py create mode 100644 video/change-broadcast-layout.py create mode 100644 video/create-session.py create mode 100644 video/generate-client-token.py create mode 100644 video/get-archive.py create mode 100644 video/get-broadcast.py create mode 100644 video/get-experience-composer.py create mode 100644 video/list-archives.py create mode 100644 video/list-broadcasts.py create mode 100644 video/list-experience-composer.py create mode 100644 video/start-archive copy.py create mode 100644 video/start-archive.py create mode 100644 video/start-broadcast.py create mode 100644 video/start-captions.py create mode 100644 video/start-experience-composer.py create mode 100644 video/stop-archive.py create mode 100644 video/stop-broadcast.py create mode 100644 video/stop-captions.py create mode 100644 video/stop-experience-composer.py diff --git a/.env.dist b/.env.dist index 5c60548..2bcf04d 100644 --- a/.env.dist +++ b/.env.dist @@ -90,6 +90,15 @@ VERIFY_PAYEE_NAME='VERIFY_PAYEE_NAME' VERIFY_AMOUNT='VERIFY_AMOUNT' VERIFY_WORKFLOW_ID='VERIFY_WORKFLOW_ID' +# Video +VIDEO_SESSION_ID='VIDEO_SESSION_ID' +VIDEO_TOKEN='VIDEO_TOKEN' +VIDEO_STREAM_ID='VIDEO_STREAM_ID' +VIDEO_ARCHIVE_ID='VIDEO_ARCHIVE_ID' +VIDEO_BROADCAST_ID='VIDEO_BROADCAST_ID' +VIDEO_CAPTIONS_ID='VIDEO_CAPTIONS_ID' +VIDEO_EC_ID='VIDEO_EC_ID' + # Voice VONAGE_VIRTUAL_NUMBER='VONAGE_VIRTUAL_NUMBER' VOICE_TO_NUMBER='VOICE_TO_NUMBER' diff --git a/video/add-stream-to-archive.py b/video/add-stream-to-archive.py new file mode 100644 index 0000000..857cdc3 --- /dev/null +++ b/video/add-stream-to-archive.py @@ -0,0 +1,32 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import AddStreamRequest + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_ARCHIVE_ID = os.getenv("VIDEO_ARCHIVE_ID") +VIDEO_STREAM_ID = os.getenv("VIDEO_STREAM_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +params = AddStreamRequest( + stream_id=VIDEO_STREAM_ID, + has_video=True +) + +vonage_client.video.add_stream_to_archive( + archive_id=VIDEO_ARCHIVE_ID, + params=params +) + +print("=== Added Stream to Archive ===") diff --git a/video/add-stream-to-broadcast.py b/video/add-stream-to-broadcast.py new file mode 100644 index 0000000..c9ec6ca --- /dev/null +++ b/video/add-stream-to-broadcast.py @@ -0,0 +1,32 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import AddStreamRequest + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_BROADCAST_ID = os.getenv("VIDEO_BROADCAST_ID") +VIDEO_STREAM_ID = os.getenv("VIDEO_STREAM_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +params = AddStreamRequest( + stream_id=VIDEO_STREAM_ID, + has_video=True +) + +vonage_client.video.add_stream_to_broadcast( + broadcast_id=VIDEO_BROADCAST_ID, + params=params +) + +print("=== Added Stream to Broadcast ===") diff --git a/video/change-archive-layout.py b/video/change-archive-layout.py new file mode 100644 index 0000000..ccf8f1b --- /dev/null +++ b/video/change-archive-layout.py @@ -0,0 +1,27 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Archive, ComposedLayout, LayoutType + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_ARCHIVE_ID = os.getenv("VIDEO_ARCHIVE_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +archive: Archive = vonage_client.video.change_archive_layout( + archive_id=VIDEO_ARCHIVE_ID, + layout=ComposedLayout(type=LayoutType.VERTICAL_PRESENTATION), +) + +print("=== Changed Archive Layout ===") +print(json.dumps(archive.model_dump(), indent=2)) diff --git a/video/change-broadcast-layout.py b/video/change-broadcast-layout.py new file mode 100644 index 0000000..e882275 --- /dev/null +++ b/video/change-broadcast-layout.py @@ -0,0 +1,27 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Broadcast, ComposedLayout, LayoutType + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_BROADCAST_ID = os.getenv("VIDEO_BROADCAST_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +broadcast: Broadcast = vonage_client.video.change_broadcast_layout( + broadcast_id=VIDEO_BROADCAST_ID, + layout=ComposedLayout(type=LayoutType.VERTICAL_PRESENTATION), +) + +print("=== Changed Broadcast Layout ===") +print(json.dumps(broadcast.model_dump(), indent=2)) diff --git a/video/create-session.py b/video/create-session.py new file mode 100644 index 0000000..985c3e6 --- /dev/null +++ b/video/create-session.py @@ -0,0 +1,31 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import SessionOptions + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = SessionOptions( + location="125.125.224.224", + e2ee="false", + media_mode="routed", + archive_mode="manual", + archiveName="TEST", + archiveResolution="1920x1080" +) +session = vonage_client.video.create_session(options) + +print("=== Created Session ===") +print(json.dumps(session.model_dump(), indent=2)) diff --git a/video/generate-client-token.py b/video/generate-client-token.py new file mode 100644 index 0000000..af1d875 --- /dev/null +++ b/video/generate-client-token.py @@ -0,0 +1,34 @@ +import os +from dotenv import load_dotenv +import time + +from vonage import Auth, Vonage +from vonage_video.models import TokenOptions + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +token = vonage_client.video.generate_client_token( + TokenOptions( + session_id=VIDEO_SESSION_ID, + role="moderator", + connection_data="", + expire_time=int(time.time()) + 600, # 600sec=10min + ) +) + +if isinstance(token, bytes): + token = token.decode("utf-8") + +print("=== Generated token ===") +print(token) diff --git a/video/get-archive.py b/video/get-archive.py new file mode 100644 index 0000000..7f4fe73 --- /dev/null +++ b/video/get-archive.py @@ -0,0 +1,24 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Archive + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_ARCHIVE_ID = os.getenv("VIDEO_ARCHIVE_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +archive: Archive = vonage_client.video.get_archive(VIDEO_ARCHIVE_ID) + +print("=== Got Archive ===") +print(json.dumps(archive.model_dump(), indent=2)) diff --git a/video/get-broadcast.py b/video/get-broadcast.py new file mode 100644 index 0000000..f82373b --- /dev/null +++ b/video/get-broadcast.py @@ -0,0 +1,24 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Broadcast + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_BROADCAST_ID = os.getenv("VIDEO_BROADCAST_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +broadcast: Broadcast = vonage_client.video.get_broadcast(VIDEO_BROADCAST_ID) + +print("=== Got a Broadcast ===") +print(json.dumps(broadcast.model_dump(), indent=2)) diff --git a/video/get-experience-composer.py b/video/get-experience-composer.py new file mode 100644 index 0000000..c1fb389 --- /dev/null +++ b/video/get-experience-composer.py @@ -0,0 +1,25 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import ExperienceComposer + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_EC_ID = os.getenv("VIDEO_EC_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +experience_composer: ExperienceComposer = vonage_client.video.get_experience_composer( + VIDEO_EC_ID) + +print("=== Got ExperienceComposer ===") +print(json.dumps(experience_composer.model_dump(), indent=2)) diff --git a/video/list-archives.py b/video/list-archives.py new file mode 100644 index 0000000..687e49a --- /dev/null +++ b/video/list-archives.py @@ -0,0 +1,27 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import ListArchivesFilter + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +filter = ListArchivesFilter(offset=0, page_size=5) +archive_list, total, next = vonage_client.video.list_archives(filter=filter) + +print("=== Total Archives ===") +print(total) +print("=== Listed Archives ===") +for archive in archive_list: + print(json.dumps(archive.model_dump(), indent=2)) diff --git a/video/list-broadcasts.py b/video/list-broadcasts.py new file mode 100644 index 0000000..16504da --- /dev/null +++ b/video/list-broadcasts.py @@ -0,0 +1,28 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import ListBroadcastsFilter + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +filter = ListBroadcastsFilter(offset=0, page_size=5) +broadcast_list, total, next = vonage_client.video.list_broadcasts( + filter=filter) + +print("=== Total Broadcasts ===") +print(total) +print("=== Listed Broadcasts ===") +for broadcast in broadcast_list: + print(json.dumps(broadcast.model_dump(), indent=2)) diff --git a/video/list-experience-composer.py b/video/list-experience-composer.py new file mode 100644 index 0000000..d727966 --- /dev/null +++ b/video/list-experience-composer.py @@ -0,0 +1,28 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import ListExperienceComposersFilter + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +filter = ListExperienceComposersFilter(offset=0, page_size=5) +ec_list, total, next = vonage_client.video.list_experience_composers( + filter=filter) + +print("=== Total ExperienceComposers ===") +print(total) +print("=== Listed ExperienceComposers ===") +for experience_composer in ec_list: + print(json.dumps(experience_composer.model_dump(), indent=2)) diff --git a/video/start-archive copy.py b/video/start-archive copy.py new file mode 100644 index 0000000..57b74e4 --- /dev/null +++ b/video/start-archive copy.py @@ -0,0 +1,33 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import AudioConnectorData, AudioConnectorOptions, AudioConnectorWebSocket + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") +VIDEO_TOKEN = os.getenv("VIDEO_TOKEN") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = AudioConnectorOptions( + session_id=VIDEO_SESSION_ID, + token=VIDEO_TOKEN, + websocket=AudioConnectorWebSocket( + uri='wss://example.com/websocket', audio_rate=16000 + ), +) +audio_connector: AudioConnectorData = vonage_client.video.start_audio_connector( + options) + +print("=== Started AudioConnector ===") +print(json.dumps(audio_connector.model_dump(), indent=2)) diff --git a/video/start-archive.py b/video/start-archive.py new file mode 100644 index 0000000..08cfa86 --- /dev/null +++ b/video/start-archive.py @@ -0,0 +1,32 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Archive, CreateArchiveRequest + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = CreateArchiveRequest( + session_id=VIDEO_SESSION_ID, + stream_mode="auto", + output_mode="composed", + resolution='1280x720', + has_audio=True, + has_video=True, +) +archive: Archive = vonage_client.video.start_archive(options) + +print("=== Started Archive ===") +print(json.dumps(archive.model_dump(), indent=2)) diff --git a/video/start-broadcast.py b/video/start-broadcast.py new file mode 100644 index 0000000..8a8295e --- /dev/null +++ b/video/start-broadcast.py @@ -0,0 +1,45 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import Broadcast, CreateBroadcastRequest, ComposedLayout, BroadcastOutputSettings, BroadcastHls, BroadcastRtmp, VideoResolution, LayoutType, StreamMode + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = CreateBroadcastRequest( + session_id=VIDEO_SESSION_ID, + layout=ComposedLayout( + type=LayoutType.BEST_FIT, + screenshare_type=LayoutType.HORIZONTAL_PRESENTATION + ), + outputs=BroadcastOutputSettings( + hls=BroadcastHls(dvr=False, low_latency=True), + rtmp=[ + BroadcastRtmp( + id='TEST', + server_url='rtmp://a.rtmp.youtube.com/live2', + stream_name='abc123...', + ) + ], + ), + resolution=VideoResolution.RES_1280x720, + stream_mode=StreamMode.AUTO, + max_duration=3600, + max_bitrate=1_000_000, +) +broadcast: Broadcast = vonage_client.video.start_broadcast(options) + +print("=== Started Broadcast ===") +print(json.dumps(broadcast.model_dump(), indent=2)) diff --git a/video/start-captions.py b/video/start-captions.py new file mode 100644 index 0000000..10093fd --- /dev/null +++ b/video/start-captions.py @@ -0,0 +1,30 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import CaptionsData, CaptionsOptions + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") +VIDEO_TOKEN = os.getenv("VIDEO_TOKEN") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = CaptionsOptions( + session_id=VIDEO_SESSION_ID, + token=VIDEO_TOKEN +) + +captions: CaptionsData = vonage_client.video.start_captions(options) + +print("=== Started Captions ===") +print(json.dumps(captions.model_dump(), indent=2)) diff --git a/video/start-experience-composer.py b/video/start-experience-composer.py new file mode 100644 index 0000000..b72641e --- /dev/null +++ b/video/start-experience-composer.py @@ -0,0 +1,34 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import ExperienceComposer, ExperienceComposerOptions, ExperienceComposerProperties, VideoResolution + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") +VIDEO_TOKEN = os.getenv("VIDEO_TOKEN") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = ExperienceComposerOptions( + session_id=VIDEO_SESSION_ID, + token=VIDEO_TOKEN, + url='https://developer.vonage.com', + max_duration=3600, + resolution=VideoResolution.RES_1280x720, + properties=ExperienceComposerProperties(name='TEST'), +) +experience_composer: ExperienceComposer = vonage_client.video.start_experience_composer( + options) + +print("=== Started ExperienceComposer ===") +print(json.dumps(experience_composer.model_dump(), indent=2)) diff --git a/video/stop-archive.py b/video/stop-archive.py new file mode 100644 index 0000000..70f8bf4 --- /dev/null +++ b/video/stop-archive.py @@ -0,0 +1,21 @@ +import os +from dotenv import load_dotenv + +from vonage import Auth, Vonage + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_ARCHIVE_ID = os.getenv("VIDEO_ARCHIVE_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +vonage_client.video.stop_archive(VIDEO_ARCHIVE_ID) + +print("=== Stopped Archive ===") diff --git a/video/stop-broadcast.py b/video/stop-broadcast.py new file mode 100644 index 0000000..ea5fda3 --- /dev/null +++ b/video/stop-broadcast.py @@ -0,0 +1,21 @@ +import os +from dotenv import load_dotenv + +from vonage import Auth, Vonage + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_BROADCAST_ID = os.getenv("VIDEO_BROADCAST_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +vonage_client.video.stop_broadcast(VIDEO_BROADCAST_ID) + +print("=== Stopped Broadcast ===") diff --git a/video/stop-captions.py b/video/stop-captions.py new file mode 100644 index 0000000..3a48bbb --- /dev/null +++ b/video/stop-captions.py @@ -0,0 +1,25 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import CaptionsData + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_CAPTIONS_ID = os.getenv("VIDEO_CAPTIONS_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +vonage_client.video.stop_captions( + CaptionsData(captions_id=VIDEO_CAPTIONS_ID) +) + +print("=== Stopped Captions ===") diff --git a/video/stop-experience-composer.py b/video/stop-experience-composer.py new file mode 100644 index 0000000..81c41bc --- /dev/null +++ b/video/stop-experience-composer.py @@ -0,0 +1,21 @@ +import os +from dotenv import load_dotenv + +from vonage import Auth, Vonage + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_EC_ID = os.getenv("VIDEO_EC_ID") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +vonage_client.video.stop_experience_composer(VIDEO_EC_ID) + +print("=== Stopped ExperienceComposer ===") From a8a94e7da42bf4f73415fd1c96fc7bce4fed05db Mon Sep 17 00:00:00 2001 From: Yukari Dumburs <45432538+ydumburs@users.noreply.github.com> Date: Thu, 28 Aug 2025 16:51:18 +0100 Subject: [PATCH 2/3] Add SIP call request --- video/initiate-sip-call.py | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 video/initiate-sip-call.py diff --git a/video/initiate-sip-call.py b/video/initiate-sip-call.py new file mode 100644 index 0000000..349f173 --- /dev/null +++ b/video/initiate-sip-call.py @@ -0,0 +1,40 @@ +import os +from dotenv import load_dotenv +import json + +from vonage import Auth, Vonage +from vonage_video.models import InitiateSipRequest, SipAuth, SipCall, SipOptions, TokenOptions + +load_dotenv() + +VONAGE_APPLICATION_ID = os.getenv("VONAGE_APPLICATION_ID") +VONAGE_PRIVATE_KEY = os.getenv("VONAGE_PRIVATE_KEY") +VIDEO_SESSION_ID = os.getenv("VIDEO_SESSION_ID") +VIDEO_TOKEN = os.getenv("VIDEO_TOKEN") + +vonage_client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_PRIVATE_KEY, + ) +) + +options = SipOptions( + uri=f'sip:447405192752@sip.nexmo.com;transport=tls', + from_=f'442039051298@nexmo.com', + headers={'header_key': 'header_value'}, + auth=SipAuth(username='adf31819', password='ectHFYYRYHRHF9w48eaghrs'), + secure=False, + video=False, + observe_force_mute=True, +) + +params = InitiateSipRequest( + session_id=VIDEO_SESSION_ID, + token=VIDEO_TOKEN, + sip=options +) +sip_call: SipCall = vonage_client.video.initiate_sip_call(params) + +print("=== Initiated SIP Call ===") +print(json.dumps(sip_call.model_dump(), indent=2)) From 59bc96e72ff0fb7daf5852b0c799b258b2db2252 Mon Sep 17 00:00:00 2001 From: Yukari Dumburs <45432538+ydumburs@users.noreply.github.com> Date: Thu, 28 Aug 2025 17:24:29 +0100 Subject: [PATCH 3/3] Added SIP call request --- video/initiate-sip-call.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/video/initiate-sip-call.py b/video/initiate-sip-call.py index 349f173..ba10a2b 100644 --- a/video/initiate-sip-call.py +++ b/video/initiate-sip-call.py @@ -20,10 +20,10 @@ ) options = SipOptions( - uri=f'sip:447405192752@sip.nexmo.com;transport=tls', - from_=f'442039051298@nexmo.com', + uri=f'sip:...@sip.nexmo.com;transport=tls', + from_=f'...@nexmo.com', headers={'header_key': 'header_value'}, - auth=SipAuth(username='adf31819', password='ectHFYYRYHRHF9w48eaghrs'), + auth=SipAuth(username='...', password='...'), secure=False, video=False, observe_force_mute=True,