Skip to content

jmlxgll/amazon-kinesis-video-streams-media-interface

 
 

Repository files navigation

Amazon Kinesis Video Streams Media Interface

main main

Introduction

Amazon Kinesis Video Streams Media Interface provides abstract interfaces for board specific media APIs. This repository also contains boards sensors/encoder implementations for Amazon Kinesis Video Streams Producer and WebRTC with out-of-box samples.

Supported Boards

  • FILE(Dummy boards that can capture from sample frames)
  • x86/x64(By selecting board V4L2 or FILE)
  • RPi(By selecting board V4L2 or FILE)
  • Ingenic T31(By selecting board T31 or FILE)
  • Fullhan FH8626V100(By selecting board FH8626V100 or FILE)

Getting started with out-of-box KVS WebRTC sample

  1. Prepare the AWS credentials
    • If you want to use AWS access key id/access key secrets, you can generate AWS credentials by AWS IAM console.
    • Alternatively if you want to use AWS IoT Certificate, you can generate AWS credentials by using this script
  2. Clone the code:
git clone https://github.com/aws-samples/amazon-kinesis-video-streams-media-interface.git
  1. Copy SoC SDK dependencies into 3rdparty/$BOARD/. See 3rdparty/README.md.
  2. Build the code:
export CC=${YOUR_C_TOOLCHAIN}
export CXX=${YOUR_CXX_TOOLCHAIN}
cd amazon-kinesis-video-streams-media-interface
mkdir build; cd build; cmake .. -DBOARD=${YOUR_BOARD_NAME}
make
  1. Upload built artifacts(i.e kvswebrtcmaster-static) at amazon-kinesis-video-streams-media-interface/build/samples/webrtc/ to your board.

  2. Setup AWS credentials in environment variables.

    • If you want to use AWS access key id/access key secrets, use following commands to setup environment variables:
    export AWS_KVS_LOG_LEVEL=2
    export AWS_DEFAULT_REGION=us-east-1
    export AWS_KVS_CACERT_PATH=rootca.pem
    export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
    export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Replace AWS_DEFAULT_REGION, AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY with your own credentials

    You can use Root CA in resources/certs/rootca.pem, or you can download it from Amazon Trust Services

    • Alternatively if you want to use AWS IoT Certificate, turn on IOT_CORE_ENABLE_CREDENTIALS in Samples.h and using following commands to setup environment variables:
    export AWS_KVS_LOG_LEVEL=2
    export AWS_DEFAULT_REGION=us-east-1
    export AWS_KVS_CACERT_PATH=rootca.pem
    export AWS_IOT_CORE_THING_NAME=your_camera_name
    export AWS_IOT_CORE_CREDENTIAL_ENDPOINT=xxxxxxxxxxxxxx.credentials.iot.us-east-1.amazonaws.com
    export AWS_IOT_CORE_CERT=your_camera_certificate.pem
    export AWS_IOT_CORE_PRIVATE_KEY=your_camera_private.key
    export AWS_IOT_CORE_ROLE_ALIAS=your_camera_role_alias

    You can use Root CA in resources/certs/rootca.pem, or you can download it from Amazon Trust Services

  3. Make sure your the system time on your board has been synchronized. You may set it manually or use ntp client.

  4. If you are using access key id/access key secret, execute sample with channel name as parameter: ./kvswebrtcmaster-static your_channel_name. If you are using AWS IoT Certificate, execute sample on your board directly: ./kvswebrtcmaster-static.

  5. Check WebRTC live stream via AWS console or AWS WebRTC test page

    Browser should work as viewer mode during test.

Getting started with out-of-box KVS Producer sample

  1. Clone the code:
git clone https://github.com/aws-samples/amazon-kinesis-video-streams-media-interface.git
  1. Copy SoC SDK dependencies into 3rdparty/$BOARD/. See 3rdparty/README.md.
  2. Build the code:
export CC=${YOUR_C_TOOLCHAIN}
export CXX=${YOUR_CXX_TOOLCHAIN}
cd amazon-kinesis-video-streams-media-interface
mkdir build; cd build; cmake .. -DBUILD_WEBRTC_SAMPLES=OFF -DBUILD_KVS_SAMPLES=ON -DBOARD=${YOUR_BOARD_NAME}
make
  1. Upload built artifacts(i.e kvsproducer-static) at amazon-kinesis-video-streams-media-interface/build/samples/kvs/ to your board.
  2. Setup AWS credentials in environment variables. The sample is using AWS access key/secret key by default:
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_DEFAULT_REGION=us-east-1
export AWS_KVS_HOST=kinesisvideo.us-east-1.amazonaws.com
  1. Make sure your the system time on your board has been synchronized. You may set it manually or use ntp client.
  2. Execute sample on your board: ./kvsproducer-static $YOUR_STREAM_NAME
  3. Check DASH live stream via AWS KVS test page
  4. Download video clips via AWS console.

In current stage, browser doesn't support G.711 via HLS/DASH. To verify audio content in G.711 formats, user must download video clips.

Getting started with out-of-box save frame sample

  1. Clone the code:
git clone https://github.com/aws-samples/amazon-kinesis-video-streams-media-interface.git
  1. Copy SoC SDK dependencies into 3rdparty/$BOARD/. See 3rdparty/README.md.
  2. Build the code:
export CC=${YOUR_C_TOOLCHAIN}
export CXX=${YOUR_CXX_TOOLCHAIN}
cd amazon-kinesis-video-streams-media-interface
mkdir build; cd build; cmake .. -DBUILD_WEBRTC_SAMPLES=OFF -DBUILD_SAVE_FRAME_SAMPLES=ON -DBOARD=${YOUR_BOARD_NAME}
make
  1. Execute sample on your board: ./saveframe-static $FILE_NAME

Platform Implementation Guide

To adapt other platforms SDKs with Amazon Kinesis Video Streams Media Interface, you need to implement interfaces in include/com/amazonaws/kinesis/video/capturer/VideoCapturer.h, include/com/amazonaws/kinesis/video/capturer/AudioCapturer.h and include/com/amazonaws/kinesis/video/player/AudioPlayer.h:

  • VideoCapturer.h: abstract interfaces defined for video capturer sensor/encoder.
  • AudioCapturer.h: abstract interfaces defined for audio capturer sensor/encoder.
  • AudioPlayer.h: abstract interfaces defined for audio playback sensor/encoder.

The implementations of those interfaces should be put into source/${BOARD_NAME} and follow the name rules:

  • ${BOARD_NAME}VideoCapturer.c
  • ${BOARD_NAME}AudioCapturer.c
  • ${BOARD_NAME}AudioPlayer.c

After implementation, you also need to create a platform specific CMake file in CMake named as ${BOARD_NAME}.cmake:

if(BOARD STREQUAL "BOARD_NAME")
    set(BOARD_SDK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/${BOARD})
    # Add board related SDK sources here
    set(BOARD_SRCS
    )
    # Add board related SDK header here
    set(BOARD_INCS_DIR
        ${BOARD_SDK_DIR}/include/
        ${BOARD_SDK_DIR}/samples/libimp-samples/
    )
    # Add board related SDK lib here
    set(BOARD_LIBS_SHARED
    )
    set(BOARD_LIBS_STATIC
    )
endif()

Contributing

Contributing Guide

Code Of Conduct

Code Of Conduct

License

Apache 2.0

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 92.8%
  • CMake 7.2%