Open source

Sotto uses libraries under the LGPL-2.1: VLCKit on iPhone and iPad, libVLC and FFmpeg on Android. Below: which version, how each is linked into the app, and where its source is.

Last updated 3 October 2026

iPhone and iPad

VLCKit and libVLC · VideoLAN

Used forPlaying MPEG-TS and other formats.
VersionMobileVLCKit 3.7.4 · VLCKit commit 54bba6d9 · libVLC 3.0.24, commit 6de05adc
BinaryVideoLAN's official build; we do not build it ourselves and apply no patches. File MobileVLCKit-3.0-20260922-1512.tar.xz (download.videolan.org, ~233 MB), SHA-256 c649c4c47bd065b3a5511746361b5a9066a34033f2df9cbc9454409c0f363b52
LicenceLGPL-2.1 or later
LinkingA separate, dynamic framework (MobileVLCKit.framework). It sits in the app bundle as its own file and is not merged with the app's code.
SourceVLCKit 3.7.4 · VLC 3.0.24, commit 6de05adc (code.videolan.org)
Your rightsWe put no condition on your inspecting or modifying the library, or on replacing the copy in the app with your own build.

Android and Android TV

FFmpeg · Media3's FFmpeg audio extension

Used forAudio formats the device's own decoder cannot play (e.g. MP2). Audio only.
VersionFFmpeg n6.0.1, commit c41ff724ede7da657762d61097e26fac296c53bf
Librarieslibavcodec, libavutil, libswresample
Decodersac3, alac, flac, mp2, mp3, opus, vorbis; no others
LicenceLGPL-2.1 or later. Built without --enable-gpl and --enable-nonfree.
LinkingFFmpeg is linked statically into libffmpegJNI.so, a separate shared library inside the APK. That file contains none of our code: only FFmpeg and Media3's Apache-2.0 JNI wrapper (ffmpeg_jni.cc).
Media3androidx/media 1.11.1, libraries/decoder_ffmpeg
BuildNDK r27d (27.3.13750724), API 23, armeabi-v7a and arm64-v8a. FFmpeg is not patched; Media3's build file only gets the NDK version, the ABI list and 16 KB page alignment (-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON).
SourceFFmpeg n6.0.1: git.ffmpeg.org · GitHub mirror
Media3 1.11.1: github.com/androidx/media
Your rightsYou may modify FFmpeg, rebuild libffmpegJNI.so with the settings below and put it in place of the one in the app. We put no condition on that or on your inspecting the library.

configure line

Run once per ABI. $TOOLCHAIN is the NDK's toolchains/llvm/prebuilt/<host>/bin directory.

# arm64-v8a
./configure --libdir="android-libs/arm64-v8a" --arch=aarch64 --cpu=armv8-a \
  --cross-prefix="$TOOLCHAIN/aarch64-linux-android23-" \
  --nm="$TOOLCHAIN/llvm-nm" --ar="$TOOLCHAIN/llvm-ar" \
  --ranlib="$TOOLCHAIN/llvm-ranlib" --strip="$TOOLCHAIN/llvm-strip" \
  --target-os=android --enable-static --disable-shared --disable-doc \
  --disable-programs --disable-everything --disable-avdevice \
  --disable-avformat --disable-swscale --disable-postproc \
  --disable-avfilter --disable-symver --enable-swresample \
  --extra-ldexeflags=-pie --disable-v4l2-m2m --disable-vulkan \
  --enable-decoder=mp2 --enable-decoder=mp3 --enable-decoder=ac3 \
  --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis \
  --enable-decoder=opus

# armeabi-v7a
./configure --libdir="android-libs/armeabi-v7a" --arch=arm --cpu=armv7-a \
  --cross-prefix="$TOOLCHAIN/armv7a-linux-androideabi23-" \
  --nm="$TOOLCHAIN/llvm-nm" --ar="$TOOLCHAIN/llvm-ar" \
  --ranlib="$TOOLCHAIN/llvm-ranlib" --strip="$TOOLCHAIN/llvm-strip" \
  --extra-cflags="-march=armv7-a -mfloat-abi=softfp" \
  --extra-ldflags="-Wl,--fix-cortex-a8" \
  --target-os=android --enable-static --disable-shared --disable-doc \
  --disable-programs --disable-everything --disable-avdevice \
  --disable-avformat --disable-swscale --disable-postproc \
  --disable-avfilter --disable-symver --enable-swresample \
  --extra-ldexeflags=-pie --disable-v4l2-m2m --disable-vulkan \
  --enable-decoder=mp2 --enable-decoder=mp3 --enable-decoder=ac3 \
  --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis \
  --enable-decoder=opus

Android and Android TV: second engine

libVLC · VideoLAN

Used forStreams Android's main player (Media3) cannot open or decode; it can also be chosen by hand under Technical.
Versionorg.videolan.android:libvlc-all 3.7.7 · libVLC 3.0.25 · vlc-android tag libvlc-3.7.7 (commit 7a7c8f14) · libvlcjni commit 0b8dc65e · VLC 3.0.x commit 84177b22
BinaryVideoLAN's official build, published on Maven Central; we do not build it ourselves and apply no patches. AAR SHA-256 b48dab96e0e90e34cce3861963500c144a5aadb1b249d501d6a4b104d849e61b
LicenceLGPL-2.1 or later
LinkingSeparate, dynamic libraries inside the APK (libvlc.so, libvlcjni.so); not merged with the app's code. armeabi-v7a and arm64-v8a only.
Sourcevlc-android, libvlc-3.7.7 · libvlcjni, 0b8dc65e · VLC, 84177b22 (code.videolan.org)
Your rightsWe put no condition on your inspecting or modifying the library, or on replacing the copy in the app with your own build.

Source code

The source of VLCKit for iPhone and iPad and of libVLC for Android is at VideoLAN, at the links above.

We will give you the complete source of our FFmpeg build for Android on request: the FFmpeg n6.0.1 source, Media3 1.11.1's FFmpeg extension and our build script. Write to help@sottoiptv.com. This offer is valid for at least three years.

Licence text

GNU Lesser General Public License 2.1 (gnu.org)

Every component the app uses, with its licence text, is listed in the app's “About and licences” screen. See also Terms of use, section 7.