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.
iPhone and iPad
| Used for | Playing MPEG-TS and other formats. |
|---|---|
| Version | MobileVLCKit 3.7.4 · VLCKit commit 54bba6d9 · libVLC 3.0.24, commit 6de05adc |
| Binary | VideoLAN'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 |
| Licence | LGPL-2.1 or later |
| Linking | A separate, dynamic framework (MobileVLCKit.framework). It sits in the app bundle as its own file and is not merged with the app's code. |
| Source | VLCKit 3.7.4 · VLC 3.0.24, commit 6de05adc (code.videolan.org) |
| Your rights | We 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
| Used for | Audio formats the device's own decoder cannot play (e.g. MP2). Audio only. |
|---|---|
| Version | FFmpeg n6.0.1, commit c41ff724ede7da657762d61097e26fac296c53bf |
| Libraries | libavcodec, libavutil, libswresample |
| Decoders | ac3, alac, flac, mp2, mp3, opus, vorbis; no others |
| Licence | LGPL-2.1 or later. Built without --enable-gpl and --enable-nonfree. |
| Linking | FFmpeg 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). |
| Media3 | androidx/media 1.11.1, libraries/decoder_ffmpeg |
| Build | NDK 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). |
| Source | FFmpeg n6.0.1: git.ffmpeg.org · GitHub mirror Media3 1.11.1: github.com/androidx/media |
| Your rights | You 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
| Used for | Streams Android's main player (Media3) cannot open or decode; it can also be chosen by hand under Technical. |
|---|---|
| Version | org.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 |
| Binary | VideoLAN's official build, published on Maven Central; we do not build it ourselves and apply no patches. AAR SHA-256 b48dab96e0e90e34cce3861963500c144a5aadb1b249d501d6a4b104d849e61b |
| Licence | LGPL-2.1 or later |
| Linking | Separate, dynamic libraries inside the APK (libvlc.so, libvlcjni.so); not merged with the app's code. armeabi-v7a and arm64-v8a only. |
| Source | vlc-android, libvlc-3.7.7 · libvlcjni, 0b8dc65e · VLC, 84177b22 (code.videolan.org) |
| Your rights | We 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.