python - 如何从基于 Python 的 Lambda 函数读取和处理 Kinesis Video Stream Signaling Chanel?
问题描述
前端使用 KVS WebRTC Front SDK 将视频流发送到 Kinesis Video Stream Signaling Chanel。
我正在尝试从 AWS 中基于 Python 的 Lambda 读取实时流。测试代码如下:
kinesis_client = boto3.client('kinesisvideo')
def lambda_handler(event, context):
# # TODO implement
# print(os.listdir('/opt'))
# print(os.listdir('/opt/bin'))
# print(cv2.__version__)
# print(boto3.__version__)
# print(botocore.__version__)
response = kinesis_client.get_signaling_channel_endpoint(
ChannelARN=channel_arn,
SingleMasterChannelEndpointConfiguration={
'Protocols': [
# 'WSS',
'HTTPS',
],
'Role': role
}
)
for endpoint in response['ResourceEndpointList']:
channel_endpoint = endpoint['ResourceEndpoint']
list_streams_response = kinesis_client.list_streams(
MaxResults=123,
# NextToken='string',
# StreamNameCondition={
# 'ComparisonOperator': 'BEGINS_WITH',
# 'ComparisonValue': 'string'
# }
)
stream_info_list = list_streams_response['StreamInfoList']
for stream in stream_info_list:
stream_name = stream['StreamName']
stream_arn = stream['StreamARN']
stream_key_id = stream['KmsKeyId']
stream_version = stream['Version']
# Grab the endpoint from GetDataEndpoint
endpoint = kinesis_client.get_data_endpoint(
# APIName="GET_MEDIA",
# APIName="GET_HLS_STREAMING_SESSION_URL",
APIName="GET_MEDIA_FOR_FRAGMENT_LIST",
StreamName=stream_name
)['DataEndpoint']
print(endpoint)
# # Grab the HLS Stream URL from the endpoint
kvam = boto3.client("kinesis-video-archived-media", endpoint_url=endpoint)
fragments = kvam.list_fragments(
# StreamName=stream_name,
StreamARN=stream_arn,
MaxResults=123,
# NextToken='string',
# FragmentSelector={
# 'FragmentSelectorType': 'PRODUCER_TIMESTAMP',
# 'TimestampRange': {
# 'StartTimestamp': datetime(2021, 7, 18),
# 'EndTimestamp': datetime(2021, 7, 18)
# }
# }
)
print(fragments)
url = kvam.get_hls_streaming_session_url(
StreamName=stream_name,
PlaybackMode="LIVE"
)['HLSStreamingSessionURL']
print(url)
video_client = boto3.client('kinesis-video-media',
endpoint_url=endpoint
)
stream = video_client.get_media(
StreamARN=stream_arn,
StartSelector={'StartSelectorType': 'NOW'}
)
# print(stream)
vcap = cv2.VideoCapture(url)
while(True):
# Capture frame-by-frame
ret, frame = vcap.read()
if frame is not None:
# Display the resulting frame
cv2.imshow('frame',frame)
# Press q to close the video windows before it ends if you want
if cv2.waitKey(22) & 0xFF == ord('q'):
break
else:
print("Frame is None")
break
# When everything done, release the capture
vcap.release()
cv2.destroyAllWindows()
print("Video stop")
但是无法读取和处理。我的问题是
是否可以通过通道读取和处理 webrtc 流?或者只有当前端通过 Kinesis 视频流而不是通道发送视频流时才有可能?否则什么是固定代码?
先感谢您。
解决方案
推荐阅读
- list - 如何通过 Terraform 0.12 中的列表(对象)进行 for_each
- c# - 在 C# 中访问 Sharepoint Online 上的数据/文件
- r - 在 R 中测试字符串相等性,其中字符串的顺序不同
- python - 有没有办法使用列表推导来创建参数化 lambda 函数的列表?
- angular - 捆绑到 UMD 错误无法从 dist\fesm5\my-api-name.js 解析“my-service”
- r - ggplot2 - 为控制变量的不同条件绘制拟合值
- sql - 返回所有用户,即使是那些不符合我标准的用户
- c# - 排序列表
关于对象的属性 - r - ggplot2中的指数衰减
- python - Numpy数组 - IndexError:数组索引过多