説明

モジュラートランスコーディングパイプライン

【解決手段】 マルチメディアメッセージをトランスコードするためのモジュラートランスコーダソフトウェアシステムであって、一連の複雑な、互いに関連するまたは無関係の処理をトランスコーディングパイプラインとして動的に構築するための一群のソフトウェアモジュールおよびオブジェクトを備えるモジュラートランスコーダソフトウェアシステムが提供される。トランスコーディングパイプラインは、処理の階層構造を持ち、階層構造全体を1つのパスで実行することを目的として、処理を組織化および最適化することができる。また、外部プラグインは、構築情報を変更、追加、または削除することによって、パイプラインを形成するメカニズムをカスタマイズすることができる。

【発明の詳細な説明】
【関連出願】
【0001】
本願は、米国特許出願第12/118,690号(発明者:リチャード・ノートン、出願日:2008年5月10日、発明の名称:「ビデオ適応化へのマルチメディア・メッセージング・サービス(MMS)の方法およびシステム」)および米国特許出願第12/334,452号(出願日:2008年12月13日、発明の名称:「モジュラートランスコーディングパイプライン」)による恩恵を主張する。両米国出願の内容は参照により本願に組み込まれる。
【技術分野】
【0002】
本発明は概して、マルチメディア・メッセージング・サービス(MMS)に関する。特に、MMSメッセージに含まれているメディアを適応メッセージへと変更することに関する。
【背景技術】
【0003】
マルチメディア・メッセージング・サービス(MMS)は、例えば、URL(http://www.openmobilealliance.org/Technical/release_program/mms_v1_2.aspxhttp://www.openmobilealliance.org/release_program/mms_v1_2.html)から入手可能な、OMAマルチメディア・メッセージング・サービス仕様書、承認バージョン1.2 2005年5月、オープン・モバイル・アライアンス(Open Mobile Alliance)、OMA−ERP−MMS−V1_2−200504295−A.zipで説明されているように、文字、音声、静止画像、および動画像等を含むさまざまな種類のデータを主に無線ネットワークを介してピア・ツー・ピアおよびサーバ・ツー・クライアントで送信するための方法である。
【0004】
MMSが提供する標準的な方法は上記のようなデータをカプセル化するが、データの種類については、テキスト形式、3GPのビデオおよび音声/スピーチ、合成音声用のSP−MIDI、JPEG静止画像等(これらの詳細については、URL(http://www.3gpp.org/ftp/Specs/html-info/26140.htm)から入手可能な、マルチメディア・メッセージング・サービス、メディアフォーマット、およびコーデック、3GPP TS 26.140、V7.1.0(2007−06)を参照のこと)、多く存在する標準フォーマットのうち任意のものを用いて符号化され得る。静止画像は、JPEG形式に符号化されることが多い。尚、JPEG方式については、ソフトウェアライブラリが「インディペンデントJPEGグループ(Independent JPEG Group)」によって作成されており、ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gzで公開されている。
【0005】
図1は、MMSシステムアーキテクチャ100の一例を示す図である。MMSシステムアーキテクチャ100は、起点ノード102、サービス配信プラットフォーム104と、デスティネーションノード106と、適応化エンジン108とを備える。起点ノード102は、ネットワーク「A」110を介して、サービス配信プラットフォーム104と通信可能なデバイスである。同様に、デスティネーションノード106は、ネットワーク「B」112を介してサービス配信プラットフォーム104と通信可能なデバイスである。ネットワーク「A」および「B」は、一連の利用可能な接続方式を図示するための一例に過ぎず、他にも多くの構成を利用することが可能である。例えば、起点ノードおよびデスティネーションノード(102および106)は、1つのネットワークを介してサービス配信プラットフォーム104と通信することができるとしてもよいし、起点ノード102は、間にネットワーク等を介在させることなく、サービス配信プラットフォーム104に直接接続されるとしてもよい。
【0006】
適応化エンジン108は、図1に示すように、リンク114を介してサービス配信プラットフォーム104に直接接続されるとしてもよいし、またはこれに代えて、ネットワークを介して接続されるとしてもよいし、サービス配信プラットフォーム104に組み込まれるとしてもよい。
【0007】
単純な事例を挙げると、起点ノード102が、デスティネーションノード106宛ての(マルチメディア)メッセージを送信するとしてよい。このメッセージは、ネットワーク「A」110を介してサービス配信プラットフォーム104へと転送され、サービス配信プラットフォーム104から、ネットワーク「B」112を介してデスティネーションノード106へと送信される。起点ノードおよびデスティネーションノード(102および106)は、例えば、無線デバイスであってよく、ネットワーク「A」および「B」(110および112)は、この場合、無線ネットワークであってよく、サービス配信プラットフォーム104は、マルチメディアメッセージ転送サービスを提供するコンピュータシステムであってよい。
【0008】
別の例を挙げると、起点ノード102は、データネットワークを介してサービス配信プラットフォーム104に接続されているコンテンツプロバイダのサーバであってよい。つまり、ネットワーク「A」110はインターネットであってよく、ネットワーク「B」112は、無線デバイスであるデスティネーションノード106に対してサービスを提供する無線ネットワークであってよい。
【0009】
より一般的な事例を挙げると、デスティネーションノード106の機能に、起点ノード102の送信フォーマットのメッセージを受信、復号、または表示する機能が含まれない場合がある。デスティネーションノード106でこのメッセージを処理させるべく、起点ノード102から受信したメッセージを、適応化ソフトウェアモジュール116で修正するとしてよい。適応化ソフトウェアモジュール116は、コンピュータ読出可能媒体に格納されているコンピュータ読出可能命令を有し、当該メッセージがデスティネーションノード106に配信される前に適応化エンジン108で実行される。
【0010】
図1に示した構成例によると、起点ノード102からデスティネーションノード106へのメッセージの送信は、メッセージ適応化が必要であると仮定すると、以下に記載する5段階で行われる。
1:「ソースメッセージ」が起点ノード102からサービス配信プラットフォーム104へと送信される
2:サービス配信プラットフォーム104は、例えば、デスティネーションノード106に直接問い合わせることによって、または、機能のデータベースを参照することによって、デスティネーションノード106の機能を判断する
3:サービス配信プラットフォーム104は、「ソースメッセージ」およびデスティネーションノード106の機能の説明を含む要求を、適応化エンジン108に送信する
4:適応化エンジン108に含まれる一連のソフトウェアモジュール116は、「ソースメッセージ」を「適応メッセージ」に適応化させる
5:適応化エンジン108は、「適応メッセージ」をサービス配信プラットフォーム104に戻して、サービス配信プラットフォーム104は「適応メッセージ」をデスティネーションノード106に転送する
【0011】
マルチメディア・メッセージング・サービス(MMS)に関してサーバ側での適応化の概略については、論文「マルチメディア・メッセージング・サービスにおけるマルチメディア適応化」(ステファン・クロンブ(Stephane Coulombe)およびグイド・グラッセル(Guido Grassel)、IEEEコミュニケーションズ・マガジン、第42巻、第7号、第120頁から第126頁、2004年7月)に記載されている。
【0012】
メディアコンテンツ作成フォーマットの多様性の増加が進む今日において、デスティネーションデバイスについて機能およびデバイス間での制限の相違が拡大しているために、拡張可能で性能および保全性が改善された、より自由度の高い適応化システムが必要となっている。
【発明の概要】
【発明が解決しようとする課題】
【0013】
このため、本発明は、拡張可能で性能および保全性が改善された、自由度の高い適応化システムを実現するためのマルチメディア適応化の方法およびシステムを提供することを目的とする。
【課題を解決するための手段】
【0014】
本発明の一側面によると、プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムが提供される。コンピュータ読出可能格納媒体は、プロセッサによって実行されるコンピュータ読出可能命令を格納している。当該システムは、入力メディアを適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第1のソフトウェアモジュール群であって、トランスコーディングパイプラインモジュールを動的に構築する1以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じて1以上のビルダモジュールを選択するディレクタモジュールを有する第1のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、1以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第2のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
【0015】
トランスコーディングパイプラインモジュールはさらに、1以上のビルダモジュールによって作成され、且つ、トランスコーディング要求の一部を処理するサブパイプラインモジュールを有する。第1のソフトウェアモジュール群はさらに、1以上のスクライバモジュールを有し、各スクライバモジュールは、ドキュメントの形態である入力メディアおよび適応出力メディアのオブジェクトの読出、復号、符号化、スケーリング、または、書込のうち1つを行う。便宜上、ドキュメントは、トランスコーディングオブジェクトモジュールによる処理に適している構造を持ち、ドキュメントの構造は、入力メディアおよび適応出力メディアの構造とは異なる。
【0016】
1以上のビルダモジュールはそれぞれ、ビルダモジュールの機能を示すビルダクエリ関数モジュールを含み、ディレクタモジュールは、ビルダモジュールの機能を判断し、且つ、トランスコーディング要求に含まれる情報と機能とを比較一致させるべく、クエリ関数モジュールと通信するビルダ選択モジュールを含む。
【0017】
有益なことに、1以上のビルダモジュールはそれぞれさらに、ディレクタのビルダ選択モジュールと通信して、トランスコーディング要求の一部を実行することが可能なほかの複数のビルダモジュールを選択するようディレクタに要求するサブビルダ選択モジュールを含む。第2のソフトウェアモジュール群はさらに、あるドキュメントを別のドキュメントに変換するドキュメントトランスコーダモジュールを有する 。
【0018】
本発明の実施形態に係るシステムは、トランスコーディング処理の実行中に発行されたメッセージ、エラー、および警告を格納するトランスコーディング結果モジュールと、入力メディアおよび適応出力メディアに関する情報を格納する特性化結果モジュールとを有するトランスコーダ出力データセットモジュールをさらに備える。
【0019】
本発明の別の側面によると、入力メディアを含むトランスコーディング要求を適応出力メディアを含むトランスコーダ出力データセットへと処理する方法が提供される。当該方法は、トランスコーディング要求を受信する段階(a)と、トランスコーディング要求の変換コマンドを読み出す段階(b)と、ソフトウェアモジュール群から、変換コマンドに対応付けられているプラグインプログラムを選択する段階(c)と、選択されたプラグインプログラムを実行して、入力メディアを適応出力メディアへとトランスコードする段階(d)と、適応出力メディアを含むトランスコーダ出力データセットを生成する段階(f)とを備える。
【0020】
当該方法の段階(d)は、入力ドキュメントのコンポーネントへと入力メディアを抽出する段階(g)と、トランスコーディング要求および入力ドキュメントに示されている処理要求に一致するように、トランスコーディング処理を含むメイントランスコーディングパイプラインを作成する段階(h)と、メイントランスコーディングパイプラインから冗長なトランスコーディング処理218を除去することによって、メイントランスコーディングパイプラインを最適化する段階(i)と、メイントランスコーディングパイプラインのトランスコーディング処理を実行して適応出力メディアを生成する段階(j)とを有する。
【0021】
上述した方法によると、ソフトウェアモジュール群は、ドキュメントを処理する1以上のスクライバモジュールおよびディレクタモジュールを含み、段階(g)は、ディレクタモジュールを呼び出して、1以上のスクライバモジュールから読出スクライバモジュールを特定する段階(k)と、ディレクタモジュールが、1以上のスクライバモジュールにある全てのスクライバモジュールのリストを取得する段階(l)と、ディレクタモジュールが、読出クエリによって、全てのスクライバモジュールのリストの各スクライバモジュールに問い合わせを行う段階(m)と、ディレクタモジュールが、読出クエリに対して肯定的な返答を返す読出スクライバモジュールを選択する段階(n)と、読出スクライバモジュールが、入力メディアを読み出して入力ドキュメントを生成する段階(o)とを有する。上述した方法によると、ソフトウェアモジュール群はさらに、トランスコーディングパイプラインを構築する1以上のビルダモジュールを含み、段階(h)は、ディレクタモジュールを呼び出して、1以上のビルダモジュールから、トランスコーディング要求を満足させるためのトランスコーディングパイプラインを構築することが可能な正しいビルダモジュールを特定する段階(p)と、ディレクタモジュールが、ビルダモジュール群に含まれる全てのビルダモジュールのリストを取得する段階(q)と、ディレクタモジュールが、パイプライン構築クエリで、全てのビルダモジュールのリストに含まれる各ビルダモジュールに対して問い合わせを行う段階(r)と、ディレクタモジュールが、正しいビルダモジュールとして、パイプライン構築クエリに対して肯定的な応答を返すビルダモジュールを選択する段階(s)と、正しいビルダモジュールが、トランスコーディングパイプラインを作成する段階(t)とを有する。
【0022】
上述した方法によると、ソフトウェアモジュール群はさらに、トランスコーディングオブジェクトモジュール群を含み、段階(t)は、正しいビルダモジュールを現在アクティブなビルダモジュールとして指定する段階(u)と、空のトランスコーディングパイプラインを現在のパイプラインとして指定して、トランスコーディング要求を未実行処理要求として指定する段階(v)と、未実行処理要求が見つからない場合には、段階(ee)にジャンプする段階(w)と、現在アクティブなビルダモジュールが、トランスコーディングオブジェクトモジュール群から、未実行処理要求を実行することが可能な一致トランスコーディングオブジェクトモジュールを特定および選択して、現在アクティブなビルダモジュールが一致トランスコーディングオブジェクトモジュールを見つけることが出来ない場合には、段階(aa)にジャンプする段階(x)と、一致トランスコーディングオブジェクトモジュールを、未実行処理要求を実行するべく、一致トランスコーディング処理の実行および現在のパイプラインの終端に一致トランスコーディング処理の付加を行うことが可能なものとして指定する段階(y)と、段階(w)から段階(y)を繰り返す段階(z)と、空のサブパイプラインを作成し、空のサブパイプラインを現在のパイプラインの終端に付加し、未実行処理要求を複数の未実行サブ要求に分割する段階(aa)と、第1の未実行サブ要求をサポート可能なサポートビルダモジュールをディレクタモジュールから取得して、ビルダモジュールを現在アクティブなビルダモジュールとして指定して、第1の未実行サブ要求を未実行処理要求として指定する段階(bb)と、空のサブパイプラインを現在のパイプラインとして指定する段階(cc)と、後続の未実行サブ要求それぞれを未実行処理要求として段階(w)から段階(cc)を繰り返す段階(dd)と、段階(t)を終了する段階(ee)とを含む。
【0023】
上述した方法によると、トランスコーディング要求はさらに、適応出力メディアの対象受信者の特性を定義するデスティネーションプロフィールを含み、段階(j)は、付加されたトランスコーディング処理、および、付加されたトランスコーディング処理を含む再帰的に付加されるサブパイプラインを含むメイントランスコーディングパイプラインへと実行を移行させる段階(ff)と、深さ優先順序でトランスコーディング処理を実行して、入力ドキュメントのコンポーネントを出力ドキュメントのコンポーネントへと処理する段階(gg)と、ディレクタモジュールを呼び出して、スクライバモジュール群から書込スクライバモジュールを特定する段階(hh)と、ディレクタモジュールが、スクライバモジュール群の全てのスクライバモジュールのリストを取得する段階(ii)と、ディレクタモジュールは、書込クエリで、全てのスクライバモジュールのリストの各スクライバに問い合わせを行う段階(jj)と、ディレクタモジュールが、書込スクライバモジュールとして、クエリに対して肯定的な応答を返すスクライバモジュールを選択する段階(kk)と、書込スクライバモジュールが、デスティネーションプロフィールに指定されているフォーマットで、出力ドキュメントを、トランスコーダ出力データセットの適応出力メディアへと変換する段階(ll)とを有する。
【0024】
便宜上、段階(j)は、実行中に発行されるメッセージ、エラー、および警告を含むトランスコーディング結果を生成する段階を有する。
【0025】
本発明のさらに別の側面によると、コンピュータ読出可能格納媒体に格納されているコンピュータ読出可能命令を備え、且つ、入力メディアを適応出力メディアへとトランスコードするトランスコーディングパイプラインモジュールが提供される。当該トランスコーディングパイプラインは、それぞれが入力メディアのコンポーネントを適応出力メディアのコンポーネントへとトランスコードする1以上のトランスコーディング処理モジュールと、それぞれがトランスコーディング処理モジュールのうち少なくとも1つを有するゼロ以上のサブパイプラインモジュールとが所与の順序に沿って並べられたリストを備える。
また、上述のトランスコーディングパイプラインモジュールを作成および実行するためのモジュラーシステムが提供される。当該システムは、トランスコーディングパイプラインモジュールを動的に構築する複数のソフトウェアモジュールを有する第1のソフトウェアモジュール群であって、1以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有する第1のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、1以上のトランスコーディングオブジェクトモジュールを含む複数のソフトウェアモジュールを有する第2のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
【0026】
上述したシステムによると、1以上のビルダモジュールは、トランスコーディング要求の一部を処理するサブパイプラインモジュールを作成して、サブパイプラインモジュールをトランスコーディングパイプラインモジュールへと付加するビルダモジュールを少なくとも1つ含む。便宜上、トランスコーディングオブジェクトモジュールのうち少なくとも1つは、トランスコーディング処理を実行する。
【0027】
本発明のさらに別の側面によると、入力メディアを含むマルチメディアメッセージを適応出力メディアを含む適応メッセージへと適応化するコンピュータシステムが提供される。当該コンピュータシステムは、トランスコーディング要求を受信するポートを有するコンピュータと、コンピュータ読出可能命令を含むソフトウェアモジュールを格納するメモリとを備え、マルチメディアメッセージおよびデスティネーションプロフィールを含むトランスコーディング要求を処理する。デスティネーションプロフィールは、適応メッセージの制限および特性を記述している。当該ソフトウェアモジュールは、トランスコーディングパイプラインモジュールを動的に構築する複数のソフトウェアモジュールを有する第1のソフトウェアモジュール群であって、1以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有する第1のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、1以上のトランスコーディングオブジェクトモジュールを含む複数のソフトウェアモジュールを有する第2のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、前記トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
上述したコンピュータシステムにおいて、1以上のビルダモジュールはそれぞれ、当該ビルダモジュールの機能を示すビルダクエリ関数モジュールを有し、ディレクタモジュールは、クエリ関数モジュールと通信して、ビルダモジュールの機能を決定し、当該機能とトランスコーディング要求に含まれる情報とを比較するビルダ選択モジュールを有する。
【0028】
さらに、実行されると上述した方法の各段階を行うコンピュータ読出可能命令を備えるコンピュータ読出可能格納媒体が提供される。
【図面の簡単な説明】
【0029】
以下の部分では、添付図面を参照しつつ一例として本発明の実施形態を説明する。図面は以下の通りである。
【図1】先行技術に係るMMSシステムアーキテクチャ100の一例を示す図である。
【図2】本発明の実施形態に係る適応化アーキテクチャ200を示す図である。
【図3】図2の適応化アーキテクチャ200のトランスコーダソフトウェアシステム204に含まれるソフトウェアモジュールを示すブロック図300である。
【図4】図3のトランスコーダソフトウェアシステム204が実行する段階を示す最上位の実行フローチャート400である。
【図5】図4の最上位の実行フローチャート400に示す段階408の詳細を示す、トランスコードプログラム502の実行フローチャート500である。
【図6】図5の実行フローチャート500の段階506「『復号プラグイン』を実行」の詳細を示すフローチャート600である。
【図7】図5の実行フローチャート500の段階508「『パイプライン作成プラグイン』を実行」の詳細を示すフローチャート700である。
【図8】図7の実行フローチャート700の段階716「トランスコーディングパイプラインをビルドするべくビルダを実行」の詳細を示すフローチャート800である。
【図9】図5の段階508でパイプライン作成プラグイン520によって作成されたメインパイプライン528のインスタンスの例である「単純メッセージパイプライン」900を示す図である。
【図10】図5の段階508でパイプライン作成プラグイン520によって作成されたメインパイプライン528のインスタンスの別の例である「非最適化メッセージパイプライン」1000を示す図である。
【図11】図5の段階510で最適化プラグイン522によって「非最適化メッセージパイプライン」1000を最適化した結果得られる「最適化メッセージパイプライン」1100を示す図である。
【図12】図5のパイプライン実行プラグイン524の段階512「『パイプライン実行プラグイン』を実行」の詳細を示すフローチャートである。
【発明を実施するための形態】
【0030】
本発明の実施形態は、トランスコーディング要求を受け取り、当該トランスコーディング要求で要求または示唆される処理を実行することによって当該トランスコーディング要求に含まれるデータを処理し、トランスコーディング出力を生成するためのトランスコーディングパイプラインを、一連のプログラムおよび処理から動的に構築する機能を持つ自由度の高いソフトウェアシステムを提供することを目的とする。
【0031】
図2は、本発明の実施形態に係る適応化アーキテクチャ200を示す図である。適応化アーキテクチャ200は、トランスコーディング要求202、モジュラートランスコーダソフトウェアシステム204、トランスコーダ出力データセット206、および、1以上の任意の動的ロード共有メモリ208を備える。
【0032】
トランスコーディング要求202は、1以上の変換コマンド210、1以上の入力メディア212、および、デスティネーションプロフィール214を有するデータセットである。トランスコーディング要求202は、トランスコーダソフトウェアシステム204に入力される。トランスコーダソフトウェアシステム204は、トランスコーディングパイプライン216、および、一群のソフトウェアモジュールおよびオブジェクト222を有する。トランスコーディングパイプライン216は、一連のトランスコーディング処理218および0以上のサブパイプライン220を含み、サブパイプライン220は、トランスコーディングパイプライン216と同じ性質を持つ。トランスコーダソフトウェアシステム204は、トランスコーディング要求202を入力として用いて、動的にトランスコーディングパイプライン216を構築して、トランスコーダ出力データセット206を生成する。トランスコーダ出力データセット206は、0以上のフィルタリング済出力メディア224、0以上の適応出力メディア226、トランスコーディング結果228、および、特性化結果230を含むとしてよい。
【0033】
トランスコーダソフトウェアシステム204は、プロセッサ(不図示)を含むコンピュータと、ソフトウェアモジュールとを有する。ソフトウェアモジュールは、例えば、メモリ、CD−ROM、DVD等のコンピュータ読出可能媒体に格納されているコンピュータ読出可能命令を含み、当該コンピュータ読出可能命令は、プロセッサで処理されると、以下に詳述するような当該モジュールのさまざまな処理を実行する。本願では、トランスコーディングパイプライン216をトランスコーディングパイプラインモジュール216、トランスコーディング処理218をトランスコーディング処理モジュール218、サブパイプライン220をサブパイプラインモジュール220、トランスコーダ出力データセット206をトランスコーダ出力データセットモジュール206、トランスコーディング結果228はトランスコーディング結果モジュール228、特性化結果230を特性化結果モジュール230と呼ぶこともある。
【0034】
適応化アーキテクチャ200は、任意のプロフィールに応じて、入力メディアを出力メディアに適応させるために通常は利用されるが、当該プロフィール、つまりデスティネーションプロフィール214に応じた特徴を持つデスティネーションデバイスに送信されるべく、入力マルチメディアメッセージを適応化させる際に利用されるとしてもよい。このように利用される場合、入力マルチメディアメッセージは入力メディア212で、変換コマンド210は「トランスコード」の値を持ち、適応出力メディア226は、トランスコーディング要求202のデスティネーションプロフィール214に応じた適応メッセージ232としてフォーマットされる。
【0035】
本発明に係るトランスコーダソフトウェアシステム204は、MMSシステムにおいて適応化を実行するべく適応化エンジン108(図1を参照のこと)にインストールするとしてもよいが、あるメディアフォーマットから別のメディアフォーマットへとメディアの適応化またはトランスコーディングを実行する任意のシステムにおいて利用されることが好ましいとしてもよい。
【0036】
一般的に言うと、適応化アーキテクチャ200のトランスコーダソフトウェアシステム204は、トランスコーディング要求202を受け取り、当該要求の内容を解釈してトランスコーディングパイプライン216のインスタンスを動的に構築するように設計されている。トランスコーディングパイプライン216は、複数のトランスコーディング処理218が所定の順序通りに並べられているリストまたはツリーである。
【0037】
トランスコーディングパイプライン216は、完成すると最適化されるとしてよい。例えば、トランスコーディング処理218のツリーは、最適化された後のトランスコーディングパイプライン216を、入力メディア212をフィルタリング済出力メディアおよび/または適応出力メディア(参照番号はそれぞれ、224および226)へと適応化させる際に、より効率的に実行できるように、所定順序に沿った単純なリストに単純化されるとしてよく、さらに、冗長なトランスコーディング処理218は組み合わせたり、または除去するとしてよい。最適化されたトランスコーディングパイプライン216を実行するとさらに、他の出力、例えば、処理中に発行されたメッセージ、エラー、および警告を含むトランスコーディング結果228、および、結果として得られたメディア(つまり、適応出力メディア226およびフィルタリング済出力メディア224)の特性に関する情報を含む特性化結果230が得られるとしてよい。特性化結果230を生成するか否かは設定可能であり、特性化結果230はさらに、所与の適応化要求に関連する任意のメディア、つまり、任意の入力メディアおよび任意の出力メディアの特性を含むとしてよい。尚、フィルタリング済出力メディア224は、変更することなくトランスコーダソフトウェアシステム204を通過することがトランスコーディング要求202で許可されている入力メディア212を含む。
【0038】
図2のトランスコーディング要求202は、メイン要求(または「マスタ入力要求」)であり、同じフォーマットのサブ要求に小さく分割するとしてよい。サブ要求を形成するのは、マスタ要求が記述しているタスクを達成するために必要な作業を分割するためである。一般的に、各サブ要求が含む変換コマンドは1つのみである。各サブ要求が含む入力メディアおよびデスティネーションプロフィールの数は任意としてよい。このデスティネーションプロフィールは、元々のデスティネーションプロフィール214の複製であってもよいし、サブプロフィールであってもよい。デスティネーションプロフィール214は、メッセージトランスコーディングの目的の特性を示すメッセージトランスコーディングプロフィールであってよいが、一群の単一メディアプロフィールを表すとしてもよい。一群の単一メディアプロフィールは、サブ要求を作成する際に選択されるサブプロフィールを表す。メイン要求およびサブ要求は、メディアオブジェクト(入力メディア212、フィルタリング済出力メディア224、適応出力メディア226)と、トランスコーダソフトウェアシステム204のソフトウェアコンポーネントとの間の明確なインターフェースとしてアーキテクチャ全体で利用され、トランスコーディングパイプライン216のトランスコーディング処理218を実行することによって最終的に達成されるべき作業を説明するために必要な情報を全て含む。
【0039】
トランスコーディング要求202の変換コマンド210は、入力メディア212に対して実行されるべき処理を特定しており、適応出力メディアおよびフィルタリング済出力メディア(226および224)の目標特性および必要な出力メディアフォーマットは、デスティネーションプロフィール214で特定されている。一般的に、トランスコーディング要求202の各変換コマンド210は、「トランスコード」、「内容をフィルタリング」、または、「特性化」のうちいずれかであってよく、入力メディア212の一部または全てを参照するとしてよい。変換コマンドは、以下のような構造を持つ。
コマンドの識別子
コマンドの対象となる一群のメディアへの参照
コマンドについてのオプションを示す引数を提供する一群の特性/値のペア
【0040】
変換コマンドの構造の一部として、コマンドの対象となるメディアが特定される。本例では、マスタ要求、つまりトランスコーディング要求202が、一群の入力メディア、つまり入力メディア212および1以上の変換コマンド210を特定する。いずれの変換コマンド210も、構造内でのみ、マスタ要求の一部であるメディアを参照することができる。
【0041】
変換コマンド210について他にバリエーションを定義するとしてもよい。変換コマンド210のバリエーションをサポートするために必要な機能を持つモジュールを追加することによって、トランスコーダソフトウェアシステム204の構造でサポートされるとしてよい。トランスコーダソフトウェアシステム204は、非常に自由度が高く、機能を容易に追加できるように構成されている。この点については、本発明の実施形態を説明する上で明らかにしていく。
【0042】
以下の部分では、トランスコーダソフトウェアシステム204でトランスコーディング要求202に含まれる情報を処理することでトランスコーディングパイプライン216を動的に作成するプロセスをより詳細に説明する。
【0043】
トランスコーディング要求202が単純な(且つ、最も一般的な)構成の場合、入力メディア212およびデスティネーションプロフィール214を引数として持つ命令と考えられ得る変換コマンド210は1つのみである。例えば、変換コマンド210「トランスコード」は、デスティネーションプロフィール214(デスティネーションが電子メールを受信する際には、例えば、最大画像サイズに制限されている等、制限があることを示すとしてよい)に応じて入力メディア212(例えば、MMSメッセージ)をトランスコードするように、解釈される。
【0044】
トランスコーディング要求202は通常、入力メディアのうち1以上(つまり、入力メディア212)と、出力メディアのうち1以上(つまり、適応出力メディア226およびフィルタリング済出力メディア224)との間の関係を指し示す。しかし、後続の処理によっては、出力メディアが後続のトランスコーディング要求202で入力メディアとして利用されるような、再帰的関係が定められている場合がある。1つの要求(マスタ要求またはそのサブ要求のうち1つ)に記述されている作業を完了させるためには複数の段階に分けて実行することが必要な場合が多い。「中間出力」メディアが作成される場合が多い。「中間出力」メディアは、1つの処理を実行した結果作成されるメディアである。後続の処理で入力として利用されるべきものである。「中間出力」メディアが最終的な適応出力メディア226に含まれることは絶対にない。「中間出力」メディアは、処理対象のメディアの一時的な中間状態を表している。これは、上述した特許出願、第12/118,690号(出願日:2008年5月10日、発明の名称:「ビデオ適応化へのマルチメディア・メッセージング・サービス(MMS)の方法およびシステム」)で詳細な例を挙げて説明されている。このような自由度があることによって、入力メッセージを1つのメディアビデオファイルである出力に変換するという複雑なトランスコーディングタスクを実行することが可能となる。このような変換を実現するためには、最終目標である出力メディアに到達するまでに多数の「中間出力」メディアを作成する必要がある場合もある。尚、出力メディアは、入力メッセージの内容を所望の出力フォーマットで表現するビデオファイルである。
【0045】
図3は、適応化アーキテクチャ200のトランスコーダソフトウェアシステム204に含まれるソフトウェアモジュール、つまり、一群のソフトウェアモジュールおよびオブジェクト222を示すブロック図300である。一群のソフトウェアモジュールおよびオブジェクト222は以下を有する。
制御プログラムモジュール304
ディレクタモジュール306
プラグインマネージャ308
複数のビルダ312を含むビルダ群310
複数のスクライバ316を含むスクライバ群314
複数のトランスコーディングプラグイン320を含むトランスコーディングプラグイン群318
複数のプラグインプログラム324を含むプラグインプログラム群322
トランスコーディングオブジェクト328のトランスコーディングオブジェクト群326
ドキュメントトランスコーダ332のドキュメントトランスコーダ群330
【0046】
一群のソフトウェアモジュールおよびオブジェクト222は、コンピュータによって処理されるべくコンピュータ読出可能媒体、例えば、メモリ、CD−ROM、DVD等に格納されているコンピュータ読出可能命令を含むソフトウェアモジュールを含む。この場合、制御プログラム304は制御プログラムモジュール304、ディレクタ306はディレクタモジュール306、プラグインマネージャ308はプラグインマネージャモジュール308、ビルダ312はビルダモジュール312、スクライバ316はスクライバモジュール316、トランスコーディングプラグイン320はトランスコーディングプラグインモジュール320、プラグインプログラム324はプラグインプログラムモジュール324、トランスコーディングオブジェクト328はトランスコーディングオブジェクトモジュール328、ドキュメントトランスコーダ332はドキュメントトランスコーダモジュール332とも呼ばれる。
【0047】
尚、本明細書において、「トランスコーディングオブジェクト」という用語は、群またはライブラリにあるコミットしていないソフトウェアオブジェクトを意味し、「トランスコーディング処理」という用語は、トランスコーディングパイプラインに付加されているオブジェクトを意味する。
【0048】
一群のソフトウェアモジュールおよびオブジェクト222は、2つの別個のソフトウェアモジュール群を含む。第1の群334は、トランスコーディング要求202を分析して、第2の群336から選択したオブジェクトを付加することによってトランスコーディングパイプライン216を組立てる機能を持つ。第2の群336は、トランスコーディングオブジェクト群326、ドキュメントトランスコーダ群330、および、動的ロード共有メモリ208にあるその他のトランスコーディングオブジェクトを含む。第1の群は、階層構造になったソフトウェアモジュール群であるビルダ群310、スクライバ群314、トランスコーディングプラグイン群318、およびプラグインプログラム群322を含み、これらはすべて、ディレクタ306の制御の元、プラグインマネージャ308によって管理される。
【0049】
ブロック図300にはさらに、プラグインマネージャ308に接続されている動的ロード共有メモリ208が図示されている。動的ロード共有メモリ208およびプラグインマネージャ308は共に、コンピュータによって読み出されて処理されるべくコンピュータ読出可能格納媒体、例えば、メモリ、CD−ROM、DVD等に格納されているコンピュータ読出可能命令を含む。
【0050】
制御プログラム304は、トランスコーダソフトウェアシステム204全体を制御する。例えば、トランスコーダソフトウェアシステム204がインストールされている適応化エンジン108の入出力システムから、トランスコーディング要求202を受信する手段を含む。トランスコーディング要求202を分析して、トランスコーダソフトウェアシステム204の機能を判断し、プラグインプログラム324のうち1つ、つまり、トランスコーディング要求202の各変換コマンド210と対応付けられる特定のプラグインプログラム324を選択する。
【0051】
トランスコーディング要求202の変換コマンド210によって呼び出されるプラグインプログラム324は、サービス提供対象となる変換コマンド210に応じてカスタマイズされるとしてよい。本発明の実施形態の範囲では、3つの変換コマンド210「トランスコード」、「内容をフィルタリング」、および「特性化」に対応して3つの異なるプラグインプログラム324が定義されている。プラグインプログラム324は、非常に単純なテキスト言語で書かれており、各プラグインプログラム324は、トランスコーディングプラグイン320のうち1つの名称をPとすると「Pを実行」という形式のステートメントから成るステートメント列を含む。プラグインプログラム324はさらに、「ループ(loop)」および「移動(goto)」等の制御ステートメントを含むとしてよい。トランスコーダソフトウェアシステム204の機能を拡張することと、追加の変換コマンド210に対応することとを目的として、新たなプラグインプログラム324を設計するが、これは容易に実現され得る。
【0052】
トランスコーディングプラグイン320は、トランスコーディングパイプライン216の一側面を処理するべく設計されているソフトウェアモジュールである。プラグインプログラム324から呼び出された一連のトランスコーディングプラグイン320によってプラグインプログラム324のカスタマイズが可能となり、その後の(おそらくは異なる)パイプライン処理タスクのために新しいプラグインプログラム324を容易に作成することができるようになる。現在定義されているトランスコーディングプラグイン320には、「復号プラグイン」、「パイプライン作成プラグイン」、「最適化プラグイン」、「パイプライン実行プラグイン」、「特性化プラグイン」、および、「セッション設定解除プラグイン」が含まれる。
【0053】
少数のトランスコーディングプラグイン320はカスタマイズされたプログラムを含むが、大半のトランスコーディングプラグイン320は、メディアの実際の処理は、一群のソフトウェアモジュールおよびオブジェクト222のうち他のモジュラーコンポーネントおよび再利用可能コンポーネントにさせる。トランスコーディング要求202を処理するためのソフトウェアコンポーネントを正確に動的に選択する方法は、本発明の実施形態の革新的な概念の1つである。
【0054】
プラグインマネージャ308は、ビルダ群310、スクライバ群314、トランスコーディングプラグイン群318、およびプラグインプログラム群322を格納する格納部である。また、追加のビルダ312、トランスコーディングプラグイン320、およびトランスコーディングオブジェクト328を含んでいる、動的ロード共有メモリ208への接続も行う。プラグインマネージャ308は、ディレクタ306によるこれらのソフトウェアモジュールおよびオブジェクトへのアクセスを管理する。
【0055】
ディレクタ306は、ビルダ群310およびスクライバ群314を管理する。ディレクタ306は、プラグインプログラム324のうち1つによって呼び出されて、特定のスクライバ機能を満たす1つのスクライバ316をスクライバ群314から選択するスクライバ選択モジュール306aを含む。同様に、ディレクタ306は、プラグインプログラム324のうち別の1つによって呼び出されて、特定のビルダ機能を満たす1つのビルダ312をビルダ群310から選択するビルダ選択モジュール306bを含む。
【0056】
ディレクタ306のビルダ選択モジュール306bはさらに、ビルダ312のうち1つによって呼び出されて、別の特定のビルダ機能を満たす別の1つのビルダ312をビルダ群310から選択するとしてもよい。例えば、ある1つのビルダ312は、複雑なジョブを行う機能を持つものとして指定されているが、この複雑なジョブを行うためには、一部を下請けに出して別のビルダ312に行わせる必要がある。
【0057】
ディレクタ306は、選択すべきスクライバまたはビルダを検索する際に、プラグインマネージャ308を介して、動的ロード共有メモリ208に設けられている外部のスクライバおよびビルダにもアクセスする。
【0058】
スクライバ316は、ドキュメント(「ドキュメント」の定義は以下を参照のこと)としてメディアオブジェクトの読出、復号、符号化、スケーリング、および書込のいずれかを行う機能を持つ独自のソフトウェアオブジェクトである。スクライバ316はさらに、Xが処理機能を表す場合に「(X)はサポートされているか」という形式で呼び出されるスクライバクエリ関数モジュール316aを含む。スクライバクエリ関数は、スクライバが「X」をサポートしている場合には「TRUE」と返し、「X」をサポートしていなければ「FALSE」を返す。
【0059】
ディレクタ306は、処理「X」を実行する機能を持つスクライバを見つけるよう要求されると、プラグインマネージャ308から全スクライバリスト(つまり、スクライバ群314、および、動的ロード共有メモリ208にあるスクライバのリスト)を取得して、「(X)はサポートされているか」というスクライバ質問関数でリストに記載されている各スクライバを呼び出して、「TRUE」と返答する最初のスクライバを選択する。条件を満たすスクライバが見つからない場合はエラーとなり、エラーハンドリングに引き継がれる(以下を参照のこと)。
【0060】
スクライバ316のうち1つが、例えば、トランスコーディング要求202から1つのMMSメディアオブジェクト(入力メディア212)を全て読み出して、そのコンポーネント(ヘッダ、各メディア添付ファイル)およびメディアオブジェクトの構造を記述するレコードを、「ドキュメント」として適応化エンジン108のメモリに格納する機能を持つ「読出MMSスクライバ」であるとしてよい。
【0061】
簡単な実装例として全スクライバリストを用いて検索を行うとしてもよいが、他のより高効率の検索アルゴリズムを利用するとしてもよい。
【0062】
各スクライバの特定の機能は当該スクライバに組み込まれているので、スクライバ質問関数に対して「TRUE」と返答することができ、その後に呼び出された場合に必要な処理を実行することができる。一般的に、スクライバ316は、例えば、完全MMSメッセージ等の複雑なメディアオブジェクトを含むメディアオブジェクトのローカルなメモリ内表現であるドキュメントに対して「作業」を行う機能を持つ。ここで、「作業」とは、読出、復号、符号化、スケーリング、書込を含む。スクライバは、自己完結型オブジェクトである。各スクライバは、特定の種類のメディアに対して作業を行う機能を持つ(読出、書込等)。スクライバが実装する機能は、スクライバ自体の一部として符号化されているか、または、動的ロード共有メモリとの協働が必要となる場合もある。ある特定のスクライバは、物理的な入力を読み出して、それからメモリ表現を作成するとしてよい。別のスクライバは、メモリ表現から物理的な出力表現を作成するとしてよい。物理的な入力メディアまたは出力メディアとは、実際のメディアファイルを意味する。一方、メモリ表現とは、メモリ構造に準拠するように解析および処理されたファイルを意味する。
【0063】
トランスコーディング処理218(図2)は、トランスコーディングパイプライン216に付加されたトランスコーディングオブジェクト328であり、トランスコーディング要求202に含まれている情報に対して処理を実行することによって特定のタスクを実行する。トランスコーディング処理218は、トランスコーディングパイプラインに付加される際に、トランスコーディング要求202またはサブ要求から導き出される引数が与えられる。
【0064】
ビルダ312は、トランスコーディング処理218またはサブパイプライン220として、トランスコーディングパイプライン216に対して、どのように特定のトランスコーディングオブジェクト328を選択するかに関する情報を含む特別なソフトウェアオブジェクトである。ビルダ312は、要求を分析して当該要求を満たす情報を持っているか否かを判断する機能を持ち、これに従って特定のトランスコーディングオブジェクト328を選択する。
【0065】
ビルダ312は、スクライバ316と同様に、Xが処理機能を表す場合に「(X)はサポートされているか」という形式で呼び出されるビルダクエリ関数モジュール312aを有する。ビルダ質問関数は、ビルダが「X」をサポートしている場合には「TRUE」と返し、「X」をサポートしていなければ「FALSE」を返す。
【0066】
ビルダクエリ関数モジュール312aが「(X)はサポートされているか」という呼び出しによって問い合わせを受けると、ビルダは引数で伝えられる要求の詳細を調査する。ビルダは、その要求を処理すべきか否かを判断するべく、特定の要求特性を探す。探す対象の特性は、一意的なもので、別のビルダによって複製されることは決してない。各ビルダは、非常に具体的な目的を持って作成されている。ビルダ群全体は、「互いに基づいて構築する」という目的のもとで作成されている。このため、それぞれのビルダが対処する特定の問題については、そのほかのビルダは対処しないように、各ビルダは実装される。例えば、ビルダのうち1つは、全ての種類の画像を処理するとしてよい。別のビルダは、テキストメディアのみを処理する。さらに別のビルダは、全ての種類のオーディオ/ビデオ/アニメーションを処理する。以下に記載する説明では、どのようにMMSビルダが別のビルダの情報に基づいてビルドを行って、MMSが含む添付ファイルに必要なパイプラインの一部分を作成するかの良例を記載する。MMSビルダは、出力MMSの作成、エラーの処理、および、出力MMSが(もし設定されていれば)最大出力ファイルサイズを遵守するようにする処理等その他のサポート処理のために必要な処理を追加する。処理は、特定の問題を物理的に解決するべく実装される。例えば、入力画像を出力画像にトランスコードする処理を実装するとしてよい。処理は、特定のビルダによって利用されるべく実装される。上述の画像トランスコード処理は、画像ビルダによって利用されるべく実装される。
【0067】
ビルダ312はさらに、再帰的に動作することができ、他のビルダ312によって処理されるべきサブ要求を生成することができる。例えば、特定のビルダ312のインスタンスである「メッセージビルダ」は、トランスコーディングパイプライン216の一例である「メッセージパイプライン」(またはメインパイプライン)を構築して、メッセージ内に含まれる各メディアについてのトランスコーディングパイプラインを生成することができる別のビルダ312を見つけるべくディレクタ306に対して問い合わせをする機能を持つ。「メッセージビルダ」は、サイズ変更が必要なビデオがメッセージに含まれている場合、「ビデオビルダ」を見つけるべくディレクタ306に問い合わせを行う。「ビデオビルダ」は、ビルダ312の別のインスタンスで、ビデオのサイズ変更に特化した処理を含む「ビデオパイプライン」(トランスコーディングパイプライン216の一例)を生成することができる。そしてこの「ビデオパイプライン」が、サブパイプライン220として、「メッセージパイプライン」(または、メインパイプライン)に追加される。
【0068】
ディレクタ306は、処理「X」を実行する機能を持つビルダを見つけるように要求されると、プラグインマネージャ308から、全ビルダリスト(つまり、ビルダ群310、および、動的ロード共有ライブラリ208にあるビルダ)を取得して、「(X)はサポートされているか」というビルダクエリ関数で各ビルダ312を呼び出し、「TRUE」と返答するビルダ312を選択する。
【0069】
特定の処理をサポートする各ビルダ312の機能は、トランスコーディングオブジェクト328から特定のトランスコーディング処理218を作成する手段312cにある。つまり、要求された処理を実行することができるトランスコーディング処理218は究極的には、ビルダがプログラミングにより選択するトランスコーディングオブジェクト328にある。この「情報」はビルダに組み込まれていて、ビルダは、この「情報」によって、ビルダクエリ関数に対して「TRUE」と返答して、実行されるべく呼び出されると要求された処理を実行する(つまり、対応するトランスコーディングオブジェクト328をトランスコーディング処理218またはサブパイプラインとしてトランスコーディングパイプライン216に付加する)ことができる。ビルダは、実行されるべく呼び出されると、単にトランスコーディングパイプライン216の終端に適切なトランスコーディング処理218を付加するとしてよい。複数のサブ処理に分割されるようなより複雑な処理を実行するべく呼び出されると、これらのサブ処理はそれぞれ他のビルダが引き受けるとしてよい。このため、本発明の実施形態によると、ビルダはより複雑な(合成)処理を実行するべく呼び出されると、単にメインパイプラインまたはサブパイプラインを作成して、サブビルダ選択モジュール312bを用いてディレクタ306のビルダ選択モジュール306bを呼び出して他のビルダを見つけるので、多くの処理の組み合わせに対応するビルダを用意する必要はない。そして、他のビルダはそれぞれ、適切なトランスコーディング処理218をメインパイプラインまたはサブパイプラインの終端に付加する。
【0070】
言い換えると、一連のビルダは以下のような流れで選択される。MMSビルダが、所与の入力MMSが添付ファイルを含むことを認識するとする。すると、入力された各添付ファイルを検討して、出力用の添付ファイルを作成し、作成した新しいサブ要求に両方の添付ファイルを付加する。添付ファイルは、例えば、画像添付ファイルであってよい。MMSビルダは、サブ要求にMMSプロフィールを付加する。そして、当該サブ要求で、ディレクタを呼び出す。最適プロフィールビルダは、当該要求がMMSメッセージを参照していることを認識する。そして、責任の一環として、メッセージプロフィールが参照している一連のプロフィールに基づき、画像プロフィールが新しい要求に適用されるべきものであると判断する。そして、MMSプロフィールを画像プロフィールに変更する。そして、この種類の要求に対処する特定のビルダを見つけるべく、ディレクタを呼び出す。ディレクタは、ビルダ群に対して問い合わせを行い、このビルダ群のうち画像ビルダが当該要求は画像トランスコーディング要求であると判断する。画像ビルダは、当該要求の特性(例えば、入力メディアが画像であり、プロフィールが画像生成を意味していること)を確認することによって、当該要求が自分が責任を持っている種類の要求であると認識する。そして、画像ビルダは、新しい要求のために画像トランスコーディング処理を作成して、戻す。最適プロフィールビルダは、ディレクタによる調査結果が成功であり、成功が返ってきたことを認識する。そして、MMSビルダは、実行したディレクタの呼び出しが成功であることを認識する。ディレクタに対して、画像トランスコーディング処理を取得するべく問い合わせを行い、当該画像トランスコーディング処理を構築中のパイプラインに付加する。
【0071】
ドキュメントトランスコーダ332は、一群のソフトウェアモジュールおよびオブジェクト222に含まれるソフトウェアモジュールで、あるドキュメントを別のドキュメントに、例えば、電子メールドキュメントをMMSドキュメントに変換することができる。ドキュメントトランスコーダ332は、特定のフォーマット表現を変換する際にトランスコーディング処理218が利用し得る関数を表す。ドキュメントトランスコーダ群330は、新しいドキュメント構造に変換する必要がある場合にトランスコーディング処理218がアクセスする「ツールボックス」として認識されるとしてよい。
【0072】
ドキュメントトランスコーダ332は、入力メモリ表現から出力メモリ表現を作成するという特定の機能を持つ。入力メモリ表現および出力メモリ表現は、例えば、MMSからMMSのように同じ種類であってもよいし、または、例えば、3GPP表現をベーシックOMA表現へと変換するというように異なる種類であってもよい。このため、スクライバ316は、物理的リソースからメモリドキュメントを作成するか、または、メモリドキュメントから物理的出力を作成するが、一方ドキュメントトランスコーダ330は、あるメモリドキュメント構造を別のメモリドキュメント構造に適応させる。
【0073】
ドキュメントトランスコーダ332は、スクライバおよびビルダと同様に、「(X)はサポートされているか」という関数による問い合わせを受け、あるドキュメント構造を別のドキュメント構造へと変換する要求を満足させる最良のドキュメントトランスコーダ332を決定するとしてよい。例えば、あるドキュメントトランスコーダ332は、3GPP表現をベーシックOMA表現へと変換するとしてよい。入力ドキュメント構造が3GPP表現であって、所望の出力ドキュメント構造がベーシックOMA表現であれば、このドキュメントトランスコーダ332が選択される。利用可能なドキュメントトランスコーダ332のリストは、プラグイン(共有ライブラリ)によって拡張することができる。
【0074】
さまざまな構成ブロックの機能は、以下のように要約され得る。
【0075】
トランスコーディングオブジェクト328は、問題を物理的に解決するための処理を実行する。例えば、入力画像を出力画像にトランスコードする。ビルダ312は、責任を持つ問題の一部に対処するためにどの処理が必要であるか認識している。この結果、どの処理を必要とするか正確に把握しているビルダによって、特定の処理が選択される。
【0076】
スクライバ316の機能の1つに、物理的ソースを読み出した結果に基づいてメモリ表現を生成する機能がある。別のスクライバは、メモリ表現から物理的表現を作成するとしてよい。スクライバが作成するメモリ表現は、「ドキュメント」である。例えば、入力MMSが読み出されると、メモリ「MMSドキュメント」が作成される。スクライバは、物理的フォーマットとメモリ表現との間の橋渡しを行う。スクライバは、ディレクタ306から「(X)はサポートされているか」方式に従った問い合わせを受け、実行する必要がある作業に対して正しいスクライバを見つける。所与の要求について、正しいスクライバのみが当該要求に対応できることを「認識している」。
【0077】
ドキュメントトランスコーダ332は、「ドキュメント」を適応させるべく構成されている。ドキュメントトランスコーダ332は、入力ドキュメントに基づき出力ドキュメントを作成する。入力および出力は、同じ種類であってもよいし、または、異なるフォーマットであってもよい。ドキュメントトランスコーダ332は常に、スクライバ316が作成したドキュメントを、入力として利用する。ドキュメントトランスコーダ332は、メディアのメモリ表現である「ドキュメント」のみを作成するので、「ドキュメント」間の橋渡しを行う。ドキュメントトランスコーダ332は、スクライバと同様に、所与のタスクを実行する正しいドキュメントトランスコーダ332を見つけるべく、「(X)はサポートされているか」方式に応じたクエリをディレクタ306から受け取るとしてよい。
【0078】
ビルダ312は、トランスコーディングオブジェクト328であるトランスコーディング処理218から成るパイプラインを構築する。ビルダ312は、パイプラインの作成においてトランスコーディングオブジェクト128を利用して、入力ドキュメントに基づき出力ドキュメントを作成するべくドキュメントトランスコーダ332を利用する。ビルダは、各ビルダが引数として受け取るトランスコーディング要求またはサブ要求を満たすために必要な処理から成るパイプラインを作成する。
【0079】
<トランスコーディング要求202の実行>
トランスコーダソフトウェアシステム204の各ソフトウェアモジュールを図3を参照しつつ説明した。以下では、トランスコーディング処理を全般的に説明する。
【0080】
図4は、任意のトランスコーディング要求202を満たして、トランスコーダ出力データセット206を生成するべくトランスコーダソフトウェアシステム204が実行する段階を含む、最上位の実行フローチャート400を示す図である。以下の段階が含まれる。
402 「トランスコーディング要求を受信」
404 「最初の変換コマンドを読出」
406 「対応付けられているプラグインプログラムを選択」
408 「選択されたプラグインプログラムを実行」
410 「最後の変換コマンドか」
412 「次の変換コマンドを読出」
414 「出力データセットを供給」
【0081】
段階402「トランスコーディング要求を受信」において、トランスコーディング要求202は、コンピュータ(例えば、適応化エンジン108を収納しているコンピュータ)のI/Oポートを介して、トランスコーダソフトウェアシステム204全体を制御する制御プログラム304によって、受信される。
【0082】
段階404「最初の変換コマンドを読出」において、制御プログラム304は、トランスコーディング要求202の最初の変換コマンド210を読み出して、対応付けられているプラグインプログラム324を決定する。この最初の変換コマンド210は、この時点において、現在の変換コマンド(210)となる。
【0083】
段階406「対応付けられているプラグインプログラムを選択」において、制御プログラム304は、現在の変換コマンド(210)に対応付けられている選択されたプラグインプログラム(324)を選択する。
【0084】
段階408「選択されたプラグインプログラムを実行」において、選択されたプラグインプログラム(324)を実行する。この段階の具体例の詳細は、図5を参照しつつ後述する。選択されたプラグインプログラム(324)の各段階を実行する際に、トランスコーディング要求202は、トランスコーダ出力データセット206の一部または全体へと処理される。
【0085】
段階410「最後の変換コマンドか」において、制御プログラム304は、現在の変換コマンド(210)がトランスコーディング要求202に含まれる最後の変換コマンドか否か判断する。段階410でYESであれば、トランスコーダ出力データセット206が供給される(段階414)。NOであれば、段階412「次の変換コマンドを読出」で次の変換コマンド(210)を読み出して、現在の変換コマンド(210)として、実行ループは段階406「対応付けられているプラグインプログラムを選択」に戻る。
【0086】
段階414「出力データセットを供給」において、完成したトランスコーダ出力データセット206が、例えば、メモリに、または、コンピュータのI/Oポートを介して、ユーザに供給される。
【0087】
図5は、段階408「選択されたプラグインプログラムを実行」の詳細を示す、トランスコードプログラム502の実行フローチャート500を示す図である。トランスコードプログラム502は、図4の選択されたプラグインプログラム(324)の代表選択例であり、変換コマンド210「トランスコード」に対応する。以下の段階が含まれる。
504 「エラーが発生すると終了」
506 「『復号プラグイン』を実行」
508 「『パイプライン作成プラグイン』を実行」
510 「『最適化プラグイン』を実行」
512 「『パイプライン実行』を実行」
514 「『特性化プラグイン』を実行」
516 「『セッションの設定を解除』を実行」
【0088】
一連の段階504から516は、トランスコードプログラム502の実際のテキスト言語の実装と解釈されるとしてよく、簡潔であることが分かる。段階506から514はそれぞれ、トランスコーディングプラグイン320のうち対応する1つのトランスコーディングプラグイン320によって実行される。具体的には以下の通りである。
【0089】
段階506「『復号プラグイン』を実行」は、復号プラグイン518によって実行される。
【0090】
段階508「『パイプライン作成プラグイン』を実行」は、パイプライン作成プラグイン520によって実行される。
【0091】
段階510「『最適化プラグイン』を実行」は、最適化プラグイン522によって実行される。
【0092】
段階512「『パイプライン実行』を実行」は、パイプライン実行プラグイン524によって実行される。
【0093】
段階514「『特性化プラグイン』を実行」は、特性化プラグイン526によって実行される。
【0094】
図5にはさらに、トランスコードプログラム502が動作するきっかけとなる一時的データオブジェクトも示されている。
入力ドキュメント526
図2のトランスコーディングパイプライン216の一例であるメインパイプライン528
出力ドキュメント530
【0095】
段階504「エラーが発生すると終了」において、トランスコードプログラム502の例外処理が設定される。具体的には、「終了」ラベルが宣言され、「終了」ラベルよりも前の任意の段階において処理エラーが発生した場合には、実行が「終了」ラベルにジャンプするように設定される。図5に示すように、「終了」ラベルは、段階514「『特性化プラグイン』を実行」の開始時点に付加されている。このため、段階506から512の処理中にエラーが発生すれば、実行は即座に、間に介在する段階を飛び越えて、段階514にジャンプする。
【0096】
段階506「『復号プラグイン』を実行」において、復号プラグイン518が実行され、トランスコーディング要求202(図2)の入力メディア212を分析する。入力メディア212自体は、メディアコンポーネントを含むものであってもよいし、または、添付ファイルを含むとしてよく、それらはすべて抽出されて入力ドキュメント526に書き込まれる。
【0097】
図6は、段階506「『復号プラグイン』を実行」の詳細、具体的には、復号プラグイン518の実行を示すフローチャート600を示す図である。以下の段階が含まれる。
602 「読出スクライバを特定するべく復号プラグインがディレクタを呼び出す」
604 「全てのスクライバを取得するべくディレクタがプラグインマネージャを呼び出す」
606 「プラグインマネージャが全スクライバリストを返す」
608 「ディレクタが各スクライバに問い合わせ」
610 「ディレクタが読出スクライバを選択」
612 「ディレクタが読出スクライバを復号プラグインに返す」
614 「復号プラグインが読出スクライバを呼び出して実行」
616 「読出スクライバが入力メディアを読み出す」
【0098】
復号プラグイン518の目的は、例えばMMSメッセージであるトランスコーディング要求202(図2)の入力メディア212に含まれている全ての異なるメディア添付ファイルを抽出することである。この段階は、入力メディア212を、トランスコーディングが行われるべき入力の全範囲を記述する入力ドキュメント526に変換するために必要である。
【0099】
段階602「読出スクライバを特定するべく復号プラグインがディレクタを呼び出す」において、復号プラグイン518は、読出スクライバ618を特定するべくスクライバ要求をディレクタ306に渡す。読出スクライバ618は、読出スクライバモジュールとも呼ばれ、例えばMMSメッセージである入力メディア212、またより一般的にはフォーマット「X」の入力メディア212を読み出すことができる。
【0100】
段階604「全てのスクライバを取得するべくディレクタがプラグインマネージャを呼び出す」において、ディレクタ306は、全スクライバリストを取得するべくプラグインマネージャ308を呼び出す。つまり、スクライバ群314に含まれるスクライバ316および動的ロード共有メモリ208に含まれるスクライバのリストである。
【0101】
段階606「プラグインマネージャが全スクライバリストを返す」において、プラグインマネージャ308は、現在の全スクライバリストを返す。つまり、スクライバ群314に含まれるスクライバ316および動的ロード共有メモリ208に含まれるスクライバのリストである。尚、現在の全スクライバリストには、トランスコーダソフトウェアシステム204を更新した結果に応じてその時々に応じて追加されたスクライバが含まれるとしてよい。このため、トランスコーダソフトウェアシステム204が対応するフォーマットの範囲は拡大される。
【0102】
段階608「ディレクタが各スクライバに問い合わせ」において、ディレクタ306は現在の全スクライバリストに含まれる各スクライバを、「X」が処理機能を表す場合に「(X)はサポートされているか」という形式の「読出クエリ」で呼び出す。この場合、必要な処理能力「X」は、メディアファイル(入力メディア212)を読み出してドキュメントを生成する機能である。各スクライバは、スクライバクエリ関数で呼び出されると、入力メディアフォーマットを調査して(例えば、入力メディアの一部分を読み出して)このフォーマットが対応付けられているスクライバ処理でサポートされているか否か判断することによって、クエリを調査して要求されている処理を実行できるか否かを判断する。
【0103】
段階610「ディレクタが読出スクライバを選択」において、ディレクタ306は、現在の全スクライバリストのうち、スクライバクエリ関数に対して「TRUE」と返した最初のスクライバを選択し、読出スクライバ618とする。読出スクライバ618が見つかるものと仮定し、見つからない場合にはエラーとなり、図5に示すように、トランスコードプログラム502は終了ラベルがある段階514にジャンプする。
【0104】
段階612「ディレクタが読出スクライバを復号プラグインに返す」において、ディレクタ306は読出スクライバ618を復号プラグイン518に返す。
【0105】
段階614「復号プラグインが読出スクライバを呼び出して実行」において、復号プラグイン518は、入力メディア212を入力ドキュメント526に直接加工するべく、読出スクライバ618を呼び出す。
【0106】
段階616「読出スクライバが入力メディアを読み出す」において、読出スクライバ618は、入力メディア212を読み出して、入力メディア212のメディアコンポーネントを含む入力ドキュメント526を生成する。入力ドキュメントは、組み込まれた(添付された)メディアを含む入力メディア212の構造を記述する。
【0107】
入力メディア212が、MMSメッセージのように、メディアが含まれているコンテナメディアの場合、復号プラグイン518は、含まれているメディアそれぞれを読み出すべく再帰的に実行され、それぞれについて別個の入力ドキュメント526を作成するとしてよい。
【0108】
ここで、図5に示した次の段階の説明に戻す。
【0109】
段階508「『パイプライン作成プラグイン』を実行」において、パイプライン作成プラグイン520が実行されて、トランスコーディング要求202に含まれている情報に基づいて、メインパイプライン528が動的に作成される。トランスコーディング要求202は、この段階において、前の段階506で書き込まれた入力ドキュメント526を含む。前述したように、メインパイプライン528は、サブパイプライン220と同様にトランスコーディング処理218を含むとしてよい。
【0110】
図7は、段階508「『パイプライン作成プラグイン』を実行」の詳細、具体的には、パイプライン作成プラグイン520の実行を示すフローチャート700を示す図である。以下の段階が含まれる。
702 「正しいビルダを特定するべくパイプライン作成プラグインがディレクタを呼び出す」
704 「全ビルダを取得するべくディレクタがプラグインマネージャを呼び出す」
706 「プラグインマネージャが全ビルダリストを返す」
708 「ディレクタが各ビルダに問い合わせを行う」
710 「ディレクタに対して正しいビルダが特定される」
712 「ディレクタは正しいビルダをパイプライン作成プラグインに返す」
714 「パイプライン作成プラグインは正しいビルダを呼び出して実行」
716 「正しいビルダが実行されてトランスコーディングパイプラインを構築」
【0111】
パイプライン作成プラグイン520の目的は、トランスコーディング要求202(図2)からの情報を用いてメインパイプライン528を構築することである。トランスコーディング要求202は、この段階において、前の段階518で作成された入力ドキュメント526を含む。
【0112】
段階702「正しいビルダを特定するべくパイプライン作成プラグインがディレクタを呼び出す」において、パイプライン作成プラグイン520は、ビルダ要求をディレクタ306に渡して、正しいビルダ718を特定する。正しいビルダ718は、正しいビルダモジュールとも呼ばれ、入力ドキュメント526に記載されているフォーマット仕様、例えば、「MMS」に応じて、トランスコーディングパイプライン216の一例であるメインパイプライン528を構築することができる。
【0113】
段階704「全ビルダを取得するべくディレクタがプラグインマネージャを呼び出す」において、ディレクタ306は、全ビルダリスト、つまり、ビルダ群310のビルダ312、および、動的ロード共有ライブラリ208にあるビルダを取得するべく、プラグインマネージャ308を呼び出す。
【0114】
段階706「プラグインマネージャが全ビルダリストを返す」において、プラグインマネージャ308は、現在の全ビルダリスト、つまり、ビルダ群310のビルダ312、および、動的ロード共有ライブラリ208にあるビルダのリストを返す。尚、トランスコーダソフトウェアシステム204のユーザは、動的ロード共有ライブラリ208にビルダ(および、スクライバ等のその他のソフトウェアオブジェクト)を追加するとしてもよい。このようにユーザによって定義されるソフトウェアオブジェクトは、スクライバおよびビルダ等のソフトウェアオブジェクトにおいて正しいものを検索する際には、自動的に検索の対象に含まれる。
【0115】
段階708「ディレクタが各ビルダに問い合わせを行う」において、ディレクタ306は、現在の全ビルダリストに含まれる各ビルダを、「X」が処理機能を表す場合に「(X)はサポートされているか」という形式のビルダクエリ関数である「パイプライン構築クエリ」によって呼び出す。この場合、必要な処理機能「X」は、例えば、MMSメッセージを処理するためのトランスコーディングパイプラインを構築する機能である。各ビルダは、ビルダクエリ関数で呼び出されると、クエリを調査して、要求された処理を実行可能か否か判断する。トランスコーディングパイプライン(または、サブパイプライン)の構築においてさまざまなビルダが果たす役割は、パイプラインまたはサブパイプラインの構造を形成して、各ビルダが広告している処理を実行することができる適切なトランスコーディング処理218を最終的に付加することにある。処理自体は、トランスコーディングパイプラインが完成するまで実行されることはなく、完成した時点において、付加されたトランスコーディング処理218が全て実行される。
【0116】
段階710「ディレクタに対して正しいビルダが特定される」において、ディレクタ306は、現在の全ビルダリストのうち、ビルダクエリ関数に対して「TRUE」と返して要求を満たすことができる最初のビルダを正しいビルダ718として認識して、選択する。正しいビルダ718が見つかるものと仮定し、見つからない場合にはエラーとなって、図5に示すように、トランスコードプログラム502は終了ラベルがある段階514にジャンプする。正しいビルダ718は、例えば、「MMSビルダ」であってよい。
【0117】
段階712「ディレクタは正しいビルダをパイプライン作成プラグインに返す」において、ディレクタ306は、パイプライン作成プラグイン520に対して、正しいビルダ718を返す。
【0118】
段階714「パイプライン作成プラグインは正しいビルダを呼び出して実行」において、パイプライン作成プラグイン520は、トランスコーディング要求202を直接処理するべく正しいビルダ718を呼び出す。
【0119】
段階716「正しいビルダが実行されてトランスコーディングパイプラインを構築」において、正しいビルダ718はメインパイプライン528を生成する。一般的に、正しいビルダ718は、サブパイプラインが分岐部分として追加されるメインパイプライン528のツリーのルート部分を作成することから開始する最上位のビルダであり、最初のサブパイプラインは、正しいビルダ718が実行可能であると広告している処理の本質、例えば、「MMSメッセージを処理」を指し示すトランスコーディングパイプラインである。正しいビルダ718は、MMSメッセージを実際に処理するべく、この段階において入力ドキュメント526およびデスティネーションプロフィール214を含むトランスコーディング要求202を読み出して、当該メッセージの各要素を処理するべく他のビルダに協力を求める。
【0120】
図8は、段階716「正しいビルダが実行されてトランスコーディングパイプラインを構築」の詳細を示すフローチャート800を示す図である。以下の段階を含む。
802 「次の未実行処理を取得」
804 「トランスコーディングオブジェクトを取得」
806 「トランスコーディングオブジェクトをパイプラインに付加」
808 「サブパイプラインを作成および付加」
810 「ディレクタからサポートビルダを取得」
812 「サポートビルダ、サブパイプラインで、段階716を再帰的に実行」
【0121】
段階716「ビルダが実行されてトランスコーディングパイプラインを構築」は、入力ドキュメント526に含まれる未実行処理のそれぞれについて、入力ドキュメント526および付加されるトランスコーディング処理218を分析することによって、メインパイプライン528を構築するべく、正しいビルダ718によって実行されるとしてよい。しかし、正しいビルダ718は、サブパイプライン220のインスタンスを付加して、トランスコーディング処理218または別のサブパイプライン220を当該サブパイプライン220に入れるべく他のビルダの協力を求めるとしてもよい。
【0122】
この機能は、段階716で与えられ、トランスコーディング処理218で、トランスコーディング要求202で指定されている全ての処理を実行するべく再帰的に呼び出されるとしてよい。
【0123】
段階802「次の未実行処理を取得」において、次の未実行処理要求をトランスコーディング要求202から取得する。未実行処理要求が残っていない場合(段階802でNOの場合)、段階716は終了する。残っている場合(YESの場合)には、次の段階804に続く。
【0124】
段階804「トランスコーディングオブジェクトを取得」において、要求に一致するトランスコーディングオブジェクト328が、トランスコーディングオブジェクト群326から選択される。当該トランスコーディングオブジェクト328は、未実行処理要求を実行することができる。現在アクティブなビルダがトランスコーディングオブジェクト328で未実行処理要求が実行できない場合(段階804で「NO」の場合)、段階808にジャンプする。実行できる場合(「YES」の場合)、次の段階806に続く。
【0125】
段階806「トランスコーディングオブジェクトをパイプラインに付加」において、段階806で特定されたトランスコーディングオブジェクト328は、一致する(つまり、要求に一致する)トランスコーディング処理218として、現在のパイプラインの終端に付加される。現在のパイプラインとは、メインパイプライン528であってもよいし、または、段階716が再帰的に処理される場合サブパイプラインであってもよい。未実行処理要求は、この段階において、一致するトランスコーディング処理218で実行される。
【0126】
段階808「サブパイプラインを作成および付加」において、新しいサブパイプライン220が作成され、現在のパイプラインの終端に付加される。尚、段階804において未実行の処理は、段階806が実行されるまでは、実行されていない様態のままである。
【0127】
段階810「ディレクタからサポートビルダを取得」において、現在アクティブなビルダは、現在の要求を複数のサブ要求に拡張して、各サブ要求について、当該サブ要求をサポートするサポートビルダモジュールを供給するようディレクタ306に依頼する。このメカニズムは、正しいビルダ718が特定されるパイプライン作成プラグイン520の実行段階702から714(図7)に関する説明において詳細に記載されている。
【0128】
段階812「サポートビルダ、サブパイプラインで、段階716を再帰的に実行」において、段階716が再帰的に実行される。各サポートビルダが、対応するトランスコーディング処理218をサブパイプラインに付加することによって(段階806)対応する未実行処理を実行するか、または、再度再帰的に処理を行う。
【0129】
図9は、段階508(図5)でパイプライン作成プラグイン520によって作成されたメインパイプライン528のインスタンスの一例である「単純メッセージパイプライン」900を示す図である。単純メッセージパイプライン900は、サブパイプライン220のインスタンスである「メッセージ処理」サブパイプライン904へと分岐するルート902を含む。「メッセージ処理」サブパイプライン904は、トランスコーディング処理218のインスタンスである、「画像トランスコード処理」906、「テキストトランスコード処理」908、「表現トランスコード処理」910、および、「過大サイズハンドリング処理」912への分岐を含む。
【0130】
「単純メッセージパイプライン」900が実行されると(図7の段階716を参照のこと)、添付されたトランスコーディング処理218はそれぞれ、独立して担当する処理を実行する。
「画像トランスコード処理」906は、デスティネーションプロフィール214に応じて、入力メディア212に含まれている画像メディアをトランスコードする。
「テキストトランスコード処理」908は、デスティネーションプロフィール214に応じて、入力メディア212に含まれているテキストメディアをトランスコードする。
「表現トランスコード処理」910は、デスティネーションプロフィール214に応じて、入力メディア212に含まれている表現を変換する。
「過大サイズハンドリング処理」912は、最終出力メディア(適応出力メディア226およびフィルタリング済出力メディア224)のサイズが必ず、デスティネーションプロフィール214で規定されている制限値を遵守していることを確認する。例えば、出力メッセージの場合は、出力メッセージのサイズがデスティネーションプロフィール214に記載されている最大サイズ値を超えないようにする。このため、「過大サイズハンドリング処理」は、メッセージに含まれているメディアをトランケート(truncate)すること、または、含まれているメディアをターゲットサイズに到達するまで除去することのうちいずれかを含む設定可能な種類の動作を実行する。
【0131】
通常の場合、「画像トランスコード処理」906、「テキストトランスコード処理」908、および「表現トランスコード処理」910のうちいずれかが、1つのメディアに対して実行される。複数のM個の同じ種類のメディアをトランスコードする必要がある場合、例えば、M個の画像の場合、M個の画像トランスコード処理906をトランスコーディングパイプラインに付加する。これは、どの種類の処理についても同じである。
【0132】
ここで、図5の次の段階に説明を戻す。
【0133】
段階510「『最適化プラグイン』を実行」において、最適化プラグイン522が実行され、先行する段階で作成されたメインパイプライン528を調査して、トランスコーディング処理218の並べ替え、組み合わせ、または、不必要であれば除去を行うとしてよい。段階510の結果として、メインパイプライン528の最適化バージョンが得られる。最適化バージョンは、入力メディア212をトランスコードするために必要なトランスコーディング処理218のみを含む。
【0134】
図10は、段階508(図5を参照のこと)においてパイプライン作成プラグイン520によって作成されたメインパイプライン528のインスタンスの別の例である「最適化されていないメッセージパイプライン」1000を示す図である。「最適化されていないメッセージパイプライン」1000は、サブパイプライン220のインスタンスである第1の「メッセージ処理」サブパイプライン1004に分岐するルート1002を含む。第1の「メッセージ処理」サブパイプライン1004は、トランスコーディング処理218のインスタンスである、「画像トランスコード処理」1006、「テキストトランスコード処理」1008、「表現トランスコード処理」1010、第1の「画像サイズ変更処理」1012、サブパイプライン220の別のインスタンスであり、1つのトランスコーディング処理218、つまり第2の「画像サイズ変更処理」1016へと分岐している第2の「メッセージ処理」サブパイプライン1014、および、「過大サイズハンドリング処理」1018への分岐を含む。
【0135】
「最適化されていないメッセージパイプライン」1000は、「単純メッセージパイプライン」900と同様であるが、トランスコーディング処理218のインスタンスが追加されており、つまり、第1および第2の「画像サイズ変更処理」1012および1016を含み、ならびに、サブパイプライン220のインスタンスが追加されており、つまり、第2の「メッセージ処理」サブパイプライン1014を含む。
【0136】
最適化プラグイン522モジュールは、「最適化されていないメッセージパイプライン」1000で実行されると、当該パイプラインを修正して、同じ種類のサブパイプラインがないようにして、2つのサブパイプラインを結合させる。具体的には、第1および第2の「メッセージ処理」サブパイプライン1004および1014は、同じ種類(「メッセージ処理」)であるので結合させる。つまり、第2の「メッセージ処理」サブパイプライン1014を除去して、第1の「メッセージ処理」サブパイプライン1004の分岐となる。さらに、最適化プラグイン522は、同じ種類のトランスコーディング処理218が複数存在するか否か確認して、そのうち1つを除去するとしてもよい。「最適化されていないメッセージパイプライン」1000の場合、第2の「画像サイズ変更処理」1016が冗長であり、削除されるとしてもよい。
【0137】
図11は、段階510(図5を参照のこと)において最適化プラグイン522によって、例えば、「最適化されていないメッセージパイプライン」1000を最適化することによって得られる「最適化メッセージパイプライン」1100を示す図である。「最適化メッセージパイプライン」1100は、第1の「メッセージ処理」サブパイプライン1004に分岐するルート1002を含む。第1の「メッセージ処理」サブパイプライン1004は、トランスコーディング処理218のインスタンスである、「画像トランスコード処理」1006、「テキストトランスコード処理」1008、「表現トランスコード処理」1010、第1の「画像サイズ変更処理」1012、および「過大サイズハンドリング処理」1018への分岐を含む。
【0138】
本例によると、結果として得られた「最適化メッセージパイプライン」1100は、冗長なサブパイプライン220およびトランスコーディング処理218、つまり、第2の「メッセージ処理」サブパイプライン1014および第2の「画像サイズ変更処理」1016を全て除去することによって、「最適化されていないメッセージパイプライン」1000に比べて、最適化されている。他の要素は全て、そのままである。メインパイプライン528は、この段階において、次の段階512で実行される準備が整っている。
【0139】
ここで、図5の次の段階に説明を戻す。
【0140】
段階512「『パイプライン実行プラグイン』を実行」において、パイプライン実行プラグイン524が実行され、メインパイプライン528のトランスコーディング処理218を、サブパイプラインのトランスコーディング処理218も含め、それぞれ順次処理する。
【0141】
図12は、段階512「『パイプライン実行プラグイン』を実行」の詳細、具体的には、パイプライン実行プラグイン524の実行を示すフローチャートである。以下の段階を含む。
1202 「メインパイプラインを取得」
1204 「次のトランスコーディング処理を取得」
1206 「トランスコーディング処理を実行」
1208 「ディレクタに書込スクライバを要求」
1210 「ディレクタが書込スクライバを返す」
1212 「書込スクライバに要求を発行」
1214 「書込スクライバが出力メディアに書込み」
【0142】
段階1202「メインパイプラインを取得」において、パイプライン実行プラグイン524は、ツリー形式で付加されたトランスコーディング処理218およびサブパイプライン220を全て含むソフトウェアオブジェクトであるメインパイプライン528に実行を移行させる。
【0143】
段階1204「次のトランスコーディング処理を取得」において、メインパイプライン528の次の項目が特定される。次の項目がトランスコーディング処理(218)である場合、実行はこのトランスコーディング処理に移行され(段階1204で「YES」)、次の段階1206に進む。次の項目がサブパイプラインであれば、実行はこのサブパイプラインの最初のトランスコーディング処理218に移行される。メインパイプライン528の最後に到達して、メインパイプライン528および全てのサブパイプラインの全てのトランスコーディング処理(218)の実行を終了すると、段階1208に進む(段階1206で「NO」)。
【0144】
段階1206「トランスコーディング処理を実行」においては、先行する段階で特定されたトランスコーディング処理218を実行する。段階1204および1206は、深さ優先順序でメインパイプライン528のツリー構造を進むループを形成し、メインパイプライン528の全てのトランスコーディング処理218および各サブパイプラインの全てのトランスコーディング処理218を実行する。尚、各サブパイプライン自体が、2次的またはより高次のサブパイプラインを含む場合もある。
【0145】
メインパイプライン528およびそのサブパイプラインの各トランスコーディング処理218は、(入力メディア212のメディアコンポーネントを含む)入力ドキュメント526のうち一部分を処理して、出力ドキュメント530を生成することによってトランスコーディング要求202を実行することができる自己完結型のトランスコーディングオブジェクト328である。メインパイプライン528のトランスコーディング処理218を実行することによって、トランスコーディング結果228が生成されるとしてよい。
【0146】
段階1208「ディレクタに書込スクライバを要求」において、パイプライン実行プラグイン524は、適応出力メディア226を出力ドキュメント530に書き込むことが出来るスクライバを特定するべく、「書込クエリ」でディレクタ306を呼び出す。ディレクタ306は、「読出」の場合について詳細に記載した段階604から610(図6を参照のこと)と同様の一連の段階において、各スクライバに対して問い合わせを行い、「書込」処理をサポートできるか否か確かめる。各スクライバは、ドキュメントの種類を調査して、サポートできる場合には「TRUE」と返答する。
【0147】
段階1210「ディレクタが書込スクライバを返す」において、ディレクタは、スクライバのうち1つが書込要求を処理することができることが分かると、当該スクライバを書込スクライバ1216(書込スクライバモジュールとも呼ぶ)として、「パイプライン実行」プラグイン524へと返す。
【0148】
段階1212「書込スクライバに要求を発行」において、「パイプライン実行プラグイン」は、書き込みスクライバ1216に実行方法を呼び出す。
【0149】
段階1214「書込スクライバが出力メディアに書込み」において、書込スクライバ1216は、出力ドキュメント530を、デスティネーションプロフィール214に指定されているフォーマットでトランスコーダ出力データセット206の適応出力メディア226へと変換する。適応出力メディア226と、(もしあれば)フィルタリング済出力メディア224とで、適応メッセージ232が構成されている。
【0150】
ここで、図5に示した次の段階の説明に戻す。
【0151】
段階514「『特性化プラグイン』を実行」において、特性化プラグイン534が実行され、トランスコーダ出力データセット206の特性化結果230が作成される。トランスコーダ出力データセット206の特性化結果230は、出力ドキュメント530の特性、例えば、サイズおよびメディアの数、ビデオメディアまたは画像メディアの場合には解像度等に関する情報、ならびに、トランスコーディング結果228の報告を含む。この特性化段階514は、システムの性能に関するデータを収集することを主な目的としており、トランスコーディング速度を優先する場合には省略するとしてもよい。
【0152】
上述したように、ドキュメントの特性化は、ドキュメントに含まれるメディアの特性化を含むとしてもよい。さらに、特性化プラグインは、トランスコーディングの対象となる入力メディアを特性化するように構成されるとしてもよい。
【0153】
段階516「『セッションの設定を解除』を実行」において、入力ドキュメント526、メインパイプライン528、および出力ドキュメント530等の一時ファイルを削除する。選択されたプラグインプログラム324によって利用されたその他のリソース(本例では、トランスコードプログラム502)もまた、制御プログラム304に実行が戻る前に、削除される。
【0154】
このように、マルチメディアメッセージをトランスコードするためのモジュラートランスコーダソフトウェアシステムおよび対応する方法であって、一連の複雑な、互いに関連するまたは無関係の処理をトランスコーディングパイプラインとして動的に構築するための一群のソフトウェアモジュールおよびオブジェクトを備えるモジュラートランスコーダソフトウェアシステムおよび対応する方法が提供される。トランスコーディングパイプラインは、処理の階層構造を持ち、階層構造全体を1つのパスで実行することを目的として、処理を組織化および最適化することができる。また、外部プラグインは、構築情報を変更、追加、または削除することによって、パイプラインを形成するメカニズムをカスタマイズすることができる。
【0155】
本発明の実施形態に係るシステムおよび方法によれば、スケーラブルで性能および保全性が改善された自由度の高い適応化システムが得られる。
【0156】
マルチメディアメッセージの要素を適応化させる例を参照して本発明の実施形態を説明したが、上述して方法によればその他の同様の分野でも効果が得られると考えられる。
【0157】
本発明の実施形態を詳細に説明したが、特許請求の範囲を超えることなく実施形態を変更および変形し得ることは当業者には明らかである。

【特許請求の範囲】
【請求項1】
プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムであって、前記コンピュータ読出可能格納媒体は、前記プロセッサによって実行されるコンピュータ読出可能命令を格納しており、前記システムは、
前記入力メディアを前記適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、
前記トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第1のソフトウェアモジュール群であって、前記トランスコーディングパイプラインモジュールを動的に構築する1以上のビルダモジュール、および、前記トランスコーディング要求に含まれる情報に応じて前記1以上のビルダモジュールを選択するディレクタモジュールを有する第1のソフトウェアモジュール群と、
前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、1以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第2のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理モジュールを作成する手段を含むシステム。
【請求項2】
前記トランスコーディングパイプラインモジュールはさらに、前記1以上のビルダモジュールによって作成され、且つ、前記トランスコーディング要求の一部を処理するサブパイプラインモジュールを有する請求項1に記載のシステム。
【請求項3】
前記第1のソフトウェアモジュール群はさらに、1以上のスクライバモジュールを有し、各スクライバモジュールは、ドキュメントの形態である前記入力メディアおよび前記適応出力メディアのオブジェクトの読出、復号、符号化、スケーリング、または、書込のうち1つを行う請求項1に記載のシステム。
【請求項4】
ドキュメントは、前記トランスコーディングオブジェクトモジュールによる処理に適している構造を持ち、前記ドキュメントの構造は、前記入力メディアおよび前記適応出力メディアの構造とは異なる請求項3に記載のシステム。
【請求項5】
前記1以上のビルダモジュールはそれぞれ、前記ビルダモジュールの機能を示すビルダクエリ関数モジュールを含み、前記ディレクタモジュールは、前記ビルダモジュールの機能を判断し、且つ、前記トランスコーディング要求に含まれる情報と前記機能とを比較一致させるべく、前記クエリ関数モジュールと通信するビルダ選択モジュールを含む請求項1に記載のシステム。
【請求項6】
前記1以上のビルダモジュールはそれぞれさらに、前記ディレクタの前記ビルダ選択モジュールと通信して、前記トランスコーディング要求の一部を実行することが可能なほかの複数のビルダモジュールを選択するよう前記ディレクタに要求するサブビルダ選択モジュールを含む請求項5に記載のシステム。
【請求項7】
前記第2のソフトウェアモジュール群はさらに、あるドキュメントを別のドキュメントに変換するドキュメントトランスコーダモジュールを有する請求項3に記載のシステム。
【請求項8】
前記トランスコーディング処理の実行中に発行されたメッセージ、エラー、および警告を格納するトランスコーディング結果モジュールと、前記入力メディアおよび前記適応出力メディアに関する情報を格納する特性化結果モジュールとを有するトランスコーダ出力データセットモジュールをさらに備える請求項1に記載のシステム。
【請求項9】
入力メディアを含むトランスコーディング要求を適応出力メディアを含むトランスコーダ出力データセットへと処理する方法であって、
前記トランスコーディング要求を受信する段階(a)と、
前記トランスコーディング要求の変換コマンドを読み出す段階(b)と、
ソフトウェアモジュール群から、前記変換コマンドに対応付けられているプラグインプログラムを選択する段階(c)と、
選択された前記プラグインプログラムを実行して、前記入力メディアを前記適応出力メディアへとトランスコードする段階(d)と、
前記適応出力メディアを含む前記トランスコーダ出力データセットを生成する段階(f)と
を備える方法。
【請求項10】
前記段階(d)は、
入力ドキュメントのコンポーネントへと前記入力メディアを抽出する段階(g)と、
前記トランスコーディング要求および前記入力ドキュメントに示されている処理要求に一致するように、トランスコーディング処理を含むメイントランスコーディングパイプラインを作成する段階(h)と、
前記メイントランスコーディングパイプラインから冗長なトランスコーディング処理を除去することによって、前記メイントランスコーディングパイプラインを最適化する段階(i)と、
前記メイントランスコーディングパイプラインの前記トランスコーディング処理を実行して前記適応出力メディアを生成する段階(j)と
を有する請求項9に記載の方法。
【請求項11】
前記ソフトウェアモジュール群は、ドキュメントを処理する1以上のスクライバモジュールおよびディレクタモジュールを含み、前記段階(g)は、
前記ディレクタモジュールを呼び出して、前記1以上のスクライバモジュールから読出スクライバモジュールを特定する段階(k)と、
前記ディレクタモジュールが、前記1以上のスクライバモジュールにある全てのスクライバモジュールのリストを取得する段階(l)と、
前記ディレクタモジュールが、読出クエリによって、前記全てのスクライバモジュールのリストの各スクライバモジュールに問い合わせを行う段階(m)と、
前記ディレクタモジュールが、前記読出クエリに対して肯定的な返答を返す前記読出スクライバモジュールを選択する段階(n)と、
前記読出スクライバモジュールが、前記入力メディアを読み出して前記入力ドキュメントを生成する段階(o)と
を有する請求項10に記載の方法。
【請求項12】
前記ソフトウェアモジュール群はさらに、前記トランスコーディングパイプラインを構築する1以上のビルダモジュールを含むビルダモジュール群を含み、前記段階(h)は、
前記ディレクタモジュールを呼び出して、前記1以上のビルダモジュールから、前記トランスコーディング要求を満足させるための前記トランスコーディングパイプラインを構築することが可能な正しいビルダモジュールを特定する段階(p)と、
前記ディレクタモジュールが、前記ビルダモジュール群に含まれる全てのビルダモジュールのリストを取得する段階(q)と、
前記ディレクタモジュールが、パイプライン構築クエリで、前記全てのビルダモジュールのリストに含まれる各ビルダモジュールに対して問い合わせを行う段階(r)と、
前記ディレクタモジュールが、前記正しいビルダモジュールとして、前記パイプライン構築クエリに対して肯定的な応答を返す前記ビルダモジュールを選択する段階(s)と、
前記正しいビルダモジュールが、前記トランスコーディングパイプラインを作成する段階(t)と
を有する請求項10に記載の方法。
【請求項13】
前記ソフトウェアモジュール群はさらに、トランスコーディングオブジェクトモジュール群を含み、前記段階(t)は、
前記正しいビルダモジュールを現在アクティブなビルダモジュールとして指定する段階(u)と、
空のトランスコーディングパイプラインを現在のパイプラインとして指定して、前記トランスコーディング要求を未実行処理要求として指定する段階(v)と、
未実行処理要求が見つからない場合には、段階(ee)にジャンプする段階(w)と、
前記現在アクティブなビルダモジュールが、前記トランスコーディングオブジェクトモジュール群から、前記未実行処理要求を実行することが可能な一致トランスコーディングオブジェクトモジュールを特定および選択して、前記現在アクティブなビルダモジュールが前記一致トランスコーディングオブジェクトモジュールを見つけることが出来ない場合には、段階(aa)にジャンプする段階(x)と、
前記一致トランスコーディングオブジェクトモジュールを、前記未実行処理要求を実行するべく、一致トランスコーディング処理の実行および前記現在のパイプラインの終端に前記一致トランスコーディング処理の付加を行うことが可能なものとして指定する段階(y)と、
前記段階(w)から前記段階(y)を繰り返す段階(z)と、
空のサブパイプラインを作成し、前記空のサブパイプラインを前記現在のパイプラインの終端に付加し、前記未実行処理要求を複数の未実行サブ要求に分割する段階(aa)と、
前記複数の未実行サブ要求のうち第1の未実行サブ要求をサポート可能なサポートビルダモジュールを前記ディレクタモジュールから取得して、前記ビルダモジュールを前記現在アクティブなビルダモジュールとして指定して、前記第1の未実行サブ要求を前記未実行処理要求として指定する段階(bb)と、
前記空のサブパイプラインを前記現在のパイプラインとして指定する段階(cc)と、
後続の未実行サブ要求それぞれを前記未実行処理要求として前記段階(w)から前記段階(cc)を繰り返す段階(dd)と、
前記段階(t)を終了する段階(ee)と
を含む請求項12に記載の方法。
【請求項14】
前記トランスコーディング要求はさらに、前記適応出力メディアの対象受信者の特性を定義するデスティネーションプロフィールを含み、前記段階(j)は、
付加されたトランスコーディング処理、および、付加されたトランスコーディング処理を含む再帰的に付加されるサブパイプラインを含む前記メイントランスコーディングパイプラインへと実行を移行させる段階(ff)と、
深さ優先順序で前記トランスコーディング処理を実行して、前記入力ドキュメントのコンポーネントを出力ドキュメントのコンポーネントへと処理する段階(gg)と、
前記ディレクタモジュールを呼び出して、前記スクライバモジュール群から書込スクライバモジュールを特定する段階(hh)と、
前記ディレクタモジュールが、前記スクライバモジュール群の全てのスクライバモジュールのリストを取得する段階(ii)と、
前記ディレクタモジュールは、書込クエリで、前記全てのスクライバモジュールのリストの各スクライバに問い合わせを行う段階(jj)と、
前記ディレクタモジュールが、前記書込スクライバモジュールとして、前記クエリに対して肯定的な応答を返すスクライバモジュールを選択する段階(kk)と、
前記書込スクライバモジュールが、前記デスティネーションプロフィールに指定されているフォーマットで、前記出力ドキュメントを、前記トランスコーダ出力データセットの前記適応出力メディアへと変換する段階(ll)と
を有する請求項10に記載の方法。
【請求項15】
前記段階(j)は、前記実行中に発行されるメッセージ、エラー、および警告を含むトランスコーディング結果を生成する段階を有する請求項10に記載の方法。
【請求項16】
コンピュータ読出可能格納媒体に格納されているコンピュータ読出可能命令を備え、且つ、入力メディアを適応出力メディアへとトランスコードするトランスコーディングパイプラインモジュールであって、前記トランスコーディングパイプラインは、
それぞれが前記入力メディアのコンポーネントを前記適応出力メディアのコンポーネントへとトランスコードする1以上のトランスコーディング処理モジュールと、
それぞれが前記トランスコーディング処理モジュールのうち少なくとも1つを有するゼロ以上のサブパイプラインモジュールと
が所与の順序に沿って並べられたリストを備えるトランスコーディングパイプラインモジュール。
【請求項17】
請求項16に記載のトランスコーディングパイプラインモジュールを作成および実行するためのモジュラーシステムであって、
前記トランスコーディングパイプラインモジュールを動的に構築する複数のソフトウェアモジュールを有する第1のソフトウェアモジュール群であって、1以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有する第1のソフトウェアモジュール群と、
前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、1以上のトランスコーディングオブジェクトモジュールを含む複数のソフトウェアモジュールを有する第2のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理モジュールを作成する手段を含むモジュラーシステム。
【請求項18】
1以上のビルダモジュールは、前記トランスコーディング要求の一部を処理するサブパイプラインモジュールを作成して、前記サブパイプラインモジュールを前記トランスコーディングパイプラインモジュールへと付加するビルダモジュールを少なくとも1つ含む請求項17に記載のシステム。
【請求項19】
前記トランスコーディングオブジェクトモジュールのうち少なくとも1つは、トランスコーディング処理を実行する請求項17に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公表番号】特表2011−520363(P2011−520363A)
【公表日】平成23年7月14日(2011.7.14)
【国際特許分類】
【出願番号】特願2011−507764(P2011−507764)
【出願日】平成20年12月23日(2008.12.23)
【国際出願番号】PCT/CA2008/002286
【国際公開番号】WO2009/137910
【国際公開日】平成21年11月19日(2009.11.19)
【出願人】(507090627)ヴァントリックス コーポレーション (11)
【Fターム(参考)】