【问题标题】:Boto3 Kinesis Video GetMedia and OpenCVBoto3 Kinesis Video GetMedia 和 OpenCV
【发布时间】:2018-10-08 06:05:41
【问题描述】:

我正在尝试使用 Boto3 从 kinesis 获取视频流,然后使用 OpenCV 显示提要并同时将其保存到文件中。

获取签名 URL 和 Getmedia 请求的过程似乎完美无缺,只是当我尝试使用 OpenCV 呈现它时,它似乎不起作用。

数据正在流向流

import boto3
import numpy as np
import cv2

kinesis_client = boto3.client('kinesisvideo',
                              region_name='eu-west-1',
                              aws_access_key_id='ACC',
                              aws_secret_access_key='KEY'
                              )

response = kinesis_client.get_data_endpoint(
    StreamARN='ARN',
    APIName='GET_MEDIA'
)
video_client = boto3.client('kinesis-video-media',
                            endpoint_url=response['DataEndpoint']
                            )
stream = video_client.get_media(
    StreamARN='ARN',
    StartSelector={'StartSelectorType': 'NOW'}
)
# print(stream)


datafeed = stream['Payload'].read()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(True):
        ret, frame = stream['Payload'].read()


        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        else:
            break
cap.release()
out.release()
cv2.destroyAllWindows()

【问题讨论】:

    标签: python amazon-web-services opencv boto3 amazon-kinesis


    【解决方案1】:

    为了最终回答这个问题,我找到了一个基本的解决方案,它使用了 kineses 视频流中可用的 HLS 输出。 2018 年 7 月推出

    博文:https://aws.amazon.com/blogs/aws/amazon-kinesis-video-streams-adds-support-for-hls-output-streams/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AmazonWebServicesBlog+%28Amazon+Web+Services+Blog%29

    我在下面粘贴了我的代码的工作版本。

    我正在使用 AWS ENV 变量进行 BOTO3 身份验证。

    import boto3
    import cv2
    
    STREAM_NAME = "test-stream"
    kvs = boto3.client("kinesisvideo")
    # Grab the endpoint from GetDataEndpoint
    endpoint = kvs.get_data_endpoint(
        APIName="GET_HLS_STREAMING_SESSION_URL",
        StreamName=STREAM_NAME
    )['DataEndpoint']
    
    print(endpoint)
    
    # # Grab the HLS Stream URL from the endpoint
    kvam = boto3.client("kinesis-video-archived-media", endpoint_url=endpoint)
    url = kvam.get_hls_streaming_session_url(
        StreamName=STREAM_NAME,
        PlaybackMode="LIVE"
    )['HLSStreamingSessionURL']
    
    
    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")
    

    【讨论】:

    • 太棒了!感谢您分享您的代码!万分感谢。
    • 对我来说,框架总是无。我在 kinesis 视频流媒体查看器中获得了实时供稿,因此它正在运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多