如何解决如何从基于 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,# FragmentSelector={
# 'FragmentSelectorType': 'PRODUCER_TIMESTAMP',# 'TimestampRange': {
# 'StartTimestamp': datetime(2021,7,18),# 'EndTimestamp': datetime(2021,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 视频流而不是通道发送视频流时才可能? 否则什么是固定代码?
提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。