Skip to content

Commit 0888c66

Browse files
committed
Fix bug where iot and file credentials failed to get cycled promptly.
Reworked stream and client shutdown flow. Other minor stability and bug fixes.
1 parent 116b904 commit 0888c66

File tree

203 files changed

+13774
-4516
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

203 files changed

+13774
-4516
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,11 @@ This library is licensed under the Apache License, 2.0.
7070
----
7171
### Release notes
7272

73-
#### Release 2.0.2 (17th Oct 2019)
74-
* fix bug where producer cannot recover from STATUS_STORE_OUT_OF_MEMORY after network outage
73+
#### Release 2.1.0 (2nd Dec 2019)
74+
* C/CPP-Producer - Updates
75+
* Fix bug where iot and file credentials failed to get cycled promptly.
76+
* Reworked stream and client shutdown flow.
77+
* Other minor stability and bug fixes.
7578

7679
#### Release 2.0.1 (25th Jul 2019)
7780
* C-Producer - Updates

kinesis-video-c-producer/CMakeLists.txt

Lines changed: 104 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -55,36 +55,41 @@ if(BP_BUILD_LIB)
5555
endif()
5656
else()
5757

58-
if(DEFINED ENV{KINESIS_VIDEO_PIC_SRC})
59-
set(KINESIS_VIDEO_PIC_SRC $ENV{KINESIS_VIDEO_PIC_SRC})
60-
else()
61-
set(KINESIS_VIDEO_PIC_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../kinesis-video-pic")
62-
endif()
63-
64-
if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC})
65-
set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC})
66-
else()
67-
set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../kinesis-video-producer-c")
58+
if(NOT KINESIS_VIDEO_PIC_SRC)
59+
if(DEFINED ENV{KINESIS_VIDEO_PIC_SRC})
60+
set(KINESIS_VIDEO_PIC_SRC $ENV{KINESIS_VIDEO_PIC_SRC})
61+
else()
62+
set(KINESIS_VIDEO_PIC_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../kinesis-video-pic")
63+
endif()
6864
endif()
6965

70-
if(DEFINED ENV{KINESIS_VIDEO_OPEN_SOURCE_SRC})
71-
set(KINESIS_VIDEO_OPEN_SOURCE_SRC $ENV{KINESIS_VIDEO_OPEN_SOURCE_SRC})
72-
else()
73-
set(KINESIS_VIDEO_OPEN_SOURCE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../kinesis-video-native-build/downloads")
66+
if(NOT KINESIS_VIDEO_PRODUCER_C_SRC)
67+
if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC})
68+
set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC})
69+
else()
70+
set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}")
71+
endif()
7472
endif()
7573

76-
if (DEFINED ENV{KVS_JSMN_ROOT})
77-
set(KVS_JSMN_ROOT $ENV{KVS_JSMN_ROOT})
78-
else()
79-
message( FATAL_ERROR "No JSMN root specified." )
74+
if(NOT KINESIS_VIDEO_OPEN_SOURCE_SRC)
75+
if(DEFINED ENV{KINESIS_VIDEO_OPEN_SOURCE_SRC})
76+
set(KINESIS_VIDEO_OPEN_SOURCE_SRC $ENV{KINESIS_VIDEO_OPEN_SOURCE_SRC})
77+
else()
78+
set(KINESIS_VIDEO_OPEN_SOURCE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../kinesis-video-native-build/downloads/local")
79+
endif()
8080
endif()
8181

8282
message(STATUS "Kinesis Video PIC path is ${KINESIS_VIDEO_PIC_SRC}")
83-
message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_SRC}")
83+
message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}")
8484
message(STATUS "Kinesis Video Open Source path is ${KINESIS_VIDEO_OPEN_SOURCE_SRC}")
8585

86-
set(CMAKE_INSTALL_RPATH "${KVS_INSTALL_PATH}")
87-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
86+
if (NOT EXISTS ${KINESIS_VIDEO_PIC_SRC})
87+
message(FATAL_ERROR "KINESIS_VIDEO_PIC_SRC ${KINESIS_VIDEO_PIC_SRC} does not exist")
88+
elseif(NOT EXISTS ${KINESIS_VIDEO_PRODUCER_C_SRC})
89+
message(FATAL_ERROR "KINESIS_VIDEO_PRODUCER_C_SRC ${KINESIS_VIDEO_PRODUCER_C_SRC} does not exist")
90+
elseif(NOT EXISTS ${KINESIS_VIDEO_OPEN_SOURCE_SRC})
91+
message(FATAL_ERROR "KINESIS_VIDEO_OPEN_SOURCE_SRC ${KINESIS_VIDEO_OPEN_SOURCE_SRC} does not exist.")
92+
endif()
8893

8994
if(CMAKE_SIZEOF_VOID_P STREQUAL 4)
9095
message(STATUS "Bitness 32 bits")
@@ -103,93 +108,110 @@ else()
103108
if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang")
104109
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
105110

106-
find_package(PkgConfig REQUIRED)
111+
if (NOT OPENSSL_FOUND)
112+
message("looking for openssl")
113+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
114+
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
115+
endif()
116+
117+
find_package(OpenSSL REQUIRED)
107118

108-
if (USE_SYS_LIBRARIES AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
109-
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
119+
set(OPEN_SRC_INCLUDE_DIRS
120+
${OPEN_SRC_INCLUDE_DIRS}
121+
${OPENSSL_INCLUDE_DIR})
110122
endif()
111123

112-
find_package(OpenSSL REQUIRED)
113-
find_package(CURL REQUIRED)
124+
if (NOT CURL_FOUND AND BUILD_COMMON_CURL)
125+
message("looking for curl")
126+
find_package(CURL REQUIRED)
114127

115-
set(OPEN_SRC_INCLUDE_DIRS
116-
${CURL_INCLUDE_DIRS}
117-
${OPENSSL_INCLUDE_DIR})
128+
set(OPEN_SRC_INCLUDE_DIRS
129+
${OPEN_SRC_INCLUDE_DIRS}
130+
${CURL_INCLUDE_DIRS})
131+
endif()
118132

119-
set(PRODUCER_C_LIBRARIES
120-
${OPENSSL_CRYPTO_LIBRARY}
121-
${OPENSSL_SSL_LIBRARY}
122-
${CURL_LIBRARIES})
133+
if (NOT LIBSRTP_FOUND AND BUILD_COMMON_LWS)
134+
message("looking for libwebsocket")
135+
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${KINESIS_VIDEO_OPEN_SOURCE_SRC}/lib/pkgconfig")
136+
pkg_check_modules(LIBSRTP REQUIRED libsrtp2)
137+
138+
set(OPEN_SRC_INCLUDE_DIRS
139+
${LIBWEBSOCKET_INCLUDE_DIRS})
140+
link_directories(${LIBWEBSOCKET_LIBRARY_DIRS})
141+
endif()
123142
endif()
124143

125-
find_library(KvsPic
126-
NAMES kvspic
127-
REQUIRED
128-
PATHS ${KINESIS_VIDEO_PIC_SRC}
129-
NO_DEFAULT_PATH)
130-
find_library(Jsmn
144+
if (NOT Jsmn)
145+
find_library(Jsmn
131146
NAMES jsmn
132147
REQUIRED
133-
PATHS ${KVS_JSMN_ROOT}/lib
148+
PATHS ${KINESIS_VIDEO_OPEN_SOURCE_SRC}/lib
134149
NO_DEFAULT_PATH)
150+
endif()
135151

136152
# Uncomment below line for debug heap
137153
#add_definitions(-DHEAP_DEBUG)
138154

139155
# Uncomment below line for very verbose logging
140156
#add_definitions(-DLOG_STREAMING)
141157

142-
set(PRODUCER_C_SOURCE_FILES
143-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Auth.c
144-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/AwsV4Signer.c
145-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/CallbacksProvider.c
146-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/CurlApiCallbacks.c
147-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/DeviceInfoProvider.c
148-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StreamInfoProvider.c
149-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Producer.c
150-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Request.c
151-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Response.c
152-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Util.c
153-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/FileAuthCallbacks.c
154-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StaticAuthCallbacks.c
155-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/IotAuthCallback.c
156-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/ConnectionStaleStateMachine.c
157-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/ContinuousRetryStreamCallbacks.c
158-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StateMachineData.c
159-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StreamErrorReportStateMachine.c
160-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StreamLatencyStateMachine.c
161-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/StreamCallbacksProvider.c
162-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/FileLoggerPlatformCallbackProvider.c
163-
${KINESIS_VIDEO_PRODUCER_C_SRC}/src/source/Version.c)
164-
165-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/client/include)
166-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/common/include)
167-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/heap/include)
168-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/trace/include)
169-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/mkvgen/include)
170-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/view/include)
171-
include_directories(${KINESIS_VIDEO_PIC_SRC}/src/utils/include)
172-
include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC})
158+
file(GLOB KVS_COMMON_SOURCE_FILES_BASE
159+
"src/source/Common/*.c"
160+
)
161+
162+
file(GLOB KVS_COMMON_SOURCE_FILES_LWS
163+
"src/source/Common/Lws/*.c"
164+
)
165+
166+
file(GLOB KVS_COMMON_SOURCE_FILES_CURL
167+
"src/source/Common/Curl/*.c"
168+
)
169+
170+
file(GLOB PRODUCER_C_SOURCE_FILES
171+
"src/source/*.c"
172+
)
173+
174+
file(GLOB PIC_HEADERS
175+
"${KINESIS_VIDEO_PIC_SRC}/src/*/include"
176+
)
177+
178+
include_directories(${PIC_HEADERS})
179+
include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include)
173180
include_directories(${OPEN_SRC_INCLUDE_DIRS})
174-
include_directories(${KVS_JSMN_ROOT}/include)
181+
include_directories(${KINESIS_VIDEO_OPEN_SOURCE_SRC}/include)
182+
183+
add_subdirectory(${KINESIS_VIDEO_PIC_SRC} ./kvspic EXCLUDE_FROM_ALL)
175184

176-
add_library(kvsproducerc SHARED ${PRODUCER_C_SOURCE_FILES})
185+
if(BUILD_COMMON_LWS)
186+
add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS})
187+
target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS=1)
188+
target_link_libraries(kvsCommonLws
189+
${Jsmn}
190+
${OPENSSL_CRYPTO_LIBRARY}
191+
${OPENSSL_SSL_LIBRARY}
192+
${LIBWEBSOCKET_LIBRARIES})
193+
endif()
177194

178-
target_link_libraries(kvsproducerc
179-
${KvsPic}
195+
# producer only uses curl right now
196+
add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL})
197+
target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL=1)
198+
target_link_libraries(kvsCommonCurl
180199
${Jsmn}
181-
${PRODUCER_C_LIBRARIES})
200+
${OPENSSL_CRYPTO_LIBRARY}
201+
${OPENSSL_SSL_LIBRARY}
202+
${CURL_LIBRARIES})
203+
204+
add_library(cproducer SHARED ${PRODUCER_C_SOURCE_FILES})
205+
206+
target_link_libraries(cproducer
207+
kvspic
208+
kvsCommonCurl)
182209

183210
add_executable(kvsVideoOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyStreamingSample.c)
184211
target_link_libraries(kvsVideoOnlyStreamingSample
185-
kvsproducerc)
212+
cproducer)
186213

187214
if (BUILD_TEST)
188215
add_subdirectory(tst)
189216
endif()
190-
191-
install(TARGETS kvsproducerc
192-
DESTINATION ${KVS_INSTALL_PATH})
193-
install(TARGETS kvsVideoOnlyStreamingSample
194-
DESTINATION ${KVS_INSTALL_PATH})
195217
endif()

kinesis-video-c-producer/samples/KvsVideoOnlyStreamingSample.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <com/amazonaws/kinesis/video/cproducer/Include.h>
22

3-
#define DEFAULT_AWS_REGION (PCHAR) "us-west-2"
43
#define DEFAULT_RETENTION_PERIOD 2 * HUNDREDS_OF_NANOS_IN_AN_HOUR
54
#define DEFAULT_BUFFER_DURATION 120 * HUNDREDS_OF_NANOS_IN_A_SECOND
65
#define DEFAULT_CALLBACK_CHAIN_COUNT 5
@@ -38,6 +37,9 @@ STATUS readFrameData(PFrame pFrame, PCHAR frameFilePath)
3837
return retStatus;
3938
}
4039

40+
// Forward declaration of the default thread sleep function
41+
VOID defaultThreadSleep(UINT64);
42+
4143
INT32 main(INT32 argc, CHAR *argv[])
4244
{
4345
PDeviceInfo pDeviceInfo = NULL;

kinesis-video-c-producer/src/CMakeLists.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@ project(KinesisVideoProducerC LANGUAGES C)
44

55
file(GLOB_RECURSE HEADERS "include/*.h")
66
file(GLOB_RECURSE SOURCE "source/*.cpp")
7-
file(GLOB_RECURSE SOURCE "source/*.c")
7+
file(GLOB SOURCE "source/*.c")
8+
file(GLOB SOURCE_COMMON "source/Common/*.c")
9+
file(GLOB SOURCE_COMMON_CURL "source/Common/Curl/*.c")
810

911
set(INCLUDES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/include/")
1012
include_directories(${INCLUDES_PATH})
1113
include_directories(${BP_BUILD_INCLUDE_DIRS})
1214
link_directories(${BP_BUILD_LIB})
1315
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
1416

15-
add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCE})
17+
add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCE} ${SOURCE_COMMON} ${SOURCE_COMMON_CURL})
18+
target_compile_definitions(${PROJECT_NAME} PRIVATE KVS_BUILD_WITH_CURL=1)
1619
target_link_libraries(${PROJECT_NAME} ${BP_BUILD_LIB_DIRS}
17-
client heap trace view mkvgen utils curl crypto ssl jsmn)
20+
client heap trace view mkvgen state utils curl crypto ssl jsmn)
1821

1922
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
2023
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/

0 commit comments

Comments
 (0)