From 6be7716afd0e406f44f7737be33b34d43f30586c Mon Sep 17 00:00:00 2001 From: "Alex.Li" Date: Thu, 25 Aug 2022 02:43:59 +0000 Subject: [PATCH 1/3] readme: update board vendor Signed-off-by: Alex.Li --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f26b0ed..4159e35 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ - FILE(Dummy boards that can capture from [sample frames](resources/frames/)) - x86/x64(By selecting board `V4L2` or `FILE`) - RPi(By selecting board `V4L2` or `FILE`) -- T31(By selecting board `T31` or `FILE`) -- FH8626V100(By selecting board `FH8626V100` 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 From d3f6cb4273be9ffc0022914a00846baefa135320 Mon Sep 17 00:00:00 2001 From: "zhiqinli@amazon.com" Date: Thu, 25 Aug 2022 11:23:40 +0800 Subject: [PATCH 2/3] kvs: update kvs to v1.0.1 Signed-off-by: zhiqinli@amazon.com --- samples/kvs/CMakeLists.txt | 2 +- samples/kvs/source/kvsappcli.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/samples/kvs/CMakeLists.txt b/samples/kvs/CMakeLists.txt index 221507f..7a93067 100644 --- a/samples/kvs/CMakeLists.txt +++ b/samples/kvs/CMakeLists.txt @@ -14,7 +14,7 @@ message(STATUS "EMBEDDED_MEDIA_LINK_DIR - ${EMBEDDED_MEDIA_LINK_DIR}") include(ExternalProject) ExternalProject_Add(kvs-producer GIT_REPOSITORY https://github.com/aws-samples/amazon-kinesis-video-streams-producer-embedded-c.git - GIT_TAG v1.0.0 + GIT_TAG v1.0.1 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${AWS_DEPENDENCIES_DIR}/kvs/ -DCMAKE_BUILD_TYPE=Release BUILD_ALWAYS TRUE GIT_PROGRESS TRUE diff --git a/samples/kvs/source/kvsappcli.c b/samples/kvs/source/kvsappcli.c index 32b2f62..58337c0 100644 --- a/samples/kvs/source/kvsappcli.c +++ b/samples/kvs/source/kvsappcli.c @@ -307,6 +307,7 @@ static int setKvsAppOptions(KvsAppHandle kvsAppHandle) int main(int argc, char *argv[]) { + int res = 0; KvsAppHandle kvsAppHandle; uint64_t uLastPrintMemStatTimestamp = 0; ePutMediaFragmentAckEventType eAckEventType = eUnknown; @@ -391,9 +392,9 @@ int main(int argc, char *argv[]) break; } - if (KvsApp_open(kvsAppHandle) != 0) + if ((res = KvsApp_open(kvsAppHandle)) != 0) { - printf("Failed to open KVS app\n"); + printf("Failed to open KVS app, err:-%X\n", -res); break; } @@ -403,8 +404,10 @@ int main(int argc, char *argv[]) { break; } - if (KvsApp_doWork(kvsAppHandle) != 0) + + if ((res = KvsApp_doWork(kvsAppHandle)) != 0) { + printf("do work err:-%X\n", -res); break; } From 34bcbd3f9da5ef8cc987cf7bbcbe093e2f211512 Mon Sep 17 00:00:00 2001 From: "zhiqinli@amazon.com" Date: Sat, 27 Aug 2022 14:21:57 +0800 Subject: [PATCH 3/3] doc: introducing IoT Lab hosted WebRTC test page Signed-off-by: zhiqinli@amazon.com --- 3rdparty/README.md | 4 ++-- README.md | 7 ++++--- resources/.DS_Store | Bin 75780 -> 0 bytes resources/frames/.DS_Store | Bin 6148 -> 0 bytes resources/frames/g711a/.DS_Store | Bin 30724 -> 0 bytes 5 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 resources/.DS_Store delete mode 100644 resources/frames/.DS_Store delete mode 100644 resources/frames/g711a/.DS_Store diff --git a/3rdparty/README.md b/3rdparty/README.md index 6e1840b..3a0787d 100644 --- a/3rdparty/README.md +++ b/3rdparty/README.md @@ -41,7 +41,7 @@ It doesn't require other manually installation because CMake will download and b # T31 -User need to put T31 board SDK under [3rdparty/T31/](3rdparty/T31/): +User need to put T31 board SDK under [3rdparty/T31/](T31/): ``` T31/ @@ -58,7 +58,7 @@ T31/ # FH8626V100 -User need to put FH8626V100 board SDK under [3rdparty/FH8626V100/](3rdparty/FH8626V100/): +User need to put FH8626V100 board SDK under [3rdparty/FH8626V100/](FH8626V100/): ``` FH8626V100/ diff --git a/README.md b/README.md index 4159e35..d2da480 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ make ```bash export AWS_KVS_LOG_LEVEL=2 export AWS_DEFAULT_REGION=us-east-1 - export AWS_KVS_CACERT_PATH=cacert.pem + export AWS_KVS_CACERT_PATH=rootca.pem export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` @@ -59,8 +59,9 @@ make ``` > You can use Root CA in [resources/certs/rootca.pem](resources/certs/rootca.pem), or you can download it from [Amazon Trust Services](https://www.amazontrust.com/repository/SFSRootCAG2.pem) 7. Make sure your the system time on your board has been synchronized. You may set it manually or use ntp client. -8. Execute sample on your board: `./kvswebrtcmaster-static`. If you are using access key id/access key secret, execute sample with channel name as parameter: `./kvswebrtcmaster-static your_channel_name` -9. Check WebRTC live stream via AWS console or [AWS WebRTC test page](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) +8. 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`. +9. Check WebRTC live stream via AWS console or [AWS WebRTC test page](https://d3etpwtx4wgido.cloudfront.net/) + > Browser should work as viewer mode during test. ## Getting started with out-of-box KVS Producer sample diff --git a/resources/.DS_Store b/resources/.DS_Store deleted file mode 100644 index 943635b6c22ecae716f447e501cdf6bde16d189e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75780 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 Vz+kQs8i@T7P&C-iGVr4eyZ{EJql^Fm diff --git a/resources/frames/g711a/.DS_Store b/resources/frames/g711a/.DS_Store deleted file mode 100644 index baa616e552d005930eb8194499247b8984cd1620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30724 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 U`TyekwyF*6O6NVdpT24G-&AQrCIA2c