Summary
-------

This cube provides basic media storage, transcoding and streaming features.

Storage
-------

This cube defines two ``SoundFile`` and ``VideoFile`` entity
types. Each entity uses a ``data`` attribute to store original raw
data and custom ``data_<fmt>`` (e.g. ``data_mp3``, ``data_ogv``
attributes) to store transcoded data.

BFSS is used to store data on the filesystem. The root directory
is specified by the ``media-dir`` configuration option.


Transcoding
-----------

Modification hooks are responsible for reenconding media files.
`ffmpeg <http://www.ffmpeg.org/>`_ is used to convert sound and video
files to streamable formats.

Encoding uses Celery_ as an asynchronous task queue manager, see below
for installation.

.. _Celery: http://www.celeryproject.org


Streaming
---------

`jplayer <http://jplayer.org/>`_ is used to stream media content.


Installation
------------

See Celery_ for a complete documentation. Here is a quick startup using 
RabbitMQ_ as broker for Celery_:

.. code-block:: bash

  apt-get install rabbitmq-server

RabbitMQ requires a minimal setup. For instance (all permissions for
user `user` on vhost `vhost`):

.. code-block:: bash

  sudo rabbitmqctl add_user user password
  sudo rabbitmqctl add_vhost vhost
  sudo rabbitmqctl set_permissions -p vhost user '.*' '.*' '.*'

.. _RabbitMQ: https://www.rabbitmq.com/

Configuration
-------------

Create a `celeryconfig.py` file in the same directory as the
`all-in-one.conf` file (namely, the application home), with
following content::

  BROKER_URL = 'amqp://user:password@localhost:5672/vhost'

See
http://docs.celeryproject.org/en/latest/userguide/application.html#configuration
for more configuration options.


Execution
---------

Use the command below to run the celery worker handler:

.. code-block:: bash

 celery -A cubicweb_celery -i <instance_name> worker [ --beat ]

