mirror of
https://github.com/livepeer/lpms
synced 2026-04-23 00:07:25 +08:00
d9c78b62ef
* Port install_ffmpeg.sh from go-livepeer * Update ffmpeg and nv-codec-headers versions. * Use local install_ffmpeg.sh in github CI * Update transcoder for ffmpeg 7.0.1 * Update tests to be compatible with ffmpeg7 binary * Fix FPS passthrough * Set the encoder timebase using AVCodecContext.framerate instead of the decoder's AVCodecContext.time_base. The use of AVCodecContext.time_base is deprecated for decoding. See https://ffmpeg.org/doxygen/3.3/structAVCodecContext.html#ab7bfeb9fa5840aac090e2b0bd0ef7589 * Adjust the packet timebase as necessary for FPS pass through to match the encoder's expected timebase. For filtergraphs using FPS adjustment, the filtergraph output timebase will match the framerate (1 / framerate) and the encoder is configured for the same. However, for FPS pass through, the filtergraph's output timebase will match the input timebase (since there is no FPS adjustment) while the encoder uses the timebase detected from the decoder's framerate. Since the input timebase does not typically match the FPS (eg 90khz for mpegts vs 30fps), we need to adjust the packet timestamps (in container timebase) to the encoder's expected timebase. * For the specific case of FPS passthrough, preserve the original PTS as much as possible since we are trying to re-encode existing frames one-to-one. Use the opaque field for this, since it is already being populated with the original PTS to detect sentinel packets during flushing. Without this, timestamps can be slightly "squashed" down when rescaling output packets to the muxer's timebase, due to the loss of precision (eg, demuxer 90khz -> encoder 30hz -> muxer 90khz)
130 lines
4.5 KiB
YAML
130 lines
4.5 KiB
YAML
name: Build LPMS in Linux
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
name: Test and build lpms project
|
|
runs-on: ubuntu-20.04
|
|
container:
|
|
image: livepeerci/cuda:11.7.1-cudnn8-devel-ubuntu20.04
|
|
env:
|
|
DEBIAN_FRONTEND: "noninteractive"
|
|
BUILD_TAGS: "debug-video experimental"
|
|
NVIDIA_VISIBLE_DEVICES: "all"
|
|
NVIDIA_DRIVER_CAPABILITIES: "compute,video,utility"
|
|
|
|
steps:
|
|
- name: Setup ubuntu container
|
|
run: |
|
|
apt update -yqq
|
|
apt install -yqq build-essential make software-properties-common
|
|
add-apt-repository -y ppa:git-core/candidate
|
|
apt update -yqq && apt install -yqq git zip unzip zlib1g-dev zlib1g yasm curl sudo
|
|
|
|
- name: Check out code
|
|
uses: actions/checkout@v4.1.1
|
|
with:
|
|
fetch-depth: 0
|
|
# Check https://github.com/livepeer/go-livepeer/pull/1891
|
|
# for ref value discussion
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: Set up go
|
|
id: go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.20.4
|
|
cache: true
|
|
cache-dependency-path: go.sum
|
|
|
|
- name: Cache ffmpeg
|
|
id: cache-ffmpeg
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: /home/runner/compiled
|
|
key: ${{ runner.os }}-ffmpeg-${{ hashFiles('./install_ffmpeg.sh') }}
|
|
|
|
- name: Set build environment
|
|
run: |
|
|
echo "PKG_CONFIG_PATH=/github/home/compiled/lib/pkgconfig" >> $GITHUB_ENV
|
|
echo "LD_LIBRARY_PATH=/github/home/compiled/lib:/usr/local/lib:/usr/local/cuda-11.2/lib64:/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
|
|
echo "PATH=$PATH:/github/home/compiled/bin:/github/home/ffmpeg:/usr/local/go/bin" >> $GITHUB_ENV
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
apt update \
|
|
&& apt install -yqq software-properties-common curl apt-transport-https lsb-release \
|
|
&& curl -fsSl https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
|
|
&& add-apt-repository "deb https://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-14 main" \
|
|
&& apt update \
|
|
&& apt -yqq install \
|
|
nasm clang-14 clang-tools-14 lld-14 build-essential pkg-config autoconf git python3 \
|
|
gcc-mingw-w64 libgcc-9-dev-arm64-cross mingw-w64-tools gcc-mingw-w64-x86-64 \
|
|
build-essential pkg-config autoconf git xxd netcat-openbsd libnuma-dev cmake
|
|
|
|
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-14 30 \
|
|
&& update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 30 \
|
|
&& update-alternatives --install /usr/bin/ld ld /usr/bin/lld-14 30
|
|
|
|
- name: Add mime type for ts
|
|
run: |
|
|
echo '<?xml version="1.0" encoding="UTF-8"?><mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"><mime-type type="video/mp2t"><comment>ts</comment><glob pattern="*.ts"/></mime-type></mime-info>' >> /usr/share/mime/packages/custom_mime_type.xml && update-mime-database /usr/share/mime
|
|
|
|
- name: Install ffmpeg
|
|
if: steps.cache-ffmpeg.outputs.cache-hit != 'true'
|
|
run: bash ./install_ffmpeg.sh
|
|
|
|
- name: Build LPMS
|
|
shell: bash
|
|
run: |
|
|
go get ./cmd/example
|
|
go build cmd/example/*.go
|
|
|
|
- name: Download ML model
|
|
run: |
|
|
curl -L https://github.com/livepeer/livepeer-ml/releases/latest/download/tasmodel.pb --output ./ffmpeg/tasmodel.pb
|
|
|
|
- name: Test
|
|
shell: bash
|
|
run: PATH="/github/home/compiled/bin:$PATH" go test -coverprofile cover.out ./...
|
|
|
|
- name: Upload coverage reports
|
|
uses: codecov/codecov-action@v4
|
|
with:
|
|
files: ./cover.out
|
|
name: ${{ github.event.repository.name }}
|
|
verbose: true
|
|
|
|
codeql:
|
|
name: Perform CodeQL analysis
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v4.1.1
|
|
with:
|
|
fetch-depth: 0
|
|
# Check https://github.com/livepeer/go-livepeer/pull/1891
|
|
# for ref value discussion
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: Initialize CodeQL
|
|
uses: github/codeql-action/init@v3
|
|
with:
|
|
languages: go
|
|
|
|
- name: Autobuild
|
|
uses: github/codeql-action/autobuild@v3
|
|
|
|
- name: Perform CodeQL Analysis
|
|
uses: github/codeql-action/analyze@v3
|