微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从基于 Python 的 Lambda 函数读取和处理 Kinesis Video Stream Signaling Chanel?

如何解决如何从基于 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 举报,一经查实,本站将立刻删除。