如何从基于 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 (将#修改为@)