Amazon Kinesis Video Streams にストリーミングする RTSP ストリームがあります。ストリームの各フレームでカスタム画像処理を実行できるようにしたいと考えています。私はPythonで書かれたカスタム画像処理アルゴリズムを持っているので、当然、KVSをPythonでプルして、画像処理アルゴリズムに入力できるようにしたいと考えています。まず、この投稿のアドバイスに従って、KVS ストリームを表示するだけの python アプリを作成してみました(ただし、この投稿ではカスタム処理に Amazon Rekognition を使用していますが、私のユースケース (カスタム python 処理) は少し異なります)。
私の質問は次のとおりです。
私の HLS python KVS プレーヤーはどうしてラグがあったり途切れたりするのですか? ただし、ここで入手できるHLS ストリーマーはかなり良さそうです。
カスタム Python 処理のために Amazon Kinesis Video Stream を効果的にプルするにはどうすればよいですか? HLS と Amazon の GetMedia API の使用の長所と短所は何ですか?
- また、Amazon の GetMedia API の使用について調べたところ、誰かが GetMedia を使用しようとしたが、HLS を使用することになったこの投稿が見つかりました。
- ここ (python)とここ (c++) で説明されているカスタム処理に GetMedia を使用する方法を見つけました。
これに 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()