fastpixapi 1.1.3 → 1.2.0
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.
- checksums.yaml +4 -4
- data/lib/crystalline/metadata_fields.rb +2 -0
- data/lib/crystalline/module.rb +12 -13
- data/lib/fastpix_client/dimensions.rb +3 -3
- data/lib/fastpix_client/errors.rb +1 -1
- data/lib/fastpix_client/in_video_ai_features.rb +8 -8
- data/lib/fastpix_client/input_video.rb +4 -3
- data/lib/fastpix_client/live_playback.rb +253 -0
- data/lib/fastpix_client/manage_live_stream.rb +13 -12
- data/lib/fastpix_client/manage_videos.rb +21 -23
- data/lib/fastpix_client/metrics.rb +3 -3
- data/lib/fastpix_client/models/components/addtrackrequest.rb +6 -2
- data/lib/fastpix_client/models/components/addtrackrequest.rbi +2 -0
- data/lib/fastpix_client/models/components/addtrackresponse.rb +6 -2
- data/lib/fastpix_client/models/components/addtrackresponse.rbi +2 -0
- data/lib/fastpix_client/models/components/audiotrack.rb +6 -2
- data/lib/fastpix_client/models/components/audiotrack.rbi +2 -0
- data/lib/fastpix_client/models/components/generatetrackresponse.rb +6 -2
- data/lib/fastpix_client/models/components/generatetrackresponse.rbi +2 -0
- data/lib/fastpix_client/models/components/getallmediaresponse.rb +11 -13
- data/lib/fastpix_client/models/components/getallmediaresponse.rbi +3 -1
- data/lib/fastpix_client/models/components/getallmediaresponse_mp4support.rb +32 -12
- data/lib/fastpix_client/models/components/getallmediaresponse_mp4support.rbi +11 -1
- data/lib/fastpix_client/models/components/getallmediaresponse_sourceresolution.rb +2 -0
- data/lib/fastpix_client/models/components/{getmediaresponse.rb → getmediadetailresponse.rb} +16 -18
- data/lib/fastpix_client/models/components/{getmediaresponse.rbi → getmediadetailresponse.rbi} +5 -3
- data/lib/fastpix_client/models/components/{getmediaresponse_maxresolution.rb → getmediadetailresponse_maxresolution.rb} +2 -2
- data/lib/fastpix_client/models/components/getmediadetailresponse_maxresolution.rbi +11 -0
- data/lib/fastpix_client/models/components/{getmediaresponse_mediaquality.rb → getmediadetailresponse_mediaquality.rb} +2 -2
- data/lib/fastpix_client/models/components/getmediadetailresponse_mediaquality.rbi +11 -0
- data/lib/fastpix_client/models/components/getmediadetailresponse_mp4support.rb +48 -0
- data/lib/fastpix_client/models/components/getmediadetailresponse_mp4support.rbi +21 -0
- data/lib/fastpix_client/models/components/{getmediaresponse_sourceresolution.rb → getmediadetailresponse_sourceresolution.rb} +4 -2
- data/lib/fastpix_client/models/components/getmediadetailresponse_sourceresolution.rbi +11 -0
- data/lib/fastpix_client/models/components/{getmediaresponse_status.rb → getmediadetailresponse_status.rb} +2 -2
- data/lib/fastpix_client/models/components/getmediadetailresponse_status.rbi +11 -0
- data/lib/fastpix_client/models/components/{getmediaresponse_track.rb → getmediadetailresponse_track.rb} +1 -1
- data/lib/fastpix_client/models/components/getmediadetailresponse_track.rbi +11 -0
- data/lib/fastpix_client/models/components/inputmediasettings.rb +7 -2
- data/lib/fastpix_client/models/components/inputmediasettings.rbi +2 -0
- data/lib/fastpix_client/models/components/live_media_clips.rb +11 -13
- data/lib/fastpix_client/models/components/live_media_clips.rbi +3 -1
- data/lib/fastpix_client/models/components/live_media_clips_mp4support.rb +32 -12
- data/lib/fastpix_client/models/components/live_media_clips_mp4support.rbi +11 -1
- data/lib/fastpix_client/models/components/live_media_clips_sourceresolution.rb +2 -0
- data/lib/fastpix_client/models/components/media.rb +11 -13
- data/lib/fastpix_client/models/components/media.rbi +3 -1
- data/lib/fastpix_client/models/components/media_mp4support.rb +32 -12
- data/lib/fastpix_client/models/components/media_mp4support.rbi +11 -1
- data/lib/fastpix_client/models/components/media_sourceresolution.rb +2 -0
- data/lib/fastpix_client/models/components/mediaclipresponse_data.rb +2 -2
- data/lib/fastpix_client/models/components/mediaclipresponse_data.rbi +1 -1
- data/lib/fastpix_client/models/components/playbackidrequest.rb +6 -2
- data/lib/fastpix_client/models/components/playbackidrequest.rbi +3 -1
- data/lib/fastpix_client/models/components/playbackidresponse.rb +6 -2
- data/lib/fastpix_client/models/components/playbackidresponse.rbi +3 -1
- data/lib/fastpix_client/models/components/playbackidsuccessresponse_data.rb +6 -2
- data/lib/fastpix_client/models/components/playbackidsuccessresponse_data.rbi +3 -1
- data/lib/fastpix_client/models/components/playbacksettings.rb +6 -2
- data/lib/fastpix_client/models/components/playbacksettings.rbi +3 -1
- data/lib/fastpix_client/models/components/playlistbyidresponsemedialistitem.rb +2 -2
- data/lib/fastpix_client/models/components/playlistbyidresponsemedialistitem.rbi +1 -1
- data/lib/fastpix_client/models/components/sourceaccessmedia.rb +11 -13
- data/lib/fastpix_client/models/components/sourceaccessmedia.rbi +3 -1
- data/lib/fastpix_client/models/components/sourceaccessmedia_mp4support.rb +32 -12
- data/lib/fastpix_client/models/components/sourceaccessmedia_mp4support.rbi +11 -1
- data/lib/fastpix_client/models/components/sourceaccessmedia_sourceresolution.rb +2 -0
- data/lib/fastpix_client/models/components/subtitletrack.rb +6 -2
- data/lib/fastpix_client/models/components/subtitletrack.rbi +2 -0
- data/lib/fastpix_client/models/components/tracksubtitlesgeneraterequest.rb +6 -2
- data/lib/fastpix_client/models/components/tracksubtitlesgeneraterequest.rbi +2 -0
- data/lib/fastpix_client/models/components/update_media.rb +11 -13
- data/lib/fastpix_client/models/components/update_media.rbi +3 -1
- data/lib/fastpix_client/models/components/update_media_maxresolution.rb +0 -1
- data/lib/fastpix_client/models/components/update_media_mp4support.rb +32 -12
- data/lib/fastpix_client/models/components/update_media_mp4support.rbi +11 -1
- data/lib/fastpix_client/models/components/updatetrackrequest.rb +7 -7
- data/lib/fastpix_client/models/components/updatetrackrequest.rbi +2 -2
- data/lib/fastpix_client/models/components/updatetrackresponse.rb +6 -2
- data/lib/fastpix_client/models/components/updatetrackresponse.rbi +2 -0
- data/lib/fastpix_client/models/components/videotrack.rb +6 -2
- data/lib/fastpix_client/models/components/videotrack.rbi +2 -0
- data/lib/fastpix_client/models/components/videotrackforgetall.rb +6 -2
- data/lib/fastpix_client/models/components/videotrackforgetall.rbi +2 -0
- data/lib/fastpix_client/models/components.rb +7 -7
- data/lib/fastpix_client/models/operations/get_media_response.rb +1 -1
- data/lib/fastpix_client/models/operations/get_media_responsebody.rb +2 -2
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_data.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_data.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_defaultpolicy.rb +21 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_defaultpolicy.rbi +11 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_request.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_request.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_requestbody.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_requestbody.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_response.rb +48 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_response.rbi +21 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_responsebody.rb +36 -0
- data/lib/fastpix_client/models/operations/update_live_stream_domain_restrictions_responsebody.rbi +15 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_data.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_data.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_defaultpolicy.rb +21 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_defaultpolicy.rbi +11 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_request.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_request.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_requestbody.rb +40 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_requestbody.rbi +17 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_response.rb +48 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_response.rbi +21 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_responsebody.rb +36 -0
- data/lib/fastpix_client/models/operations/update_live_stream_user_agent_restrictions_responsebody.rbi +15 -0
- data/lib/fastpix_client/models/operations.rb +12 -0
- data/lib/fastpix_client/playlist.rb +2 -1
- data/lib/fastpix_client/sdkconfiguration.rb +3 -3
- data/lib/fastpix_client/simulcast_stream.rb +3 -3
- data/lib/fastpix_client/start_live_stream.rb +4 -4
- data/lib/fastpix_client/views.rb +3 -3
- metadata +58 -56
- data/lib/fastpix_client/models/components/getmediaresponse_maxresolution.rbi +0 -11
- data/lib/fastpix_client/models/components/getmediaresponse_mediaquality.rbi +0 -11
- data/lib/fastpix_client/models/components/getmediaresponse_mp4support.rb +0 -28
- data/lib/fastpix_client/models/components/getmediaresponse_mp4support.rbi +0 -11
- data/lib/fastpix_client/models/components/getmediaresponse_sourceresolution.rbi +0 -11
- data/lib/fastpix_client/models/components/getmediaresponse_status.rbi +0 -11
- data/lib/fastpix_client/models/components/getmediaresponse_track.rbi +0 -11
- data/test/sdk_examples_test.rb +0 -20
- data/test/test_helper.rb +0 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 69e080df95d19c998f9ea5af17e790f86d09b0c55eb778ad27493ea8167fab0e
|
|
4
|
+
data.tar.gz: d6bd52c3397cb581e209754da21f53a00c4e20efb14a17bbf1e846e0d3705c57
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c32ebd5d94cd37fa76c61b8d7ca7ab066cb7fcd0fd84ae42bf9bca7490cc20ddbd850059fb87e381026e22ab04e1fb1385f2ae85032c77d2a2af74c6275e445f
|
|
7
|
+
data.tar.gz: 4d1bc6c94cc9d50176ca27a9a858401b5b0f28724fcd1f09120240fcc668d98fdcb08cd543545414bf817cae0b0675705bb7d00de208b599d256c47e5c027e54
|
|
@@ -53,6 +53,8 @@ module Crystalline
|
|
|
53
53
|
# rubocop:enable Lint/SuppressedException
|
|
54
54
|
return value
|
|
55
55
|
elsif field_type.to_s == 'Float'
|
|
56
|
+
raise TypeError, "Cannot convert #{value.inspect} to Float. The value is of type #{value.class}" unless value.is_a?(::Numeric)
|
|
57
|
+
|
|
56
58
|
return value.to_f
|
|
57
59
|
|
|
58
60
|
end
|
data/lib/crystalline/module.rb
CHANGED
|
@@ -32,19 +32,7 @@ module Crystalline
|
|
|
32
32
|
if type.instance_of?(Class) && type.include?(::Crystalline::MetadataFields)
|
|
33
33
|
type.from_dict(data)
|
|
34
34
|
elsif Crystalline::Utils.union? type
|
|
35
|
-
|
|
36
|
-
union_types = union_types.sort_by { |klass| Crystalline.non_nilable_attr_count(klass) }
|
|
37
|
-
|
|
38
|
-
union_types.each do |union_type|
|
|
39
|
-
unmarshalled_val = Crystalline.unmarshal_json(data, union_type)
|
|
40
|
-
return unmarshalled_val
|
|
41
|
-
rescue TypeError
|
|
42
|
-
next
|
|
43
|
-
rescue NoMethodError
|
|
44
|
-
next
|
|
45
|
-
rescue KeyError
|
|
46
|
-
next
|
|
47
|
-
end
|
|
35
|
+
unmarshal_union(data, type)
|
|
48
36
|
elsif Crystalline::Utils.arr? type
|
|
49
37
|
data.map { |v| Crystalline.unmarshal_json(v, Crystalline::Utils.arr_of(type)) }
|
|
50
38
|
elsif Crystalline::Utils.hash? type
|
|
@@ -60,6 +48,17 @@ module Crystalline
|
|
|
60
48
|
end
|
|
61
49
|
end
|
|
62
50
|
|
|
51
|
+
def self.unmarshal_union(data, type)
|
|
52
|
+
union_types = Crystalline::Utils.get_union_types(type)
|
|
53
|
+
union_types = union_types.sort_by { |klass| Crystalline.non_nilable_attr_count(klass) }
|
|
54
|
+
|
|
55
|
+
union_types.each do |union_type|
|
|
56
|
+
return Crystalline.unmarshal_json(data, union_type)
|
|
57
|
+
rescue TypeError, NoMethodError, KeyError
|
|
58
|
+
next
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
63
62
|
def self.json_encode(val, primitives: true)
|
|
64
63
|
if val.class.respond_to? :enums
|
|
65
64
|
val.serialize
|
|
@@ -79,7 +79,7 @@ module FastpixClient
|
|
|
79
79
|
#
|
|
80
80
|
# The dimensions retrieved from this endpoint can be used in conjunction with the <a href="https://fastpix.com/docs/video-data-api/views/list-video-views">list video views</a> and <a href="https://fastpix.com/docs/video-data-api/views/list-by-top-content">list by top content</a> endpoints to filter results based on specific criteria. For example, you can filter views by `browser_name`, `os_name`, `device_type`, and more.
|
|
81
81
|
#
|
|
82
|
-
# Related guides: <a href="https://fastpix.com/docs/
|
|
82
|
+
# Related guides: <a href="https://fastpix.com/docs/video-data/what-video-data-do-we-capture">What Video Data do we capture?</a> , <a href="https://fastpix.com/docs/video-data/pass-custom-metadata-to-metrics">Use passable dimensions</a>
|
|
83
83
|
#
|
|
84
84
|
url, params = @sdk_configuration.get_server_details
|
|
85
85
|
base_url = Utils.template_url(url, params)
|
|
@@ -184,15 +184,15 @@ module FastpixClient
|
|
|
184
184
|
# list_filter_values_for_dimension - List the filter values for a dimension
|
|
185
185
|
# This endpoint returns the filter values associated with a specific dimension, along with the total number of video views for each value. For example, it can list all `browser_name` (dimension) and show how many views occurred for all available browsers like Chrome, Safari (filter values).
|
|
186
186
|
#
|
|
187
|
+
# In order to use the <a href="https://fastpix.com/docs/video-data/use-custom-dimensions">Custom Dimensions</a>, you must enable them in the dashboard under settings option based on the plan you have opted for.
|
|
187
188
|
#
|
|
188
|
-
# In order to use the <a href="https://fastpix.com/docs/working-with-video-data/use-custom-dimensions">Custom Dimensions</a>, you must enable them in the dashboard under settings option based on the plan you have opted for.
|
|
189
189
|
#
|
|
190
190
|
# #### Example
|
|
191
191
|
#
|
|
192
192
|
# A developer wants to know how their video content performs across different browsers. By calling this endpoint for the `device_type` dimension, they can retrieve a breakdown of video views by each device (for example, Desktop, Mobile, Tablet). This data helps the developer understand where optimizations or troubleshooting is necessary.
|
|
193
193
|
#
|
|
194
194
|
#
|
|
195
|
-
# Related guide: <a href="https://fastpix.com/docs/
|
|
195
|
+
# Related guide: <a href="https://fastpix.com/docs/video-data/explore-the-dashboard#filters-and-timeframes">Filters and timespan</a>
|
|
196
196
|
#
|
|
197
197
|
request = Models::Operations::ListFilterValuesForDimensionRequest.new(
|
|
198
198
|
dimensions_id: dimensions_id,
|
|
@@ -89,7 +89,7 @@ module FastpixClient
|
|
|
89
89
|
# * **code:** The error code associated with the specific error.
|
|
90
90
|
#
|
|
91
91
|
#
|
|
92
|
-
# Related guide: <a href="https://fastpix.com/docs/
|
|
92
|
+
# Related guide: <a href="https://fastpix.com/docs/video-data/troubleshoot-playback-errors">Troubleshoot errors</a>
|
|
93
93
|
#
|
|
94
94
|
request = Models::Operations::ListErrorsRequest.new(
|
|
95
95
|
timespan: timespan,
|
|
@@ -102,7 +102,7 @@ module FastpixClient
|
|
|
102
102
|
# 3. Include the `summaryLength` parameter, specify the desired length of the summary in words (for example, 120 words), this determines how concise or detailed the summary will be. If no specific summary length is provided, the default length will be 100 words.
|
|
103
103
|
# 4. The response includes the updated media data and confirmation of the changes applied.
|
|
104
104
|
#
|
|
105
|
-
# You can use the <a href="https://fastpix.com/docs/
|
|
105
|
+
# You can use the <a href="https://fastpix.com/docs/webhooks/in-video-ai-events#videomediaaisummaryready">video.mediaAI.summary.ready</a> webhook event to track and notify about the summary generation.
|
|
106
106
|
#
|
|
107
107
|
#
|
|
108
108
|
#
|
|
@@ -110,7 +110,7 @@ module FastpixClient
|
|
|
110
110
|
#
|
|
111
111
|
# **Use case**: This is particularly useful when a user uploads a video and later chooses to generate a summary without needing to re-upload the video.
|
|
112
112
|
#
|
|
113
|
-
# Related guide: <a href="https://fastpix.com/docs/video-
|
|
113
|
+
# Related guide: <a href="https://fastpix.com/docs/in-video-ai/generate-a-video-summary">Video summary</a>
|
|
114
114
|
#
|
|
115
115
|
request = Models::Operations::UpdateMediaSummaryRequest.new(
|
|
116
116
|
media_id: media_id,
|
|
@@ -233,11 +233,11 @@ module FastpixClient
|
|
|
233
233
|
# 2. Include the `chapters` parameter in the request body to enable.
|
|
234
234
|
# 3. The response contains the updated media data, confirming the changes made.
|
|
235
235
|
#
|
|
236
|
-
# You can use the <a href="https://fastpix.com/docs/ai-events/in-video-ai-events#videomediaaichaptersready">video.mediaAI.chapters.ready</a> webhook event to track and notify about the chapters generation.
|
|
237
236
|
#
|
|
237
|
+
# You can use the <a href="https://fastpix.com/docs/webhooks/in-video-ai-events#videomediaaichaptersready">video.mediaAI.chapters.ready</a> webhook event to track and notify about the chapters generation.
|
|
238
238
|
# **Use case:** This is particularly useful when a user uploads a video and later decides to enable chapters without re-uploading the entire video.
|
|
239
239
|
#
|
|
240
|
-
# Related guide: <a href="https://fastpix.com/docs/video-
|
|
240
|
+
# Related guide: <a href="https://fastpix.com/docs/in-video-ai/generate-video-chapters">Video chapters</a>
|
|
241
241
|
#
|
|
242
242
|
request = Models::Operations::UpdateMediaChaptersRequest.new(
|
|
243
243
|
media_id: media_id,
|
|
@@ -365,11 +365,11 @@ module FastpixClient
|
|
|
365
365
|
# 2. Include the `namedEntities` parameter in the request body to enable.
|
|
366
366
|
# 3. Receive a response containing the updated media data, confirming the changes made.
|
|
367
367
|
#
|
|
368
|
-
# You can use the <a href="https://fastpix.com/docs/
|
|
368
|
+
# You can use the <a href="https://fastpix.com/docs/webhooks/in-video-ai-events#videomediaainamedentitiesready">video.mediaAI.named-entities.ready</a> webhook event to track and notify about the named entities extraction.
|
|
369
369
|
#
|
|
370
370
|
# **Use case:** If a user uploads a video and later decides to enable named entity extraction without re-uploading the entire video.
|
|
371
371
|
#
|
|
372
|
-
# Related guide: <a href="https://fastpix.com/docs/video-
|
|
372
|
+
# Related guide: <a href="https://fastpix.com/docs/in-video-ai/extract-named-entities-from-a-video">Named entities</a>
|
|
373
373
|
#
|
|
374
374
|
request = Models::Operations::UpdateMediaNamedEntitiesRequest.new(
|
|
375
375
|
media_id: media_id,
|
|
@@ -492,11 +492,11 @@ module FastpixClient
|
|
|
492
492
|
# 2. Include the `moderation` object and provide the requried `type` parameter in the request body to specify the media type (for example, video/audio/av).
|
|
493
493
|
# 4. The response contains the updated media data, confirming the changes made.
|
|
494
494
|
#
|
|
495
|
-
# You can use the <a href="https://fastpix.com/docs/
|
|
495
|
+
# You can use the <a href="https://fastpix.com/docs/webhooks/in-video-ai-events#videomediaaimoderationready">video.mediaAI.moderation.ready</a> webhook event to track and notify about the detected moderation results.
|
|
496
496
|
#
|
|
497
497
|
# **Use case:** This is particularly useful when a user uploads a video and later decides to enable moderation detection without the need to re-upload it.
|
|
498
498
|
#
|
|
499
|
-
# Related guide: <a href="https://fastpix.com/docs/video-
|
|
499
|
+
# Related guide: <a href="https://fastpix.com/docs/in-video-ai/detect-nsfw-content-and-profanity">Moderate NSFW & Profanity</a>
|
|
500
500
|
#
|
|
501
501
|
request = Models::Operations::UpdateMediaModerationRequest.new(
|
|
502
502
|
media_id: media_id,
|
|
@@ -127,10 +127,11 @@ module FastpixClient
|
|
|
127
127
|
#
|
|
128
128
|
# 4. Use the id in subsequent API calls, such as checking the status of the media with the <a href="https://fastpix.com/docs/video-on-demand-api/manage-videos/get-media">Get Media by ID</a> endpoint to determine when the media is ready for playback.
|
|
129
129
|
#
|
|
130
|
-
# FastPix uses webhooks to tell your application about things that happen in the background, outside of the API regular request flow. For instance, after the media file is created (but not yet processed or encoded), FastPix sends a `POST` request to your specified webhook URL with the event <a href="https://fastpix.com/docs/
|
|
130
|
+
# FastPix uses webhooks to tell your application about things that happen in the background, outside of the API regular request flow. For instance, after the media file is created (but not yet processed or encoded), FastPix sends a `POST` request to your specified webhook URL with the event <a href="https://fastpix.com/docs/webhooks/media-events#videomediacreated">video.media.created</a>.
|
|
131
131
|
#
|
|
132
132
|
#
|
|
133
|
-
# After processing completes, monitor the events <a href="https://fastpix.com/docs/
|
|
133
|
+
# After processing completes, monitor the events <a href="https://fastpix.com/docs/webhooks/media-events#videomediaready">video.media.ready</a> and <a href="https://fastpix.com/docs/webhooks/media-events#videomediafailed">video.media.failed</a> to track the status of the media file.
|
|
134
|
+
|
|
134
135
|
#
|
|
135
136
|
# Related guide: <a href="https://fastpix.com/docs/upload-videos/upload-videos-from-a-url">Upload videos from URL</a>
|
|
136
137
|
#
|
|
@@ -251,7 +252,7 @@ module FastpixClient
|
|
|
251
252
|
#
|
|
252
253
|
# 2. The response includes an `uploadId` and a signed `url` for direct video file upload.
|
|
253
254
|
#
|
|
254
|
-
# 3. Upload your video file to the provided url by making a PUT request. The API accepts the media file from your device and uploads it to the FastPix platform. (Refer to <a href="https://fastpix.com/docs/upload-videos/upload-videos-from-device#
|
|
255
|
+
# 3. Upload your video file to the provided url by making a PUT request. The API accepts the media file from your device and uploads it to the FastPix platform. (Refer to <a href="https://fastpix.com/docs/upload-videos/upload-videos-from-device#initiate-the-upload-session-web-only">Step 3: Initiate the upload</a> for complete instructions.)
|
|
255
256
|
#
|
|
256
257
|
#
|
|
257
258
|
# 4. Once uploaded, the media undergoes processing and is assigned a unique ID for tracking. Retain this `uploadId` for any future operations related to this upload.
|
|
@@ -439,5 +439,258 @@ module FastpixClient
|
|
|
439
439
|
end
|
|
440
440
|
end
|
|
441
441
|
end
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
sig { params(body: Models::Operations::UpdateLiveStreamDomainRestrictionsRequestBody, stream_id: ::String, playback_id: ::String, timeout_ms: T.nilable(Integer)).returns(Models::Operations::UpdateLiveStreamDomainRestrictionsResponse) }
|
|
446
|
+
def update_live_stream_domain_restrictions(body:, stream_id:, playback_id:, timeout_ms: nil)
|
|
447
|
+
# update_live_stream_domain_restrictions - Update domain restrictions for a live stream playback ID
|
|
448
|
+
# This endpoint updates domain-level restrictions for a specific playback ID associated with a live stream.
|
|
449
|
+
# It allows you to restrict playback to specific domains or block known unauthorized domains.
|
|
450
|
+
#
|
|
451
|
+
# **How it works:**
|
|
452
|
+
# 1. Make a `PATCH` request to this endpoint with your desired domain access configuration.
|
|
453
|
+
# 2. Set a default policy (`allow` or `deny`) and specify domain names in the `allow` or `deny` lists.
|
|
454
|
+
# 3. This is commonly used to restrict video playback to your website or approved client domains.
|
|
455
|
+
#
|
|
456
|
+
# **Example:**
|
|
457
|
+
# A streaming service can allow playback only from `example.com` and deny all others by setting: `"defaultPolicy": "deny"` and `"allow": ["example.com"]`.
|
|
458
|
+
#
|
|
459
|
+
request = Models::Operations::UpdateLiveStreamDomainRestrictionsRequest.new(
|
|
460
|
+
stream_id: stream_id,
|
|
461
|
+
playback_id: playback_id,
|
|
462
|
+
body: body
|
|
463
|
+
)
|
|
464
|
+
url, params = @sdk_configuration.get_server_details
|
|
465
|
+
base_url = Utils.template_url(url, params)
|
|
466
|
+
url = Utils.generate_url(
|
|
467
|
+
Models::Operations::UpdateLiveStreamDomainRestrictionsRequest,
|
|
468
|
+
base_url,
|
|
469
|
+
'/live/streams/{streamId}/playback-ids/{playbackId}/domains',
|
|
470
|
+
request
|
|
471
|
+
)
|
|
472
|
+
headers = {}
|
|
473
|
+
headers = T.cast(headers, T::Hash[String, String])
|
|
474
|
+
req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
|
|
475
|
+
headers['content-type'] = req_content_type
|
|
476
|
+
body = encode_request_body(req_content_type, data, form)
|
|
477
|
+
headers['Accept'] = CONTENT_TYPE_JSON
|
|
478
|
+
headers[USER_AGENT_HEADER] = @sdk_configuration.user_agent
|
|
479
|
+
|
|
480
|
+
security = @sdk_configuration.security_source&.call
|
|
481
|
+
|
|
482
|
+
timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
|
|
483
|
+
timeout ||= @sdk_configuration.timeout
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
connection = @sdk_configuration.client
|
|
487
|
+
|
|
488
|
+
hook_ctx = SDKHooks::HookContext.new(
|
|
489
|
+
config: @sdk_configuration,
|
|
490
|
+
base_url: base_url,
|
|
491
|
+
oauth2_scopes: nil,
|
|
492
|
+
operation_id: 'update-live-stream-domain-restrictions',
|
|
493
|
+
security_source: @sdk_configuration.security_source
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
error = T.let(nil, T.nilable(StandardError))
|
|
497
|
+
http_response = T.let(nil, T.nilable(Faraday::Response))
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
begin
|
|
501
|
+
http_response = T.must(connection).patch(url) do |req|
|
|
502
|
+
req.body = body
|
|
503
|
+
req.headers.merge!(headers)
|
|
504
|
+
req.options.timeout = timeout unless timeout.nil?
|
|
505
|
+
Utils.configure_request_security(req, security)
|
|
506
|
+
|
|
507
|
+
@sdk_configuration.hooks.before_request(
|
|
508
|
+
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
509
|
+
hook_ctx: hook_ctx
|
|
510
|
+
),
|
|
511
|
+
request: req
|
|
512
|
+
)
|
|
513
|
+
end
|
|
514
|
+
rescue StandardError => e
|
|
515
|
+
error = e
|
|
516
|
+
ensure
|
|
517
|
+
http_response = apply_after_request_hooks(http_response, error, hook_ctx)
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
content_type = http_response.headers.fetch(CONTENT_TYPE_HEADER, DEFAULT_CONTENT_TYPE)
|
|
521
|
+
if Utils.match_status_code(http_response.status, ['200'])
|
|
522
|
+
if Utils.match_content_type(content_type, CONTENT_TYPE_JSON)
|
|
523
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
524
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
525
|
+
hook_ctx: hook_ctx
|
|
526
|
+
),
|
|
527
|
+
response: http_response
|
|
528
|
+
)
|
|
529
|
+
response_data = http_response.env.response_body
|
|
530
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Operations::UpdateLiveStreamDomainRestrictionsResponseBody)
|
|
531
|
+
response = Models::Operations::UpdateLiveStreamDomainRestrictionsResponse.new(
|
|
532
|
+
status_code: http_response.status,
|
|
533
|
+
content_type: content_type,
|
|
534
|
+
raw_response: http_response,
|
|
535
|
+
object: T.unsafe(obj)
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
return response
|
|
539
|
+
else
|
|
540
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), UNKNOWN_CONTENT_TYPE_ERROR
|
|
541
|
+
end
|
|
542
|
+
elsif Utils.match_status_code(http_response.status, ['4XX'])
|
|
543
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), API_ERROR_OCCURRED
|
|
544
|
+
elsif Utils.match_status_code(http_response.status, ['5XX'])
|
|
545
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), API_ERROR_OCCURRED
|
|
546
|
+
else
|
|
547
|
+
if Utils.match_content_type(content_type, CONTENT_TYPE_JSON)
|
|
548
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
549
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
550
|
+
hook_ctx: hook_ctx
|
|
551
|
+
),
|
|
552
|
+
response: http_response
|
|
553
|
+
)
|
|
554
|
+
response_data = http_response.env.response_body
|
|
555
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::DefaultError)
|
|
556
|
+
response = Models::Operations::UpdateLiveStreamDomainRestrictionsResponse.new(
|
|
557
|
+
status_code: http_response.status,
|
|
558
|
+
content_type: content_type,
|
|
559
|
+
raw_response: http_response,
|
|
560
|
+
default_error: T.unsafe(obj)
|
|
561
|
+
)
|
|
562
|
+
|
|
563
|
+
return response
|
|
564
|
+
else
|
|
565
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), UNKNOWN_CONTENT_TYPE_ERROR
|
|
566
|
+
end
|
|
567
|
+
end
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
sig { params(body: Models::Operations::UpdateLiveStreamUserAgentRestrictionsRequestBody, stream_id: ::String, playback_id: ::String, timeout_ms: T.nilable(Integer)).returns(Models::Operations::UpdateLiveStreamUserAgentRestrictionsResponse) }
|
|
572
|
+
def update_live_stream_user_agent_restrictions(body:, stream_id:, playback_id:, timeout_ms: nil)
|
|
573
|
+
# update_live_stream_user_agent_restrictions - Update user-agent restrictions for a live stream playback ID
|
|
574
|
+
# This endpoint allows updating user-agent restrictions for a specific playback ID associated with a live stream.
|
|
575
|
+
# It can be used to allow or deny specific user-agents during playback request evaluation.
|
|
576
|
+
#
|
|
577
|
+
# **How it works:**
|
|
578
|
+
# 1. Make a `PATCH` request to this endpoint with your desired user-agent access configuration.
|
|
579
|
+
# 2. Specify a default policy (`allow` or `deny`) and provide specific `allow` or `deny` lists.
|
|
580
|
+
# 3. Use this to restrict access to specific browsers, devices, or bots.
|
|
581
|
+
#
|
|
582
|
+
# **Example:**
|
|
583
|
+
# A developer may configure a playback ID to deny access from known scraping user-agents while allowing all others by default.
|
|
584
|
+
#
|
|
585
|
+
request = Models::Operations::UpdateLiveStreamUserAgentRestrictionsRequest.new(
|
|
586
|
+
stream_id: stream_id,
|
|
587
|
+
playback_id: playback_id,
|
|
588
|
+
body: body
|
|
589
|
+
)
|
|
590
|
+
url, params = @sdk_configuration.get_server_details
|
|
591
|
+
base_url = Utils.template_url(url, params)
|
|
592
|
+
url = Utils.generate_url(
|
|
593
|
+
Models::Operations::UpdateLiveStreamUserAgentRestrictionsRequest,
|
|
594
|
+
base_url,
|
|
595
|
+
'/live/streams/{streamId}/playback-ids/{playbackId}/user-agents',
|
|
596
|
+
request
|
|
597
|
+
)
|
|
598
|
+
headers = {}
|
|
599
|
+
headers = T.cast(headers, T::Hash[String, String])
|
|
600
|
+
req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
|
|
601
|
+
headers['content-type'] = req_content_type
|
|
602
|
+
body = encode_request_body(req_content_type, data, form)
|
|
603
|
+
headers['Accept'] = CONTENT_TYPE_JSON
|
|
604
|
+
headers[USER_AGENT_HEADER] = @sdk_configuration.user_agent
|
|
605
|
+
|
|
606
|
+
security = @sdk_configuration.security_source&.call
|
|
607
|
+
|
|
608
|
+
timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
|
|
609
|
+
timeout ||= @sdk_configuration.timeout
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
connection = @sdk_configuration.client
|
|
613
|
+
|
|
614
|
+
hook_ctx = SDKHooks::HookContext.new(
|
|
615
|
+
config: @sdk_configuration,
|
|
616
|
+
base_url: base_url,
|
|
617
|
+
oauth2_scopes: nil,
|
|
618
|
+
operation_id: 'update-live-stream-user-agent-restrictions',
|
|
619
|
+
security_source: @sdk_configuration.security_source
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
error = T.let(nil, T.nilable(StandardError))
|
|
623
|
+
http_response = T.let(nil, T.nilable(Faraday::Response))
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
begin
|
|
627
|
+
http_response = T.must(connection).patch(url) do |req|
|
|
628
|
+
req.body = body
|
|
629
|
+
req.headers.merge!(headers)
|
|
630
|
+
req.options.timeout = timeout unless timeout.nil?
|
|
631
|
+
Utils.configure_request_security(req, security)
|
|
632
|
+
|
|
633
|
+
@sdk_configuration.hooks.before_request(
|
|
634
|
+
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
635
|
+
hook_ctx: hook_ctx
|
|
636
|
+
),
|
|
637
|
+
request: req
|
|
638
|
+
)
|
|
639
|
+
end
|
|
640
|
+
rescue StandardError => e
|
|
641
|
+
error = e
|
|
642
|
+
ensure
|
|
643
|
+
http_response = apply_after_request_hooks(http_response, error, hook_ctx)
|
|
644
|
+
end
|
|
645
|
+
|
|
646
|
+
content_type = http_response.headers.fetch(CONTENT_TYPE_HEADER, DEFAULT_CONTENT_TYPE)
|
|
647
|
+
if Utils.match_status_code(http_response.status, ['200'])
|
|
648
|
+
if Utils.match_content_type(content_type, CONTENT_TYPE_JSON)
|
|
649
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
650
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
651
|
+
hook_ctx: hook_ctx
|
|
652
|
+
),
|
|
653
|
+
response: http_response
|
|
654
|
+
)
|
|
655
|
+
response_data = http_response.env.response_body
|
|
656
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Operations::UpdateLiveStreamUserAgentRestrictionsResponseBody)
|
|
657
|
+
response = Models::Operations::UpdateLiveStreamUserAgentRestrictionsResponse.new(
|
|
658
|
+
status_code: http_response.status,
|
|
659
|
+
content_type: content_type,
|
|
660
|
+
raw_response: http_response,
|
|
661
|
+
object: T.unsafe(obj)
|
|
662
|
+
)
|
|
663
|
+
|
|
664
|
+
return response
|
|
665
|
+
else
|
|
666
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), UNKNOWN_CONTENT_TYPE_ERROR
|
|
667
|
+
end
|
|
668
|
+
elsif Utils.match_status_code(http_response.status, ['4XX'])
|
|
669
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), API_ERROR_OCCURRED
|
|
670
|
+
elsif Utils.match_status_code(http_response.status, ['5XX'])
|
|
671
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), API_ERROR_OCCURRED
|
|
672
|
+
else
|
|
673
|
+
if Utils.match_content_type(content_type, CONTENT_TYPE_JSON)
|
|
674
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
675
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
676
|
+
hook_ctx: hook_ctx
|
|
677
|
+
),
|
|
678
|
+
response: http_response
|
|
679
|
+
)
|
|
680
|
+
response_data = http_response.env.response_body
|
|
681
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::DefaultError)
|
|
682
|
+
response = Models::Operations::UpdateLiveStreamUserAgentRestrictionsResponse.new(
|
|
683
|
+
status_code: http_response.status,
|
|
684
|
+
content_type: content_type,
|
|
685
|
+
raw_response: http_response,
|
|
686
|
+
default_error: T.unsafe(obj)
|
|
687
|
+
)
|
|
688
|
+
|
|
689
|
+
return response
|
|
690
|
+
else
|
|
691
|
+
raise ::FastpixClient::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), UNKNOWN_CONTENT_TYPE_ERROR
|
|
692
|
+
end
|
|
693
|
+
end
|
|
694
|
+
end
|
|
442
695
|
end
|
|
443
696
|
end
|
|
@@ -216,7 +216,7 @@ module FastpixClient
|
|
|
216
216
|
#
|
|
217
217
|
# Suppose a content creator is hosting a live concert and wants to display the number of live viewers on their dashboard. This endpoint can be queried to show up-to-date viewer statistics.
|
|
218
218
|
#
|
|
219
|
-
#
|
|
219
|
+
# Related guide: <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#delete-a-stream">Manage streams</a>
|
|
220
220
|
request = Models::Operations::GetLiveStreamViewerCountByIdRequest.new(
|
|
221
221
|
stream_id: stream_id
|
|
222
222
|
)
|
|
@@ -331,8 +331,8 @@ module FastpixClient
|
|
|
331
331
|
#
|
|
332
332
|
# Suppose a news agency is broadcasting a live event and wants to track the configurations set for the live stream while also checking the stream's status.
|
|
333
333
|
#
|
|
334
|
-
#
|
|
335
|
-
#
|
|
334
|
+
# Related guide: <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#delete-a-stream">Manage streams</a>
|
|
335
|
+
#
|
|
336
336
|
request = Models::Operations::GetLiveStreamByIdRequest.new(
|
|
337
337
|
stream_id: stream_id
|
|
338
338
|
)
|
|
@@ -444,14 +444,14 @@ module FastpixClient
|
|
|
444
444
|
# delete_live_stream - Delete a stream
|
|
445
445
|
# Permanently deletes a specified live stream from the workspace. If the stream is active, the encoder is disconnected and ingestion stops immediately. This action is irreversible, and any future playback attempts fail as a result.
|
|
446
446
|
#
|
|
447
|
-
# Provide the `streamId` in the request to terminate active connections and remove the stream from the workspace. You can further look for <a href="https://fastpix.com/docs/
|
|
447
|
+
# Provide the `streamId` in the request to terminate active connections and remove the stream from the workspace. You can further look for <a href="https://fastpix.com/docs/webhooks/live-events#videolive_streamdeleted">video.live_stream.deleted</a> webhook to notify your system about the status.
|
|
448
448
|
#
|
|
449
449
|
# #### Example
|
|
450
450
|
#
|
|
451
451
|
# For an online concert platform, a trial stream was mistakenly made public. The event manager deletes the stream before the concert begins to avoid confusion among viewers.
|
|
452
452
|
#
|
|
453
453
|
#
|
|
454
|
-
#
|
|
454
|
+
# Related guide: <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#delete-a-stream">Manage streams</a>
|
|
455
455
|
request = Models::Operations::DeleteLiveStreamRequest.new(
|
|
456
456
|
stream_id: stream_id
|
|
457
457
|
)
|
|
@@ -564,15 +564,16 @@ module FastpixClient
|
|
|
564
564
|
# This endpoint allows you to modify the parameters of an existing live stream, such as its `metadata` (title, description) or the `reconnectWindow`. It’s useful for making changes to a stream that has already been created but not yet ended. After the live stream is disabled, you cannot update a stream.
|
|
565
565
|
#
|
|
566
566
|
#
|
|
567
|
-
#
|
|
568
|
-
#
|
|
567
|
+
#
|
|
568
|
+
# The updated stream parameters and the `streamId` needs to be shared in the request, and FastPix returns the updated stream details. After the update, <a href="https://fastpix.com/docs/webhooks/live-events#videolive_streamupdated">video.live_stream.updated</a> webhook event notifies your system.
|
|
569
569
|
# #### Example
|
|
570
570
|
#
|
|
571
571
|
# A host realizes they need to extend the reconnect window for their live stream in case they lose connection temporarily during the event. Or suppose during a multi-day online conference, the event organizers need to update the stream title to reflect the next day"s session while keeping the same stream ID for continuity.
|
|
572
572
|
#
|
|
573
573
|
#
|
|
574
|
-
#
|
|
575
|
-
#
|
|
574
|
+
# Related guide: <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#delete-a-stream">Manage streams</a>
|
|
575
|
+
#
|
|
576
|
+
#
|
|
576
577
|
request = Models::Operations::UpdateLiveStreamRequest.new(
|
|
577
578
|
stream_id: stream_id,
|
|
578
579
|
body: body
|
|
@@ -697,7 +698,7 @@ module FastpixClient
|
|
|
697
698
|
#
|
|
698
699
|
# A creator disables a livestream to pause it temporarily. Later, they decide to continue the session. By calling this endpoint with the stream's ID, they can re-enable and restart the same livestream.
|
|
699
700
|
#
|
|
700
|
-
# Related guide <a href="https://fastpix.com/docs/
|
|
701
|
+
# Related guide <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#enable-a-stream">Manage streams</a>
|
|
701
702
|
request = Models::Operations::EnableLiveStreamRequest.new(
|
|
702
703
|
stream_id: stream_id
|
|
703
704
|
)
|
|
@@ -815,7 +816,7 @@ module FastpixClient
|
|
|
815
816
|
#
|
|
816
817
|
# A speaker finishes their live session and wants to prevent the stream from being mistakenly started again. By calling this endpoint, the stream is transitioned to a `disabled` state, ensuring it's permanently stopped (unless re-enabled on a paid plan).
|
|
817
818
|
#
|
|
818
|
-
#
|
|
819
|
+
#Related guide <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#enable-a-stream">Manage streams</a>
|
|
819
820
|
request = Models::Operations::DisableLiveStreamRequest.new(
|
|
820
821
|
stream_id: stream_id
|
|
821
822
|
)
|
|
@@ -935,7 +936,7 @@ module FastpixClient
|
|
|
935
936
|
#
|
|
936
937
|
# A virtual event ends, and the system or host needs to close the livestream to prevent further streaming. This endpoint ensures the livestream status is changed from `active` to `idle`, indicating it's officially completed.
|
|
937
938
|
#
|
|
938
|
-
#
|
|
939
|
+
#Related guide <a href="https://fastpix.com/docs/live-streaming/create-and-manage-live-streams#enable-a-stream">Manage streams</a>
|
|
939
940
|
request = Models::Operations::CompleteLiveStreamRequest.new(
|
|
940
941
|
stream_id: stream_id
|
|
941
942
|
)
|