ステップ 2: コードを記述して調べる - Amazon Kinesis Video Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 2: コードを記述して調べる

このセクションでは、https://github.com/awslabs/ amazon-kinesis-video-streams-producer-c KvsVideoOnlyStreamingSample.csamples リポジトリのフォルダーにあるサンプルアプリケーションのコードを調べます。 GitHubこのコードは前のステップでダウンロードしたものです。このサンプルは、C プロデューサーライブラリを使用して、samples/h264SampleFramesフォルダー内の H.264 でエンコードされたビデオフレームを Kinesis ビデオストリームに送信する方法を示しています。

このサンプルアプリケーションは次の 3 つのセクションで構成されています。

  • 初期化と設定:

    • プラットフォーム固有のメディアパイプラインの初期化および設定。

    • KinesisVideoClient KinesisVideoStreamパイプラインの初期化と設定、コールバックの設定、シナリオ固有の認証の統合、コーデック専用データの抽出と送信、ストリームの READY 状態への移行を行います。

  • メインループ:

    • タイムスタンプおよびフラグによるメディアパイプラインからのフレームの取得。

    • KinesisVideoStreamフレームをに送信します。

  • Teardown:

    • 停止 (同期) KinesisVideoStream、解放、解放 KinesisVideoStream。 KinesisVideoClient

このサンプルアプリケーションは以下のタスクを実行します。

  • createDefaultDeviceInfo API を呼び出して、デバイスまたはストレージ設定に関する情報が含まれる deviceInfo オブジェクトを作成します。

    // default storage size is 128MB. Use setDeviceInfoStorageSize after create to change storage size. CHK_STATUS(createDefaultDeviceInfo(&pDeviceInfo)); // adjust members of pDeviceInfo here if needed pDeviceInfo->clientInfo.loggerLogLevel = LOG_LEVEL_DEBUG;
  • createRealtimeVideoStreamInfoProvider API を呼び出して、StreamInfo オブジェクトを作成します。

    CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed
  • createDefaultCallbacksProviderWithAwsCredentialsAPI を呼び出して、静的認証情報に基づいてデフォルトのコールバックプロバイダーを作成します。 AWS

    CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks));
  • createKinesisVideoClient API を呼び出して、デバイスのストレージに関する情報を含み、Kinesis Video Streams イベントに関する報告を行うためのコールバックを管理する KinesisVideoClient オブジェクトを作成します。

    CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle));
  • createKinesisVideoStreamSync API を呼び出して、KinesisVideoStream オブジェクトを作成します。

    CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle));
  • サンプルフレームを設定し、PutKinesisVideoFrame API を呼び出してそのフレームを KinesisVideoStream オブジェクトに送信します。

    // setup sample frame MEMSET(frameBuffer, 0x00, frameSize); frame.frameData = frameBuffer; frame.version = FRAME_CURRENT_VERSION; frame.trackId = DEFAULT_VIDEO_TRACK_ID; frame.duration = HUNDREDS_OF_NANOS_IN_A_SECOND / DEFAULT_FPS_VALUE; frame.decodingTs = defaultGetTime(); // current time frame.presentationTs = frame.decodingTs; while(defaultGetTime() > streamStopTime) { frame.index = frameIndex; frame.flags = fileIndex % DEFAULT_KEY_FRAME_INTERVAL == 0 ? FRAME_FLAG_KEY_FRAME : FRAME_FLAG_NONE; frame.size = SIZEOF(frameBuffer); CHK_STATUS(readFrameData(&frame, frameFilePath)); CHK_STATUS(putKinesisVideoFrame(streamHandle, &frame)); defaultThreadSleep(frame.duration); frame.decodingTs += frame.duration; frame.presentationTs = frame.decodingTs; frameIndex++; fileIndex++; fileIndex = fileIndex % NUMBER_OF_FRAME_FILES; }
  • Teardown:

    CHK_STATUS(stopKinesisVideoStreamSync(streamHandle)); CHK_STATUS(freeKinesisVideoStream(&streamHandle)); CHK_STATUS(freeKinesisVideoClient(&clientHandle));

次のステップ

ステップ 3: コードを実行して検証する