Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions README.en.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# CastTrace Android
<h1 align="center">CastTrace Android</h1>

[简体中文](README.md) | English
<p align="center"><a href="README.md">简体中文</a> | English</p>

<p align="center">
<strong>Android live-stream monitoring and recording</strong><br>
Manage rooms locally, monitor streams in the background, and resume interrupted recordings.
</p>

<p align="center">
<a href="https://github.com/SRiftX/casttrace-android/actions/workflows/android-checks.yml"><img alt="Android checks" src="https://github.com/SRiftX/casttrace-android/actions/workflows/android-checks.yml/badge.svg"></a>
Expand All @@ -9,26 +14,28 @@
<a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/License-Apache--2.0-green"></a>
</p>

CastTrace is an Android application for monitoring live rooms and recording supported streams. It is built with Kotlin, Jetpack Compose, Room, WorkManager, Media3 and FFmpegKit. It manages room lists locally, monitors live status in the background, resumes interrupted recordings, collects supported chat messages, and plays saved videos.
<p align="center"><a href="https://github.com/SRiftX/casttrace-android/releases"><strong>Download the latest APK</strong></a> · <a href="CONTRIBUTING.md">Contribute</a> · <a href="ARCHITECTURE.md">Architecture</a></p>

This is an independently maintained Android project that takes inspiration from the platform recording approach in [StreamCap](https://github.com/ihmily/StreamCap). It is not an official StreamCap mobile client. A platform being supported upstream does not mean that CastTrace supports it.
## Screenshots

<p align="center">
<a href="screenshots/live-rooms-large-screen.png"><img src="screenshots/live-rooms-large-screen.png" height="280" alt="Live room monitoring and recording console"></a>
<a href="screenshots/live-reminders.png"><img src="screenshots/live-reminders.png" height="280" alt="Live reminder list"></a>
<a href="screenshots/settings.png"><img src="screenshots/settings.png" height="280" alt="Recording, background operation and platform settings"></a>
</p>
<p align="center"><sub>Room monitoring · Live reminders · Recording and background settings. Click an image to view it full size.</sub></p>

<p align="center">
<a href="#screenshots">Screenshots</a> ·
<a href="#download">Download APK</a> ·
<a href="#features">Features</a> ·
<a href="#build-from-source">Build from source</a> ·
<a href="#developer-guide">Developer guide</a> ·
<a href="#contributing">Contributing</a>
</p>

## Screenshots
CastTrace is built with Kotlin, Jetpack Compose, Room, WorkManager, Media3 and FFmpegKit. It also supports live reminders, chat capture and local playback.

<p align="center">
<a href="screenshots/live-rooms-large-screen.png"><img src="screenshots/live-rooms-large-screen.png" height="300" alt="Live room monitoring and recording console"></a>
<a href="screenshots/live-reminders.png"><img src="screenshots/live-reminders.png" height="300" alt="Live reminder list"></a>
<a href="screenshots/settings.png"><img src="screenshots/settings.png" height="300" alt="Recording and background operation settings"></a>
</p>
This is an independently maintained Android project that takes inspiration from the platform recording approach in [StreamCap](https://github.com/ihmily/StreamCap). It is not an official StreamCap mobile client. A platform being supported upstream does not mean that CastTrace supports it.

## Download

Expand Down
29 changes: 18 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# CastTrace Android
<h1 align="center">CastTrace Android</h1>

[简体中文](README.md) | [English](README.en.md)
<p align="center">简体中文 | <a href="README.en.md">English</a></p>

<p align="center">
<strong>Android 多平台直播监控与录制</strong><br>
本机管理直播间,后台监控开播,自动录制并恢复中断任务。
</p>

<p align="center">
<a href="https://github.com/SRiftX/casttrace-android/actions/workflows/android-checks.yml"><img alt="Android checks" src="https://github.com/SRiftX/casttrace-android/actions/workflows/android-checks.yml/badge.svg"></a>
Expand All @@ -10,26 +15,28 @@
<a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/License-Apache--2.0-green"></a>
</p>

CastTrace 是一款 Android 多平台直播监控和录制工具,使用 Kotlin、Jetpack Compose、Room、WorkManager、Media3 和 FFmpegKit 构建。它可在本机管理直播间、后台监控开播、自动录制与恢复,并支持直播提醒、弹幕采集和本地播放。
<p align="center"><a href="https://github.com/SRiftX/casttrace-android/releases"><strong>下载最新版 APK</strong></a> · <a href="CONTRIBUTING.md">参与开发</a> · <a href="ARCHITECTURE.md">架构说明</a></p>

本项目参考了 [StreamCap](https://github.com/ihmily/StreamCap) 的平台录制思路,是独立维护的 Android 项目,并非 StreamCap 官方移动端;上游平台支持范围不代表本项目全部支持。
## 界面截图

<p align="center">
<a href="screenshots/live-rooms-large-screen.png"><img src="screenshots/live-rooms-large-screen.png" height="280" alt="直播间监控和录制控制台"></a>
<a href="screenshots/live-reminders.png"><img src="screenshots/live-reminders.png" height="280" alt="开播提醒列表"></a>
<a href="screenshots/settings.png"><img src="screenshots/settings.png" height="280" alt="录制、后台运行和平台设置"></a>
</p>
<p align="center"><sub>直播间监控台 · 开播提醒 · 录制与后台设置。点击图片可查看原尺寸。</sub></p>

<p align="center">
<a href="#界面截图">界面截图</a> ·
<a href="#下载-apk">下载 APK</a> ·
<a href="#功能">功能</a> ·
<a href="#从源码构建">从源码构建</a> ·
<a href="#开发入口">开发入口</a> ·
<a href="#参与和反馈">参与和反馈</a>
</p>

## 界面截图
CastTrace 使用 Kotlin、Jetpack Compose、Room、WorkManager、Media3 和 FFmpegKit 构建,支持直播提醒、弹幕采集与本地播放。

<p align="center">
<a href="screenshots/live-rooms-large-screen.png"><img src="screenshots/live-rooms-large-screen.png" height="300" alt="直播间监控和录制控制台"></a>
<a href="screenshots/live-reminders.png"><img src="screenshots/live-reminders.png" height="300" alt="开播提醒列表"></a>
<a href="screenshots/settings.png"><img src="screenshots/settings.png" height="300" alt="录制和后台运行设置"></a>
</p>
本项目参考了 [StreamCap](https://github.com/ihmily/StreamCap) 的平台录制思路,是独立维护的 Android 项目,并非 StreamCap 官方移动端;上游平台支持范围不代表本项目全部支持。

## 下载 APK

Expand Down
96 changes: 48 additions & 48 deletions scripts/build_ffmpeg_source.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
#!/usr/bin/env bash
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUT="$ROOT/build/compliance/ffmpeg-7.1.6"
mkdir -p "$OUT" "$ROOT/build"

BUILD_COMMIT="$(python3 -c 'import json, pathlib, sys; print(json.loads((pathlib.Path(sys.argv[1]) / "third_party/ffmpeg/source-build.json").read_text())["upstreamBuildCommit"])' "$ROOT")"
WORKSPACE="$(mktemp -d "$ROOT/build/ffmpeg-source-build.XXXXXX")"
SOURCE="$WORKSPACE/ffmpegkit"
trap 'printf "FFmpeg source build workspace: %s\n" "$WORKSPACE"' EXIT

git init -q "$SOURCE"
git -C "$SOURCE" remote add origin https://github.com/ffmpegkit-maintained/ffmpeg.git
git -C "$SOURCE" fetch --depth=1 origin "$BUILD_COMMIT"
git -C "$SOURCE" checkout --detach FETCH_HEAD

for patch in "$ROOT"/third_party/ffmpeg/patches/*.patch; do
git -C "$SOURCE" apply --check "$patch"
git -C "$SOURCE" apply "$patch"
done

export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-}}"
if [[ -z "$ANDROID_SDK_ROOT" ]]; then
echo "ANDROID_SDK_ROOT or ANDROID_HOME must point to the Android SDK." >&2
exit 1
fi
if [[ -z "${ANDROID_NDK_ROOT:-}" ]]; then
ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/26.2.11394342"
fi
export ANDROID_NDK_ROOT
if [[ ! -f "$ANDROID_NDK_ROOT/source.properties" ]]; then
echo "Android NDK r26c was not found at $ANDROID_NDK_ROOT." >&2
exit 1
fi

cd "$SOURCE/android-7.1-lts"
./android.sh --enable-gnutls --enable-gmp \
--enable-android-media-codec --enable-android-zlib \
--disable-arm-v7a --disable-arm-v7a-neon --disable-x86

AAR="$SOURCE/android-7.1-lts/prebuilt/bundle-android-aar/ffmpeg-kit/ffmpeg-kit.aar"
if [[ ! -s "$AAR" ]]; then
echo "The FFmpegKit source build did not produce an AAR." >&2
exit 1
fi
cp "$AAR" "$OUT/ffmpeg-kit-https-7.1.6.aar"
sha256sum "$OUT/ffmpeg-kit-https-7.1.6.aar"
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUT="$ROOT/build/compliance/ffmpeg-7.1.6"
mkdir -p "$OUT" "$ROOT/build"
BUILD_COMMIT="$(python3 -c 'import json, pathlib, sys; print(json.loads((pathlib.Path(sys.argv[1]) / "third_party/ffmpeg/source-build.json").read_text())["upstreamBuildCommit"])' "$ROOT")"
WORKSPACE="$(mktemp -d "$ROOT/build/ffmpeg-source-build.XXXXXX")"
SOURCE="$WORKSPACE/ffmpegkit"
trap 'printf "FFmpeg source build workspace: %s\n" "$WORKSPACE"' EXIT
git init -q "$SOURCE"
git -C "$SOURCE" remote add origin https://github.com/ffmpegkit-maintained/ffmpeg.git
git -C "$SOURCE" fetch --depth=1 origin "$BUILD_COMMIT"
git -C "$SOURCE" checkout --detach FETCH_HEAD
for patch in "$ROOT"/third_party/ffmpeg/patches/*.patch; do
git -C "$SOURCE" apply --unidiff-zero --check "$patch"
git -C "$SOURCE" apply --unidiff-zero "$patch"
done
export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-}}"
if [[ -z "$ANDROID_SDK_ROOT" ]]; then
echo "ANDROID_SDK_ROOT or ANDROID_HOME must point to the Android SDK." >&2
exit 1
fi
if [[ -z "${ANDROID_NDK_ROOT:-}" ]]; then
ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/26.2.11394342"
fi
export ANDROID_NDK_ROOT
if [[ ! -f "$ANDROID_NDK_ROOT/source.properties" ]]; then
echo "Android NDK r26c was not found at $ANDROID_NDK_ROOT." >&2
exit 1
fi
cd "$SOURCE/android-7.1-lts"
./android.sh --enable-gnutls --enable-gmp \
--enable-android-media-codec --enable-android-zlib \
--disable-arm-v7a --disable-arm-v7a-neon --disable-x86
AAR="$SOURCE/android-7.1-lts/prebuilt/bundle-android-aar/ffmpeg-kit/ffmpeg-kit.aar"
if [[ ! -s "$AAR" ]]; then
echo "The FFmpegKit source build did not produce an AAR." >&2
exit 1
fi
cp "$AAR" "$OUT/ffmpeg-kit-https-7.1.6.aar"
sha256sum "$OUT/ffmpeg-kit-https-7.1.6.aar"
Loading