Wednesday, September 21, 2016

How to find a package in debian / ubuntu

Here are three different command I use to look for a linux package.
  • apt-cache search <regex>
  • apt-show-versions | egrep <regex>
  • dpkg -l | egrep -i <regex>
The first one is super verbose, but it lists all sub-packages.

The second one is a command to install via ''sudo apt-get install apt-show-versions''. I use it often as it also lists whether the package is already installed or not.

The last one I forget all the time. It will show which packages are, or were, installed on your system. It is concise and it lists the architecture (32/64 bits versions).

For example, here are the three output when looking for SDL dev (which stands for "simple direct media layer", a lightweight and cross-platform framework to develop graphics and access to low-level resources).

''
[11:35][jeremie@alpha:~] apt-cache search 'sdl.*-dev'
libsdl1.2-dev - Simple DirectMedia Layer development files
erlang-esdl-dev - Erlang bindings to the SDL (development files)
libalien-sdl-dev-perl - helper  to build  Perl program using SDL libraries
libghc-sdl-dev - Haskell SDL binding for GHC
libghc-sdl-gfx-dev - Haskell SDL gfx binding for GHC
libghc-sdl-image-dev - Haskell SDL Image binding for GHC
libghc-sdl-mixer-dev - Haskell SDL Mixer binding for GHC
libghc-sdl-ttf-dev - Haskell SDL TTF binding for GHC
libsdl-console-dev - Console that can be added to any SDL application, development files
libsdl-gfx1.2-dev - development files for SDL_gfx
libsdl-image1.2-dev - Image loading library for Simple DirectMedia Layer 1.2, development files
libsdl-mixer1.2-dev - Mixer library for Simple DirectMedia Layer 1.2, development files
libsdl-net1.2-dev - Network library for Simple DirectMedia Layer 1.2, development files
libsdl-ocaml-dev - OCaml bindings for SDL - development files
libsdl-pango-dev - text rendering with Pango in SDL applications (development)
libsdl-sge-dev - extension of graphic functions for the SDL multimedia, development files
libsdl-sound1.2-dev - Sound library for Simple DirectMedia Layer 1.2, development files
libsdl-stretch-dev - development files for SDL_stretch library
libsdl-ttf2.0-dev - TrueType Font library for Simple DirectMedia Layer 1.2, development files
libsdl2-dev - Simple DirectMedia Layer development files
libsdl2-gfx-dev - development files for SDL2_gfx
libsdl2-image-dev - Image loading library for Simple DirectMedia Layer 2, development files
libsdl2-mixer-dev - Mixer library for Simple DirectMedia Layer 2, development files
libsdl2-net-dev - Network library for Simple DirectMedia Layer 2, development files
libsdl2-ttf-dev - TrueType Font library for Simple DirectMedia Layer 2, development files
libtaoframework-sdl-cil-dev - Tao CLI binding for SDL - development files

[11:35][jeremie@alpha:~] apt-show-versions |egrep sdl.*-dev
libsdl-image1.2-dev:amd64/xenial 1.2.12-5build2 uptodate
libsdl-image1.2-dev:i386 not installed
libsdl1.2-dev:amd64/xenial 1.2.15+dfsg1-3 uptodate
libsdl1.2-dev:i386 not installed

[11:36][jeremie@alpha:~] dpkg -l | egrep -i 'sdl.*-dev'
ii  libsdl-image1.2-dev:amd64  1.2.12-5build2  amd64  Image loading library for Simple DirectMedia Layer 1.2, development files
ii  libsdl1.2-dev              1.2.15+dfsg1-3  amd64  Simple DirectMedia Layer development files
''
Thge ''ii'' flags mean here "currently installed", i.e. I already have them. You can read about other installation status flags here.

Thursday, September 15, 2016

Lightweight video streaming from a Raspberry with h264_v4l2_rtspserver

VLC adds 330Mo to a raspbian distribution just to stream video to the network. This is huge!
Instead there is a smaller solution, with adds "only" a few dozens megabytes of buliding tools (mainly).

It just interfaces the nice standard V4L2 driver and streams it to a RTSP feed (i.e. Real Time Streaming Protocol). This is also very efficient as minimum buffering is done locally, which means faster response time (time lag is "only" 2 seconds, which is decent).

From this answer.
''
sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git
cd h264_v4l2_rtspserver
sudo apt-get install libopus-dev libexpat1-dev libssl-dev libasound2-dev libudev-dev libavahi-client-dev libcurl4-openssl-dev libjs-jquery
cmake .
sudo make install
h264_v4l2_rtspserver
''
Then, the RTSP video stream can be accessed from anywhere with:
''
vlc rtsp://<raspberry>:8554/unicast
''

Note that ''h264_v4l2_rtspserver'' has a few options to optimize your bandwidth (reducing the network buffering helps also achieving a faster response time):
''
h264_v4l2_rtspserver --network-caching 300 -H <height> -W <width> -F <fps>
''

BTW some additional/alternative info for the Raspberry can be found here.