gstreamer/subprojects/gst-plugins-bad/ext/gs
Guillaume Desmottes 1f02f24828 gs: look for google_cloud_cpp_storage.pc
storage_client.pc was legacy and has been removed:
df6fa3611c (diff-bc35ad7c2fe631fd5578a06092412dba81c7ddd27bb25df7e17bb13771799afcL743)

No need to keep looking for storage_client.pc as a fallback as 1.25.0,
our minimum version, already ships google_cloud_cpp_storage.pc

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1815>
2022-03-01 08:10:39 +00:00
..
.clang-format
gstgs.cpp
gstgscommon.cpp gs: Add support for authenticating via Service Account Credentials 2021-09-27 15:36:05 +00:00
gstgscommon.h gs: Add support for authenticating via Service Account Credentials 2021-09-27 15:36:05 +00:00
gstgssink.cpp gssink: add metadata property 2021-11-23 16:00:53 +01:00
gstgssink.h
gstgssrc.cpp gssrc: use default blocksize 2021-10-25 18:34:16 +00:00
gstgssrc.h
meson.build gs: look for google_cloud_cpp_storage.pc 2022-03-01 08:10:39 +00:00
README.md gs: update README to use fixed versions 2021-10-25 18:34:16 +00:00

Install the Google Cloud Storage dependencies.

sudo apt-get install \
    cmake \
    libcurl3-gnutls-dev \
    libgrpc++-dev \
    libprotobuf-dev \
    protobuf-compiler-grpc \
    flex bison pkg-config \
    curl

Build the Google Cloud Storage library

export cmake_prefix=/usr/local

mkdir crc32c
cd crc32c
curl -sSL https://github.com/google/crc32c/archive/1.1.2.tar.gz | \
    tar -xzf - --strip-components=1
cmake -S . -B build \
    -GNinja \
    -DCMAKE_INSTALL_PREFIX:PATH=$cmake_prefix \
    -DCMAKE_INSTALL_LIBDIR:PATH=lib \
    -DBUILD_SHARED_LIBS=YES \
    -DCRC32C_USE_GLOG=NO \
    -DCRC32C_BUILD_TESTS=NO \
    -DCRC32C_BUILD_BENCHMARKS=NO
cmake --build build --target install
cd ..

mkdir abseil-cpp
cd abseil-cpp
curl -sSL https://github.com/abseil/abseil-cpp/archive/20210324.2.tar.gz | \
    tar -xzf - --strip-components=1 && \
    sed -i 's/^#define ABSL_OPTION_USE_\(.*\) 2/#define ABSL_OPTION_USE_\1 0/' "absl/base/options.h"
cmake -S . -B build \
    -GNinja \
    -DBUILD_TESTING=NO \
    -DCMAKE_INSTALL_PREFIX:PATH=$cmake_prefix \
    -DCMAKE_INSTALL_LIBDIR:PATH=lib \
    -DBUILD_SHARED_LIBS=YES
cmake --build build --target install
cd ..

# Nlohman/json
mkdir json
cd json
curl -sSL https://github.com/nlohmann/json/archive/v3.10.4.tar.gz | \
    tar -xzf - --strip-components=1
cmake \
      -DCMAKE_BUILD_TYPE=Release \
      -DBUILD_SHARED_LIBS=yes \
      -DBUILD_TESTING=OFF \
      -H. -Bcmake-out/nlohmann/json && \
    cmake --build cmake-out/nlohmann/json --target install -- -j ${NCPU} && \
    ldconfig
cd ..

mkdir google-cloud-cpp
cd google-cloud-cpp
curl -sSL https://github.com/googleapis/google-cloud-cpp/archive/v1.31.1.tar.gz | \
   tar --strip-components=1 -zxf -
cmake -S . -B build \
    -GNinja \
    -DCMAKE_BUILD_TYPE=Debug \
    -DCMAKE_CXX_STANDARD=14 \
    -DCMAKE_INSTALL_PREFIX:PATH=$cmake_prefix \
    -DCMAKE_INSTALL_LIBDIR:PATH=lib \
    -DBUILD_SHARED_LIBS=YES \
    -DBUILD_TESTING=NO \
    -DGOOGLE_CLOUD_CPP_ENABLE=storage
cmake --build build --target install -- -v
cd ..

Running the gs elements locally

When running from the command line or in a container running locally, simply set the credentials by exporting GOOGLE_APPLICATION_CREDENTIALS. If you are not familiar with this environment variable, check the documentation https://cloud.google.com/docs/authentication/getting-started Note that you can restrict a service account to the role Storage Admin or Storage Object Creator instead of the Project Owner role from the above documentation.

Running the gs elements in Google Cloud Run

Add the Storage Object Viewer role to the service account assigned to the Cloud Run service where gssrc runs. For gssink add the role Storage Object Creator. Then just set the service-account-email property on the element.

Running the gs elements in Google Cloud Kubernetes

You need to set GOOGLE_APPLICATION_CREDENTIALS in the container and ship the json file to which the environment variable points to.