KinesisVideoStream GetMedia gets stuck if gstreaming is pushing data simultaneously
- Vorherrschende Sprache
- C++
- Sterne
- 2.2k
- Forks
- 1.2k
- Ø Merge
- 4 T. 11 Std.
- Gemergte PRs (30 T.)
- 13
Beschreibung
### 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
Beitragsleitfaden
Rechercherichtung
Reproduziere den Fehler mit dem angegebenen gst-launch-1.0-Befehl, während du GetMedia oder GetMediaAsync aufrufst. Untersuche anschließend CurlHttpClient.cpp, AWSClient.cpp und KinesisVideoMediaClient.cpp an den im Stack angezeigten Stellen. Als erledigt gilt die Aufgabe, wenn der Aufruf von GetMedia erfolgreich zurückkehrt, während gstreamer weiterhin Medien überträgt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- aws, cpp
- Bereich
- api, cloud
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100