Kinesis Video Stream Async получить кадры - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы захватить видеопоток из AWS Kinesis и использовать asyncio.Моя цель - извлечь кадры из потока и передать их в очередь обработки.

Ниже приведен рабочий пример того, что у меня есть.Он получает фрагменты данных различной длины (например, в диапазоне от 76 байт до 8192), которые не являются полным кадром.

Существует ли дешевый способ разделения потока на фрагментыс поддержкой asyncio и предпочтительно без потоков?

Я хочу, чтобы одно приложение обрабатывало не менее 10-20 потоков и чтобы на сервере работало одно приложение на каждый процессор.

Я думал о ffmpeg и opencv, но они кажутся слишком тяжелыми и, по-видимому, плохо совместимы с 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 с другим решением для удовлетворениятребования выше.

1 Ответ

0 голосов
/ 28 февраля 2019

Должен ли это быть 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/ Может использоваться для обработки видеопотоков в масштабе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...