Difference between revisions of "Viper"

From fd.io
Jump to: navigation, search
(Installation from binary packages)
(Build the player)
 
(21 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
= Viper Player for ICN =
 
= Viper Player for ICN =
  
This application is designed to provide a tool to test the adaptation video streaming using the ICN protocol stack.
+
VIPER is an MPEG-DASH video player that supports video retrieval using TCP or CICN from an HTTP video server using several video qualities.
 +
VIPER implements a variety of adaptive  controllers such as PANDA, AdapTech, and BOLA. It supports video qualities
 +
up to UHD but best tablets can render up to FHD such as iPad Pro or Google Pixel.
 +
The video player does not support audio streams as it is mainly used as a prototype for demonstrations. This feature will be available later on.
  
 
== Dependencies ==
 
== Dependencies ==
  
 
* ffmpeg
 
* ffmpeg
* libboost-system-dev
 
 
* libparc
 
* libparc
 +
* libxml2
 +
* libcurl4
 +
* libdash (see inside libdash folder of viper project)
 +
* Qt5.7 or higher
 +
* QtAV
 +
 +
If ICN
 
* libccnx-common
 
* libccnx-common
 
* libccnx-transport-rta
 
* libccnx-transport-rta
 
* long-bow
 
* long-bow
* libxml2
 
* libcurl4
 
* libdash
 
 
* libicnet
 
* libicnet
* Qt5.7
+
 
* QtAV
+
If hICN
 +
* llibhicntransport
  
 
== Quick Start ==
 
== Quick Start ==
Line 22: Line 29:
 
=== Installation from binary packages ===
 
=== Installation from binary packages ===
  
Android 7
+
Android 7 (to appear on Google Play)
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
Download apps from the following link
 
Download apps from the following link
 
</syntaxhighlight>
 
</syntaxhighlight>
 
https://jenkins.fd.io/view/cicn/job/cicn-android-sdk-merge-master-ubuntu1604/
 
https://jenkins.fd.io/view/cicn/job/cicn-android-sdk-merge-master-ubuntu1604/
 
  
 
Ubuntu 16.04
 
Ubuntu 16.04
Line 41: Line 47:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Build the dependencies ==
+
== Ubuntu ==
 +
Build the dependencies
  
 
* QtAV For building and install the library, from the root folder of the projet:
 
* QtAV For building and install the library, from the root folder of the projet:
Line 59: Line 66:
 
  $ make
 
  $ make
 
  $ make install</source>
 
  $ make install</source>
== Build the player ==
+
 
 +
Build the player
  
 
For building the player, from the root folder of the project:
 
For building the player, from the root folder of the project:
  
<source lang="bash"> $ cd viper
+
<source lang="bash"> $ TRANSPORT=ICN #or HICN
 +
$ cd viper
 
  $ mkdir build && cd build
 
  $ mkdir build && cd build
  $ qmake ../viper.pro
+
  $ if [ "${TRANSPORT}" == "ICN" ]; then
 +
  qmake ../viper.pro
 +
    else
 +
        qmake ../viper.pro "TRANSPORT_LIBRARY = HICNET"
 +
    fi
 
  $ make
 
  $ make
 
  $ ./viper</source>
 
  $ ./viper</source>
 +
 +
==Mac Os X==
 +
Download the Qt environment from https://www.qt.io/download and install MacOs and QtChart modules.
 +
<syntaxhighlight lang="bash">
 +
$ TRANSPORT=ICN #or HICN
 +
$ QT_DIR=<qt_base_folder>/<version>
 +
$ BASE_DIR=`pwd`
 +
$ SRC_PATH=${BASE_DIR}/src
 +
$ mkdir -p $SRC_PATH
 +
$ BUILD_PATH=${BASE_DIR}/build
 +
$ mkdir -p $BUILD_PATH
 +
$ if which brew >/dev/null; then
 +
if brew ls --versions openssl > /dev/null; then
 +
echo "openssl installed"
 +
else \
 +
brew install openssl
 +
brew link openssl
 +
fi
 +
if brew ls --versions libevent > /dev/null; then
 +
echo "libevent installed"
 +
else
 +
brew install libevent
 +
brew link libevent
 +
fi
 +
        if brew ls --versions asio > /dev/null; then
 +
echo "asio installed"
 +
else
 +
brew install asio
 +
brew link asio
 +
fi
 +
        if brew ls --versions curl > /dev/null; then
 +
echo "curl installed"
 +
else
 +
brew install curl
 +
brew link curl
 +
fi
 +
    else
 +
    echo brew does not exist
 +
    exit 1
 +
  fi
 +
$ if brew ls --versions ffmpeg > /dev/null; then
 +
echo "ffmpeg installed"
 +
    else
 +
brew install ffmpeg
 +
brew link ffmpeg
 +
  fi
 +
$ cd ${SRC_PATH}
 +
$ if [ ! -d ${SRC_PATH}/QtAV ]; then
 +
git clone https://github.com/wang-bin/QtAV.git
 +
  fi
 +
$ export CPATH=/usr/local/include:$CPATH
 +
$ export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
 +
$ mkdir -p ${BUILD_PATH}/QtAV
 +
$ cd ${BUILD_PATH}/QtAV
 +
$ $QT_DIR/clang_64/bin/qmake ${SRC_PATH}/QtAV/
 +
$ make
 +
$ bash sdk_install.sh
 +
$ cd ${SRC_PATH}
 +
$ if [ ! -d ${SRC_PATH}/viper ]; then
 +
git clone -b viper/master https://gerrit.fd.io/r/cicn viper
 +
  fi
 +
$ mkdir -p ${BUILD_PATH}/libdash
 +
$ cd ${BUILD_PATH}/libdash
 +
$ cmake  ${SRC_PATH}/viper/libdash
 +
$ make
 +
$ make install
 +
$ mkdir -p ${BUILD_PATH}/viper
 +
$ cd ${BUILD_PATH}/viper
 +
$ if [ "${TRANSPORT}" == "ICN" ]; then
 +
  $QT_DIR/clang_64/bin/qmake ${SRC_PATH}/viper/
 +
  else
 +
        $QT_DIR/clang_64/bin/qmake ${SRC_PATH}/viper/ "TRANSPORT_LIBRARY = HICNET"
 +
  fi
 +
$ make
 +
</syntaxhighlight>
 +
 
== Platforms ==
 
== Platforms ==
  
Line 73: Line 162:
  
 
<pre>- Ubuntu 16.04 (x86_64)
 
<pre>- Ubuntu 16.04 (x86_64)
- MacOSX 10.12
+
- MacOSX 10.13
 
- Android 7
 
- Android 7
 
- iOS 10</pre>
 
- iOS 10</pre>

Latest revision as of 11:34, 13 May 2019

Viper Player for ICN

VIPER is an MPEG-DASH video player that supports video retrieval using TCP or CICN from an HTTP video server using several video qualities. VIPER implements a variety of adaptive controllers such as PANDA, AdapTech, and BOLA. It supports video qualities up to UHD but best tablets can render up to FHD such as iPad Pro or Google Pixel. The video player does not support audio streams as it is mainly used as a prototype for demonstrations. This feature will be available later on.

Dependencies

  • ffmpeg
  • libparc
  • libxml2
  • libcurl4
  • libdash (see inside libdash folder of viper project)
  • Qt5.7 or higher
  • QtAV

If ICN

  • libccnx-common
  • libccnx-transport-rta
  • long-bow
  • libicnet

If hICN

  • llibhicntransport

Quick Start

Installation from binary packages

Android 7 (to appear on Google Play)

Download apps from the following link

https://jenkins.fd.io/view/cicn/job/cicn-android-sdk-merge-master-ubuntu1604/

Ubuntu 16.04

 $ sudo apt-get install software-properties-common
 $ echo "deb [trusted=yes] https://nexus.fd.io/content/repositories/fd.io.master.ubuntu.$(lsb_release -sc).main/ ./" \
          | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
 $ sudo add-apt-repository --yes ppa:beineri/opt-qt571-xenial
 $ wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
 $ echo "deb [trusted=yes] http://archive.getdeb.net/ubuntu xenial-getdeb apps" | sudo tee -a /etc/apt/sources.list.d/getdeb.list
 $ sudo apt-get update
 $ sudo apt-get install viper

Ubuntu

Build the dependencies

  • QtAV For building and install the library, from the root folder of the projet:
 $ git clone https://github.com/wang-bin/QtAV
 $ cd QtAV
 $ mkdir build && cd build
 $ qmake ../QtAV.pro
 $ make
 $ sh sdk_install.sh
  • libdash For building the player, from the root folder of the project:
 $ git clone -b viper/master https://gerrit.fd.io/r/cicn viper
 $ cd viper/libdash
 $ mkdir build && cd build
 $ cmake ../
 $ make
 $ make install

Build the player

For building the player, from the root folder of the project:

 $ TRANSPORT=ICN #or HICN
 $ cd viper
 $ mkdir build && cd build
 $ if [ "${TRANSPORT}" == "ICN" ]; then
  	qmake ../viper.pro
    else
        qmake ../viper.pro "TRANSPORT_LIBRARY = HICNET"
    fi
 $ make
 $ ./viper

Mac Os X

Download the Qt environment from https://www.qt.io/download and install MacOs and QtChart modules.

 $ TRANSPORT=ICN #or HICN
 $ QT_DIR=<qt_base_folder>/<version>
 $ BASE_DIR=`pwd`
 $ SRC_PATH=${BASE_DIR}/src
 $ mkdir -p $SRC_PATH
 $ BUILD_PATH=${BASE_DIR}/build
 $ mkdir -p $BUILD_PATH
 $ if which brew >/dev/null; then
	if brew ls --versions openssl > /dev/null; then
		echo "openssl installed"
	else \
		brew install openssl
		brew link openssl
	fi
	if brew ls --versions libevent > /dev/null; then
		echo "libevent installed"
	else
		brew install libevent
		brew link libevent
	fi
        if brew ls --versions asio > /dev/null; then
		echo "asio installed"
	else
		brew install asio
		brew link asio
	fi
        if brew ls --versions curl > /dev/null; then
		echo "curl installed"
	else
		brew install curl
		brew link curl
	fi
    else
    	echo brew does not exist
    	exit 1
   fi
 $ if brew ls --versions ffmpeg > /dev/null; then
	echo "ffmpeg installed"
    else
	brew install ffmpeg
	brew link ffmpeg
   fi
 $ cd ${SRC_PATH}
 $ if [ ! -d ${SRC_PATH}/QtAV ]; then
	git clone https://github.com/wang-bin/QtAV.git
   fi
 $ export CPATH=/usr/local/include:$CPATH
 $ export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
 $ mkdir -p ${BUILD_PATH}/QtAV
 $ cd ${BUILD_PATH}/QtAV
 $ $QT_DIR/clang_64/bin/qmake ${SRC_PATH}/QtAV/
 $ make
 $ bash sdk_install.sh
 $ cd ${SRC_PATH}
 $ if [ ! -d ${SRC_PATH}/viper ]; then
 	git clone -b viper/master https://gerrit.fd.io/r/cicn viper
   fi
 $ mkdir -p ${BUILD_PATH}/libdash
 $ cd ${BUILD_PATH}/libdash
 $ cmake  ${SRC_PATH}/viper/libdash
 $ make
 $ make install
 $ mkdir -p ${BUILD_PATH}/viper
 $ cd ${BUILD_PATH}/viper
 $ if [ "${TRANSPORT}" == "ICN" ]; then
  	$QT_DIR/clang_64/bin/qmake ${SRC_PATH}/viper/
   else
        $QT_DIR/clang_64/bin/qmake ${SRC_PATH}/viper/ "TRANSPORT_LIBRARY = HICNET"
   fi
 $ make

Platforms

Viper has been tested in:

- Ubuntu 16.04 (x86_64)
- MacOSX 10.13
- Android 7
- iOS 10