--- /dev/null
+#!/usr/bin/env python
+
+"""
+Base classes for the external programs API.
+"""
+
+import cis_exceptions
+
+class BaseTranscoder:
+ """
+ Abstractization of the API class for the transcoder program.
+ """
+
+ prog_bin = None
+ input_file = None
+
+ # Recommended formats.
+ containers = {
+ "avi": None,
+ "flv": None,
+ "mp4": None,
+ "ogg": None,
+ "webm": None,
+ "mpegts": None
+ }
+ a_codecs = {
+ "mp3": None,
+ "vorbis": None
+ }
+ v_codecs = {
+ "h264": None,
+ "theora": None,
+ "vp8": None
+ }
+
+ def __init__(self, input_file, prog_bin=None):
+ self.input_file = input_file
+ self.prog_bin = prog_bin
+
+ def transcode(self, container, a_codec, v_codec,
+ a_bitrate=None, a_samplingrate=None, a_channels=None,
+ v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+ """
+ Transcodes the input file to an audio-video file.
+
+ container: possible values are listed in containers member as keys
+ a_codec: possible values are listed in a_codecs member as keys
+ v_codec: possible values are listed in v_codecs member as keys
+ """
+
+ pass
+
+ def transcode_audio(self, container, a_codec,
+ a_bitrate=None, a_samplingrate=None, a_channels=None):
+ pass
+
+ def transcode_video(self, container, v_codec,
+ v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+ pass
+
+ def tr_container(self, name):
+ """ Translates container API name into external program identifier."""
+
+ if not self.containers.has_key(name) or self.containers[name] == None:
+ raise cis_exceptions.NotImplementedException("Container " + name)
+
+ return self.containers[name]
--- /dev/null
+#!/usr/bin/env python
+
+import base
+
+class FFmpegTranscoder(base.BaseTranscoder):
+ prog_bin = 'ffmpeg'
+ input_file = None
+
+ def transcode(self, container, a_codec, v_codec,
+ a_bitrate=None, a_samplingrate=None, a_channels=None,
+ v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+ pass
+
+ def transcode_audio(self, container, a_codec,
+ a_bitrate=None, a_samplingrate=None, a_channels=None):
+ pass
+
+ def transcode_video(self, container, v_codec,
+ v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+ pass
--- /dev/null
+#!/usr/bin/env python
+
+"""
+This module implements exceptions raised in Content Ingestion Server.
+"""
+
+class NotImplementedException(Exception):
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
--- /dev/null
+#!/usr/bin/env python
+
+import sys
+import config
+import cis_exceptions
+
+
+if __name__ == '__main__':
+ transcoder = config.TRANSCODER_CLASS("file")
+# transcoder.transcode()
+ try:
+ print transcoder.tr_container("avi")
+ except cis_exceptions.NotImplementedException as e:
+ sys.stderr.write(e.value)
--- /dev/null
+#!/usr/bin/env python
+
+# Make here all necessary imports required for API classes.
+from api import ffmpeg
+
+# External programs API classes.
+TRANSCODER_CLASS = ffmpeg.FFmpegTranscoder
+THUMB_EXTRACTER_CLASS = None # TODO
+BT_CLIENT_CLASS = None # TODO
+FILE_TRANSFERER_CLASS = None # TODO
+
+# External programs binary file. None means default.
+TRANSCODER_BIN = None
+THUMB_EXTRACTER_BIN = None
+BT_CLIENT_BIN = None
+FILE_TRANSFERER_BIN = None