Archive for the ‘multimedia’ Category

Recently I got the source code of one particular Android App from github and I wanted to build that on my Debian Unstable latest.  I was just trying to see how I could build without installing the IDE.  This is what I did.
apt-get install default-jdk

From Android site I downloaded both commandlinetools and gradle. Got the following versions downloaded.
commandlinetools-linux-6609375_latest.zip gradle-6.5.1-all.zip
I chose to install it in the larger partition which is mounted as /media/data so I created a new directory /media/data/android_sdk
Then unzipped the above two zip files there.

There was a java error while using the sdkmanager.

Warning: Could not create settings

After searching a bit, I found a solution for that. We need to create a directory “cmdline-tools”. So I created it and moved the tools directory there. Effectively, the sdkmanager could be located at
Now we need to make sure that the sdkmanager and gradle are in the PATH. I only wanted to include them during App building. So, wrote a simple function and placed it in ${HOME}/.bashrc

export PATH=/media/data/android_sdk/cmdline-tools/tools/bin:/media/data/android_sdk/gradle-6.5.1/bin
export ANDROID_SDK_ROOT=/media/data/android_sdk
echo ${PATH}

Just run “setpath_android” from the Bash whenever we want to build.
Now, we have to install the platform-tools, build-tools and related packages. As my phone is Android Oreo 8.1.0, I wanted to install API Level 27.

sdkmanager --version
sdkmanager --update
sdkmanager --licenses
sdkmanager --list
sdkmanager --install "platforms;android-27"
sdkmanager --install "build-tools;27.0.3"
sdkmanager --install "extras;android;m2repository" "extras;google;m2repository"
sdkmanager --install "cmdline-tools;latest"

Now, goto the directory of the Application which was cloned from github. Let us say it is myapp

cd /path/to/myapp
gradle build -x test

With this much, I could build the application without having the IDE and completely from the command line

Read Full Post »

Normally all audio pipelines use an audio codec and RTP encapsulation. I searched a lot for a raw audio pipeline, but I could not find much information. Then, I tried different options and came up with the following.

gst-launch-1.0 -v filesrc location=/tmp/musicfile.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! audio/x-raw, rate=16000, channels=1, format=S16LE ! audiomixer blocksize=320 ! udpsink host= port=10000

This above pipeline takes audio from an MP3 file, decodes it, changes the format to 16 KHz mono, and then sends it to the network using UDP. Audio mixer is used just to send the frame size of 10 msec amounting to 320 bytes of data.

gst-launch-1.0 -v udpsrc port=10000 ! rawaudioparse use-sink-caps=false format=pcm pcm-format=s16le sample-rate=16000 num-channels=1 ! queue ! audioconvert ! audioresample ! autoaudiosink

To play the same from network the above pipeline could be used.

Read Full Post »

Both ffmpeg and vlc are two of the important applications in free software media processing. I wanted to compile both to incorporate latest codecs, x264 and libvpx for video along with aac and libopus for audio. This is what I have done on Debian unstable.

For my purpose, I was compiling these codecs from source. To use the development libraries and headers given by Debian, one has to install the following packages, sudo is used to denote usage of root

sudo apt-get install libfaad-dev libfaac-dev libx264-dev libvpx-dev libopus-dev

Instead of using the development pacakges provides by Debian, I was compiling and installing these libraries to /opt. To use proper package config paths for both ffmpeg and vlc, one has to do export PKG_CONFIG_PATH or alternatively supply then to the configure script.

export PKG_CONFIG_PATH=/opt/lib/pkgconfig

Downloading the corresponding source code

# faac
wget -c http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
# faad
wget -c http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
# x264
git clone git://git.videolan.org/x264.git
# libvpx
git clone https://chromium.googlesource.com/webm/libvpx
# opus
git clone http://git.xiph.org/opus.git
# ffmpeg
git clone git://source.ffmpeg.org/ffmpeg.git
# vlc
git clone git://git.videolan.org/vlc.git

As I mentioned above, I was using /opt as the prefix. These are the compilation commands used. Replace the number of CPU cores with “-jN” option of make.

# faac
./configure --prefix=/opt
# comment out line 126 of faac-1.28/common/mp4v2/mpeg4ip.h
# strcasestr in case of any compilation error
make -jN
sudo make install
# faad
./configure --prefix=/opt
make -jN
sudo make install
# x264
sudo apt-get install yasm # install dependencies
./configure --prefix=/opt --enable-shared
make -jN
sudo make install
# libvpx
sudo apt-get install yasm #install dependencies
./configure --prefix=/opt --enable-vp8 --enable-vp9 --enable-shared
make -jN
sudo make install
# libopus
./configure --prefix=/opt
make -jN
sudo make install


# install these extra package dependencies:
sudo apt-get install libopenjpeg-dev libvorbis-dev libschroedinger-dev libvpx-dev libopus-dev
./configure --prefix=/opt --extra-cflags='-Wall -g -I/opt/include/' --extra-ldflags='-L/opt/lib/' --enable-avfilter --enable-libschroedinger --enable-libvpx --enable-libspeex --enable-libtheora --enable-libopus --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --enable-runtime-cpudetect --enable-libfaac --enable-libx264 --enable-postproc --enable-swscale --enable-x11grab --enable-libopenjpeg --enable-shared --enable-gpl --enable-nonfree --disable-static --disable-stripping --disable-altivec --disable-armv5te --disable-armv6 --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages
make -jN
sudo make install


# package dependencies:
apt-get install libtool gettext cvs libfaad-dev libfaac-dev libswscale-dev libpostproc-dev libqt4-dev libgcrypt20-dev libdbus-1-dev lua5.2 liblua5.2-dev libproxy-dev libdvbpsi-dev liblivemedia-dev libnotify-dev libshout3-dev libdca-dev libflac-dev libmpeg2-4-dev libmpeg3-dev libsdl2-dev libgnutls28-dev libavc1394-dev libsmbclient-dev libtwolame-dev liba52-0.7.4-dev libfribidi-dev libjack-dev libmad0-dev
# a few more extra dependencies:
apt-get install libcdio-dev libvcdinfo-dev libpulse-dev libxml2-dev libmodplug-dev libnotify-dev libcaca-dev libncursesw5-dev libxpm-dev libxcb-shm0-dev libxcb-xv0-dev libxcb-keysyms1-dev libxcb-randr0-dev libx11-xcb-dev libxcb-composite0-dev
./configure --prefix=/opt --disable-update-check --disable-gnome --disable-gtk --disable-familiar --disable-fb --enable-sdl --enable-esd --enable-mad --enable-arts --disable-jack --enable-pulse --enable-lirc --enable-a52 --enable-aa --enable-dvbpsi --without-dv-raw1394 --disable-dc1394 --disable-kde --enable-mp4 --enable-dvb --disable-satellite --enable-ogg --enable-vorbis --enable-shout --enable-qt4 --disable-slp --enable-flac --disable-skins --disable-basic-skins --enable-skins2 --enable-freetype --enable-mkv --enable-speex --enable-caca --enable-live555 --enable-libmpeg2 --enable-fribidi --enable-cdio --enable-mod --enable-theora --enable-modplug --enable-gnutls --enable-ffmpeg --enable-ncurses --enable-smb --disable-gnomevfs --enable-bonjour --enable-mpc --enable-vcd --enable-vcdx --enable-twolame --enable-x264 --enable-faad -enable-faac --enable-vpx --enable-opus --enable-xcb --disable-zvbi --enable-telx --enable-mediacontrol-bindings --disable-atmo --enable-taglib --enable-libass --enable-libdca --enable-alsa --disable-dv --disable-dvdnav --disable-notify --enable-v4l --enable-v4l2 --enable-pvr --enable-dvd --without-dvdcss CPPFLAGS='-I/opt/include' CFLAGS='-g -O2 -I/opt/include' LDFLAGS='-L/opt/lib -Wl,--as-needed' CXXFLAGS='-g -O2' PKG_CONFIG_PATH='/opt/lib/pkgconfig:/usr/lib/pkgconfig'
make -jN
sudo make install

Read Full Post »

%d bloggers like this: