Skip to main content

Amazon Kinesis Video Streams Producer SDK (C++) による開発

Amazon Kinesis Video Streams CPP Producer, GStreamer Plugin and JNI

参考

処理の流れ (基本)

  1. KinesisVideoProducer インスタンスを生成
  2. ストリームを生成
  3. ストリームを開始
  4. ストリームにフレームデータを送信

1. KinesisVideoProducer インスタンスを生成

class MyDeviceInfoProvider : public DefaultDeviceInfoProvider {
};

class MyClientCallbackProvider : public ClientCallbackProvider {
UINT64 getCallbackCustomData() override {
return reinterpret_cast<UINT64> (this);
}
};

class MyStreamCallbackProvider : public StreamCallbackProvider {
UINT64 getCallbackCustomData() override {
return reinterpret_cast<UINT64> (this);
}
};

std::unique_ptr<KinesisVideoProducer> createProducer(const std::string &accessKeyId, const std::string &secretAccessKey, const std::string &region) {
// AWS 認証情報
auto credentials = new Credentials(
accessKeyId,
secretAccessKey,
"",
std::chrono::seconds(3600)
);

// KinesisVideoProducer インスタンスを生成
auto kinesisVideoProducer = KinesisVideoProducer::createSync(
std::make_unique<MyDeviceInfoProvider>(),
std::make_unique<MyClientCallbackProvider>(),
std::make_unique<MyStreamCallbackProvider>(),
std::make_unique<StaticCredentialProvider>(*credentials),
region
);

return kinesisVideoProducer;
}

2. ストリームを生成

std::shared_ptr<KinesisVideoStream> createStream(std::unique_ptr<KinesisVideoProducer> &kinesisVideoProducer) {
// ストリームの生成
auto streamDefinition = std::make_unique<StreamDefinition>(
"stream-test",
std::chrono::hours(1)
);
auto stream = kinesisVideoProducer->createStreamSync(move(streamDefinition));

return stream;
}

3. ストリームを開始

stream->start();

4. ストリームにフレームデータを送信

Frame frame;
frame.duration = // duration
frame.trackId = DEFAULT_TRACK_ID;
frame.frameData = // フレームデータのポインタ
frame.size = // フレームデータのサイズ
frame.index = // フレームインデックス
frame.decodingTs = // DTS (100ns 単位)
frame.presentationTs = // PTS (100ns 単位)
frame.flags = // キーフレームなら FRAME_FLAG_KEY_FRAME、そうでなければ FRAME_FLAG_NONE
stream->putFrame(frame);

詳細

KinesisVideoProducer インスタンスを生成

引数

ArgumentTypeDefaultDescription
device_info_providerDeviceInfoProvider(必須)ストリームの作成、ストリームの説明の取得、ストリームの削除に対するコールバックインターフェイス
client_callback_providerClientCallbackProvider(必須)クライアントの準備完了、使用可能なストレージまたはメモリ不足に対するコールバックインターフェイス
stream_callback_providerStreamCallbackProvider(必須)ストリームの準備完了、フレーム停止、ストリームエラー等のイベントに対するコールバックインターフェイス
credential_providerCredentialProvider(必須)AWS 認証情報
regionbasic_string"us-west-2"リージョン名
control_plane_uribasic_string""
user_agent_namebasic_string"AWS-SDK-KVS"Producer の User-Agent 名
is_caching_endpointboolfalse
caching_update_perioduint64_t40 * 10LL * 1000LL * 1000LL * 60LL

ストリームを生成

StreamDefinition

ArgumentTypeDefaultDescription
stream_namestring(必須)ストリーム名
retention_periodduration(必須)
tagsmapnullptr
kms_key_idstring""
streaming_typeenumSTREAMING_TYPE_REALTIMEリアルタイム/ニアリアルタイム/オフライン
content_typestring"video/h264"
max_latencyduration0最大レイテンシー
fragment_durationduration2sフラグメント間隔 (1~10s)
timecode_scaleduration1msタイムコードの単位
key_frame_fragmentationbooltrue
frame_timecodesbooltrue
absolute_fragment_timesbooltrue
fragment_acksbooltrue
restart_on_errorbooltrue
recalculate_metricsbooltrue
nal_adaptation_flagsuint32_tNAL_ADAPTATION_ANNEXB_NALS
| NAL_ADAPTATION_ANNEXB_CPD_NALS
frame_rateuint32_t25フレームレート
avg_bandwidth_bpsuint32_t4 * 1024 * 1024平均帯域幅
buffer_durationduration120sバッファー間隔
replay_durationduration40s
connection_stalenessduration30s
codec_idstring"V_MPEG4/ISO/AVC"
track_namestring"kinesis_video"
codecPrivateDatauint8_t*nullptr
codecPrivateDataSizeuint32_t0
track_typeenumMKV_TRACK_INFO_TYPE_VIDEOVIDEO/AUDIO/UNKOWN
segment_uuidvector<uint8_t>vector<uint8_t>()
default_track_iduint64_tDEFAULT_TRACK_ID
contentStorePressurePolicyenumCONTENT_STORE_PRESSURE_POLICY_DROP_TAIL_ITEMストレージ不足時の振る舞い (エラー/フレーム破棄)
contentViewOverflowPolicyenumCONTENT_VIEW_OVERFLOW_POLICY_DROP_UNTIL_FRAGMENT_STARTオーバーフロー時の振る舞い

DeviceInfoProvider

ClientCallbackProvider

StreamCallbackProvider

  • StreamCallbackProvider interface
    • getCallbackCustomData() 必須
    • getStreamUnderflowReportCallback()
    • getStreamLatencyPressureCallback()
    • getDroppedFrameReportCallback()
    • getStreamConnectionStaleCallback()
    • getDroppedFragmentReportCallback()
    • getStreamErrorReportCallback()
    • getStreamReadyCallback()
    • getStreamClosedCallback()
    • getStreamDataAvailableCallback()
    • getFragmentAckReceivedCallback()
    • getBufferDurationOverflowPressureCallback()

CallbackProvider

ストリームを解放