您如何有效地提取 Amazon Kinesis Video Stream 以进行自定义 python 处理?
How can you effectively pull an Amazon Kinesis Video Stream for custom python processing?
我有一个流式传输到 Amazon Kinesis Video Streams 的 RTSP 流。我希望能够 运行 对流的每一帧进行自定义图像处理。我有python写的自定义图像处理算法,自然希望能用python拉KVS,输入图像处理算法。首先,我尝试制作一个 python 应用程序,该应用程序仅按照 的建议显示 KVS 流(但是这个 post 使用 Amazon Rekognition 进行自定义处理,我的用例(自定义python 处理)略有不同)。
我的问题是:
为什么我的 HLS python KVS 播放器延迟/断断续续(随机暂停,然后很快播放过去的几秒)?然而,HLS 流光 available here 看起来相当不错。
如何有效地提取 Amazon Kinesis Video Stream 以进行自定义 python 处理? pros/cons 使用 HLS 与 Amazon 的 GetMedia API 有何不同?
- 我还研究了使用 Amazon 的 GetMedia API,发现 this post 有人尝试使用 GetMedia 但最后却使用了 HLS。
- 我找到了使用 GetMedia 进行自定义处理的方法 explained here (python) and here (c++)。
是否值得为此使用 Sagemaker?对于我的图像处理,我只想进行推理,我不需要训练网络,它已经训练好了。
kvs_player.py
的代码:
import boto3
import cv2
STREAM_NAME = "ExampleStream"
STREAM_ARN = "MY_STREAM_ARN"
AWS_REGION = 'us-east-1'
def hls_stream():
kv_client = boto3.client("kinesisvideo", region_name=AWS_REGION)
endpoint = kv_client.get_data_endpoint(
StreamName=STREAM_NAME,
APIName="GET_HLS_STREAMING_SESSION_URL"
)['DataEndpoint']
print(endpoint)
# # Grab the HLS Stream URL from the endpoint
kvam_client = boto3.client("kinesis-video-archived-media", endpoint_url=endpoint, region_name=AWS_REGION)
url = kvam_client.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")
if __name__ == '__main__':
hls_stream()
一些通用的答案
- 您可能想要对您的应用程序进行一些调试以了解“滞后”的含义。可能只是网络延迟、传输错误或性能问题 运行 宁解码、python 处理和稍后 re-encoding。
- GetMedia 是一个快速 API 并且可以使用 Parser 库 https://github.com/aws/amazon-kinesis-video-streams-parser-library 进行 real-time 解析。您可能需要解码两个数量级以上的视频流 CPU 和 IO 密集型操作,因此您可能希望使用一些硬件加速解码器(或者至少是一个基于软件的良好解码器,它利用了 SIMD/SSE2指令集)。 JCodec 肯定不是那个。
- 这真的取决于你的应用程序。无论如何,在真正的 Sagemaker 运行 之前,您需要检索片段、解析和解码它们。有一个 KVS Sagemaker KIT 示例,您可以将其用于更严肃的推理应用程序。
对于范围更广、针对性更强的问题,您可以直接转到 GitHub 页面,找到相关的 project/asset 问题,并删除一个问题,包括详细描述和详细日志。
我有一个流式传输到 Amazon Kinesis Video Streams 的 RTSP 流。我希望能够 运行 对流的每一帧进行自定义图像处理。我有python写的自定义图像处理算法,自然希望能用python拉KVS,输入图像处理算法。首先,我尝试制作一个 python 应用程序,该应用程序仅按照
我的问题是:
为什么我的 HLS python KVS 播放器延迟/断断续续(随机暂停,然后很快播放过去的几秒)?然而,HLS 流光 available here 看起来相当不错。
如何有效地提取 Amazon Kinesis Video Stream 以进行自定义 python 处理? pros/cons 使用 HLS 与 Amazon 的 GetMedia API 有何不同?
- 我还研究了使用 Amazon 的 GetMedia API,发现 this post 有人尝试使用 GetMedia 但最后却使用了 HLS。
- 我找到了使用 GetMedia 进行自定义处理的方法 explained here (python) and here (c++)。
是否值得为此使用 Sagemaker?对于我的图像处理,我只想进行推理,我不需要训练网络,它已经训练好了。
kvs_player.py
的代码:
import boto3
import cv2
STREAM_NAME = "ExampleStream"
STREAM_ARN = "MY_STREAM_ARN"
AWS_REGION = 'us-east-1'
def hls_stream():
kv_client = boto3.client("kinesisvideo", region_name=AWS_REGION)
endpoint = kv_client.get_data_endpoint(
StreamName=STREAM_NAME,
APIName="GET_HLS_STREAMING_SESSION_URL"
)['DataEndpoint']
print(endpoint)
# # Grab the HLS Stream URL from the endpoint
kvam_client = boto3.client("kinesis-video-archived-media", endpoint_url=endpoint, region_name=AWS_REGION)
url = kvam_client.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")
if __name__ == '__main__':
hls_stream()
一些通用的答案
- 您可能想要对您的应用程序进行一些调试以了解“滞后”的含义。可能只是网络延迟、传输错误或性能问题 运行 宁解码、python 处理和稍后 re-encoding。
- GetMedia 是一个快速 API 并且可以使用 Parser 库 https://github.com/aws/amazon-kinesis-video-streams-parser-library 进行 real-time 解析。您可能需要解码两个数量级以上的视频流 CPU 和 IO 密集型操作,因此您可能希望使用一些硬件加速解码器(或者至少是一个基于软件的良好解码器,它利用了 SIMD/SSE2指令集)。 JCodec 肯定不是那个。
- 这真的取决于你的应用程序。无论如何,在真正的 Sagemaker 运行 之前,您需要检索片段、解析和解码它们。有一个 KVS Sagemaker KIT 示例,您可以将其用于更严肃的推理应用程序。
对于范围更广、针对性更强的问题,您可以直接转到 GitHub 页面,找到相关的 project/asset 问题,并删除一个问题,包括详细描述和详细日志。