Kinesis视频流异步获取帧

问题描述 投票:0回答:1

我想从AWS Kinesis捕获视频流并使用asyncio。我的目标是从流中提取帧并将它们传递给处理队列。

以下是我到目前为止的工作示例。它接收各种长度的数据块(可能在76字节到8192的范围内),这似乎不是一个完整的帧。

是否有一种廉价的方法可以在支持asyncio的情况下将流拆分为块,最好没有线程?

我希望一个应用程序处理至少10-20个流,并在服务器上运行每个CPU一个应用程序。

我在考虑ffmpegopencv,但它们看起来太重了,似乎与asyncio不太相容。

import asyncio

import aiobotocore

VIDEO_STREAM_NAME = 'bc-test1'


async def get_data2(loop):
    chunk_size = 1024 * 1024 * 500
    session = aiobotocore.get_session(loop=loop)
    async with session.create_client('kinesisvideo', region_name='us-west-2', ) as client:
        resp = await client.get_data_endpoint(
            StreamName=VIDEO_STREAM_NAME,
            APIName='GET_MEDIA',
        )
        data_url = resp['DataEndpoint']

    async with session.create_client('kinesis-video-media', endpoint_url=data_url) as client:
        resp = await client.get_media(
            StreamName=VIDEO_STREAM_NAME,
            StartSelector={"StartSelectorType": "NOW", },
        )
        print(resp)
        while True:
            data = await resp['Payload'].read(1024 * 8)
            if data:
                print("frame len: %s" % len(frame))
            else:
                print("No data")
                break


def main():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(get_data2(loop))


if __name__ == '__main__':
    main()

我会考虑建议不要使用asyncio和另一种解决方案来满足上述要求。

python python-asyncio video-processing amazon-kinesis
1个回答
0
投票

它必须是python吗?

KinesisVideoStream在Java中有示例来使用流,解析数据并解码视频:https://github.com/aws/amazon-kinesis-video-streams-parser-library

KinesisVideoStream也有KIT:https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/它可以用来按比例处理视频流。

© www.soinside.com 2019 - 2024. All rights reserved.