aws / aws/aws-sdk-cpp

KinesisVideoStream GetMedia gets stuck if gstreaming is pushing data simultaneously

Open
#2,203 2 comments 0 reactions 0 assignees View on GitHub
bug p2
Dominant language
C++
Stars
2.2k
Forks
1.2k
Avg merge
3d 14h
Merged PRs (30d)
12

Description

### Describe the bug

I am finding that both GetMediaAsync as well as GetMedia get blocked if I am simultaneously running gstreamer plugin to push the media from the camera. It works fine if I stop the gstreamer session.

Here is the stack where it is stuck:
```
libc.so.6!__GI___poll(struct pollfd * fds, nfds_t nfds, int timeout) (/build/glibc-SzIz7B/glibc-2.31/sysdeps/unix/sysv/linux/poll.c:29)
libcurl.so.4![Unknown/Just-In-Time compiled code] (Unknown Source:0)
libcurl.so.4!curl_multi_poll (Unknown Source:0)
libcurl.so.4!curl_easy_perform (Unknown Source:0)
libaws-cpp-sdk-core.so!Aws::Http::CurlHttpClient::MakeRequest(const Aws::Http::CurlHttpClient * this, const std::shared_ptr & request, Aws::Utils::RateLimits::RateLimiterInterface * readLimiter, Aws::Utils::RateLimits::RateLimiterInterface * writeLimiter) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp:731)
libaws-cpp-sdk-core.so!Aws::Client::AWSClient::AttemptOneRequest(const Aws::Client::AWSClient * this, const std::shared_ptr & httpRequest, const Aws::AmazonWebServiceRequest & request, const char * signerName, const char * signerRegionOverride, const char * signerServiceNameOverride) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp:499)
libaws-cpp-sdk-core.so!Aws::Client::AWSClient::AttemptExhaustively(const Aws::Client::AWSClient * this, const Aws::Http::URI & uri, const Aws::AmazonWebServiceRequest & request, Aws::Http::HttpMethod method, const char * signerName, const char * signerRegionOverride, const char * signerServiceNameOverride) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp:257)
libaws-cpp-sdk-core.so!Aws::Client::AWSClient::MakeRequestWithUnparsedResponse(const Aws::Client::AWSClient * this, const Aws::Http::URI & uri, const Aws::AmazonWebServiceRequest & request, Aws::Http::HttpMethod method, const char * signerName, const char * signerRegionOverride, const char * signerServiceNameOverride) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp:575)
libaws-cpp-sdk-kinesis-video-media.so!Aws::KinesisVideoMedia::KinesisVideoMediaClient::GetMedia(const Aws::KinesisVideoMedia::KinesisVideoMediaClient * this, const Aws::KinesisVideoMedia::Model::GetMediaRequest & request) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-kinesis-video-media/source/KinesisVideoMediaClient.cpp:102)
libaws-cpp-sdk-kinesis-video-media.so!Aws::KinesisVideoMedia::KinesisVideoMediaClient::GetMediaAsyncHelper(Aws::KinesisVideoMedia::Model::GetMediaRequest const&, std::function, std::shared_ptr const&)> const&, std::shared_ptr const&) const(const Aws::KinesisVideoMedia::KinesisVideoMediaClient * this, const Aws::KinesisVideoMedia::Model::GetMediaRequest & request, const Aws::KinesisVideoMedia::GetMediaResponseReceivedHandler & handler, const std::shared_ptr & context) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-kinesis-video-media/source/KinesisVideoMediaClient.cpp:120)
libaws-cpp-sdk-kinesis-video-media.so!Aws::KinesisVideoMedia::KinesisVideoMediaClient::GetMediaAsync(Aws::KinesisVideoMedia::Model::GetMediaRequest const&, std::function, std::shared_ptr const&)> const&, std::shared_ptr const&) const::$_2::operator()() const(const class {...} * this) (/home/pankaj/.cache/bazel/_bazel_pankaj/4eb02f1e029b42dcd6697fd7cb32fd6c/sandbox/linux-sandbox/1061/execroot/brockwood/external/com_github_aws_aws_sdk_cpp/aws-cpp-sdk-kinesis-video-media/source/KinesisVideoMediaClient.cpp:115)
```

### Expected Behavior

The GetMedia call should return successfully and return the Stream.

### Current Behavior

API gets blocked.

### Reproduction Steps

- Run the gstreamer command to push the media to the kinesis video stream. The command line that I am using is:
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! image/jpeg ! jpegdec ! x264enc tune=zerolatency ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name="" storage-size=512 access-key="" secret-key="" aws-region="us-west-2"

- Run a sample to get call the GetMediaAsync or GetMedia.
The call will not return until the gstreamer session is canceled.

### Possible Solution

_No response_

### Additional Information/Context

_No response_

### AWS CPP SDK version used

1.9.264

### Compiler and Version used

Ubuntu clang version 14.0.6-++20221029082011+f28c006a5895-1~exp1~20221029202041.162 Target: x86_64-pc-linux-gnu Thread model: posix

### Operating System and version

Ubuntu 20.04

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.