(57)【特許請求の範囲】
【請求項１】
遠隔転送およびトランスコーディング中にファイルを動的に利用可能にするための方法であって、
取り込みサーバにおいて、ストリーミングできないメディアファイルの第１の部分をトランスコーディングのために受け取り、該ストリーミングできないメディアファイルが、開始点を有しており、
該取り込みサーバ上で実行している第１のプロセスにより、前記ストリーミングできないメディアファイルのヘッダが該ストリーミングできないメディアファイルの前記開始点に位置していないことを判定し、
該取り込みサーバ上で実行している該第１のプロセスにより、前記ストリーミングできないメディアファイルの前記第１の部分におけるデータに基づいて該ストリーミングできないメディアファイルにおける前記ヘッダの位置を求め、
該取り込みサーバにより、第２のプロセスを自動的に起動して、前記ストリーミングできないメディアファイルにおける前記ヘッダの前記位置から該ヘッダをダウンロードし、
該取り込みサーバにより、前記ヘッダを書き換えて、書き換えられたヘッダを生成し、該ヘッダの書き換えが、
該書き換えられたヘッダのサイズを考慮してファイルオフセット位置を計算し、及び、
該ファイルオフセット位置を含むよう前記ヘッダを書き換える
ことを含み、
該取り込みサーバにより、該取り込みサーバにおいて前記ストリーミングできないメディアファイルの最後の部分を受け取る前に、該ストリーミングできないメディアファイルの前記第１の部分の先頭に前記書き換えられたヘッダを追加してストリーミング可能なメディアファイルを生成し、及び、
該取り込みサーバにより、前記書き換えられたヘッダを有する前記ストリーミング可能なメディアファイルの前記第１の部分をトランスコーディングのためにトランスコーディングサーバへ送信する
ことからなる方法。
【請求項２】
前記トランスコーディングサーバにおいて前記ストリーミング可能なメディアファイルの前記第１の部分をトランスコーディングすることを更に含み、該ストリーミング可能なメディアファイルの該第１の部分が遠隔サーバから受け取られる、請求項１に記載の方法。
【請求項３】
前記第１のプロセスが前記ストリーミングできないメディアファイルの他の部分をダウンロードするのと同時に前記第２のプロセスが前記ヘッダをダウンロードする、請求項１に記載の方法。
【請求項４】
前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信することを更に含む、請求項２に記載の方法。
【請求項５】
前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信することが、該ストリーミング可能なメディアファイルの最後の部分をトランスコーディングする前に行われる、請求項４に記載の方法。
【請求項６】
前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信することが、前記取り込みサーバにおいて前記ストリーミングできないメディアファイルの前記最後の部分を受け取る前に行われる、請求項５に記載の方法。
【請求項７】
前記取り込みサーバにおいて、前記ストリーミングできないメディアファイルの追加部分をトランスコーディングのために受け取り、
該取り込みサーバにより、該ストリーミングできないメディアファイルの該追加部分を前記ストリーミング可能なメディアファイルの追加部分として前記トランスコーディングサーバへ送信し、及び、
該トランスコーディングサーバにより、前記ストリーミング可能なメディアファイルが完全にトランスコーディングされるまで、該ストリーミング可能なメディアファイルの前記第１の部分と該ストリーミング可能なメディアファイルの前記追加部分とをトランスコーディングする
ことを更に含む、請求項１に記載の方法。
【請求項８】
前記ヘッダを書き換えることが、前記ストリーミングできないメディアファイル内のメディアデータの位置の計算に基づいてデータのバイトを無視するための指示を前記書き換えられたヘッダに追加することを含む、請求項１に記載の方法。
【請求項９】
前記トランスコーディングサーバにより、前記ストリーミング可能なメディアファイルをキャッシュ内に格納することを更に含む、請求項１に記載の方法。
【請求項１０】
前記ファイルオフセット位置を計算することが、前記ヘッダにバッファを加えたサイズを考慮することを含む、請求項１に記載の方法。
【請求項１１】
前記ストリーミングできないメディアファイルのサイズ及び転送速度に基づいて転送時間を計算し、及び、
該転送時間が所定の閾値を上回っていることを判定する
ことを更に含む、請求項１に記載の方法。
【請求項１２】
前記ストリーミングできないメディアファイルの前記追加部分のそれぞれがキーフレームから始まる、請求項７に記載の方法。
【請求項１３】
遠隔転送およびトランスコーディング中にファイルを動的に利用可能にするためのシステムであって、該システムが、取り込みサーバ及びトランスコーディングサーバを備えて入り、該取り込みサーバが、
ストリーミングできないメディアファイルの第１の部分をトランスコーディングのために受け取り、該ストリーミングできないメディアファイルが開始点を有しており、
該取り込みサーバ上で実行している第１のプロセスにより、前記ストリーミングできないメディアファイルのヘッダが該ストリーミングできないメディアファイルの前記開始点に位置していないことを判定し、
該第１のプロセスにより、前記ストリーミングできないメディアファイルの前記ヘッダの位置を該ストリーミングできないメディアファイルの前記第１の部分におけるデータに基づいて求め、
第２のプロセスを自動的に起動して、前記ストリーミングできないメディアファイルにおける前記ヘッダの前記位置から該ヘッダをダウンロードし、
該ヘッダを書き換えて、書き換えられたヘッダを生成し、該ヘッダを書き換えることが、
該書き換えられたヘッダのサイズを考慮したファイルオフセット位置を計算し、及び、
該ファイルオフセット位置を含むよう前記ヘッダを書き換える
ことを含み、及び、
前記取り込みサーバにおいて前記ストリーミングできないメディアファイルの最後の部分を受け取る前に、該ストリーミングできないメディアファイルの前記第１の部分の先頭に前記書き換えられたヘッダを追加してストリーミング可能なメディアファイルを生成する
ためのものであり、及び、
前記トランスコーディングサーバが、
前記ストリーミング可能なメディアファイルの前記第１の部分をトランスコーディングするためのものであり、
該トランスコーディングサーバが、前記取り込みサーバが前記ストリーミングできないメディアファイルの前記最後の部分を受け取る前に前記ストリーミング可能なメディアファイルの前記第１の部分をトランスコーディングするように構成されている、システム。
【請求項１４】
前記ストリーミングできないメディアファイルが、遠隔サーバから受け取られる、請求項１３に記載のシステム。
【請求項１５】
前記第１のプロセスが前記ストリーミングできないメディアファイルの他の部分をダウンロードするのと同時に前記第２のプロセスが前記ヘッダをダウンロードする、請求項１３に記載のシステム。
【請求項１６】
前記トランスコーディングサーバが更に、前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信するためのものである、請求項１３に記載のシステム。
【請求項１７】
前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信することが、前記トランスコーディングサーバが前記ストリーミング可能なメディアファイルの最後の部分をトランスコーディングする前に行われる、請求項１６に記載のシステム。
【請求項１８】
前記ストリーミング可能なメディアファイルの前記トランスコーディングされた第１の部分を送信することが、前記取り込みサーバにおいて前記ストリーミングできないメディアファイルの前記最後の部分を受け取る前に行われる、請求項１７に記載のシステム。
【請求項１９】
前記取り込みサーバが更に、
前記ストリーミングできないメディアファイルの追加部分を受け取り、及び、
該ストリーミングできないメディアファイルの該追加部分を前記ストリーミング可能なメディアファイルの追加部分として前記トランスコーディングサーバへ送信する
ためのものであり、
前記トランスコーディングサーバが更に、
前記ストリーミング可能なメディアファイルが完全にトランスコーディングされるまで、該ストリーミング可能なメディアファイルの前記第１の部分と該ストリーミング可能なメディアファイルの前記追加部分とをトランスコーディングする
ためのものである、請求項１３に記載のシステム。
【請求項２０】
前記ヘッダを書き換えることが、前記ストリーミングできないメディアファイル内のメディアデータの位置の計算に基づいてデータのバイトを無視するための命令を前記書き換えられたヘッダに追加することを含む、請求項１３に記載のシステム。
【請求項２１】
前記ファイルオフセット位置を計算することが、前記ヘッダにバッファを加えたサイズを考慮することを含む、請求項１３に記載のシステム。
【請求項２２】
前記トランスコーディングサーバが更に、前記ストリーミング可能なメディアファイルをキャッシュ内に格納するためのものである、請求項１３に記載のシステム。
【請求項２３】
前記取り込みサーバが更に、
前記ストリーミングできないメディアファイルのサイズ及び転送速度に基づいて転送時間を計算し、及び、
該転送時間が所定の閾値を上回っていることを判定する
ためのものである、請求項１３に記載のシステム。
【請求項２４】
前記ストリーミングできないメディアファイルの前記追加部分のそれぞれがキーフレームから始まる、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般に、コンピュータシステムに関し、より具体的には符号化中にファイルを利用可能にするためのシステム及び方法に関する。
【０００２】
関連出願に対する相互参照
本出願は、２０１３年２月１４日に出願され、「System and Method for Dynamic File Availability During Encoding」と題する米国特許出願第１３／７６７，３６３号の優先権を主張し且つその恩典を請求し、その米国特許出願は、２０１２年２月１６日に出願され、「System and Method for Dynamic File Availability During Encoding」と題する米国特許仮出願第６１／５９９，８６１号の優先権を主張しており、その開示は参照により、全体として本明細書に組み込まれる。
【背景技術】
【０００３】
背景
トランスコーディングは、動画データファイル又は音声（オーディオ）ファイルなどのデジタルデータを、１つの符号化から別の符号化へ直接変換することである。トランスコーディングは多くの理由で行われ、それらの理由には、ターゲット装置（又はワークフロー）が当該フォーマットをサポートしていない又は限られた記憶容量を有する又は縮小されたファイルサイズを要求する帯域幅を有する場合、或いは互換性のない又は旧式のデータを更に良くサポートされた又は最新のフォーマットに変換する場合が含まれる。例えば、Apple（登録商標）ProResは、デジタルビデオの共通フォーマットとして広く使用されているが、これらのフォーマットにおける２時間動画のデータサイズは、多大になる可能性がある。大きなサイズは、コスト、及び動画ファイルの取扱いの難しさを増大させる可能性がある。これらのタイプのファイルを、例えばMPEG-4フォーマットへトランスコーディングすることは、それらのサイズの１０％未満にそれらを圧縮することができる。
【０００４】
トランスコーディングは一般に、劣化を伴う（ロッシー）プロセスであり、生成損失をもたらす。ロッシーからロッシーのトランスコーディングのプロセスは、様々な度合いの生成損失をもたらす。他の場合では、ロッシーからロスレス（無劣化）フォーマット又は非圧縮フォーマットへのトランスコーディングは、情報が失われないので技術的にロスレスの変換であるが、当該プロセスは、「不可逆」であり、より適切には「破壊的」として知られている。
【０００５】
ビデオトランスコーディングは、最も速い利用可能なハードウェアを用いたとしても、何分間も又は何時間もかかる遅いプロセスとなる可能性がある。ファイルベースのトランスコーディングは通常、完全に非同期であり、トランスコーディングされたファイルは、プロセスが完了するまで使用されることができない。
【０００６】
従来、ビデオファイルがトランスコーディングされる場合、（１）トランスコーディングは、トランスコーディングするためのトランスコーディングシステムにおいて全ファイルが利用できるまで開始しない、（２）結果としてのトランスコーディングされたファイルは、トランスコーディングが完了するまで再生されることができない、又は（３）（１）と（２）の双方である。
【０００７】
現行方式の下で、ファイルが依然として書き込まれながら当該ファイルを処理することは困難である。既存の手法は、ファイルが依然として書き込まれているか否かに関わらず、その現在の不完全な状態でファイルを読み込む（及び処理する／出力する）ことだけができる。ファイルが書き込まれている際に、既存の技術がファイルを読み込む（及び処理する／出力する）ことができる場合に、ファイルが一時的でない記憶装置に何時完全に書き込まれたかに関する利用可能な知識（情報）は存在しない。
【０００８】
既存のプログラムは、ファイル（即ち、パイプ又はストリームではない）が完全である又は全部であり且つディスク上で成長していないと推測し、そのためプログラムは一般に、依然として書き込まれているファイルを読み出そうと試みる場合に動作しなくなる。これは、パイプコマンドのチェーン、又はパイプを有する「ティー（tee）」コマンドを用いて解決されることができない。パイプチェーンのプロセスの何れかが動作しなくなる場合、プロセスのセット全部が停止する。パイプベースのコマンドは、ファイルの出発点からの再試行を可能にしない。更に、幾つかのファイルはストリームとして処理されることができず、何らかのレベルのランダムアクセスが必要とされる。更に、幾つかの既存のプログラムは、パイプから読み出すことができない。名前付きパイプ（named pipe）を使用する場合、読み取り装置が読み出しを停止すると、バッファがいっぱいになり、ティー（tee）がもはやファイルを書き込むことができず、そのため処理は、永久に停止する。
【０００９】
また、ファイル上で「キャット（cat）」及び「テール（tail）」を用いるような、他の既存の手法は、制限も有する。キャットは、全ファイルがその時点で存在する際のみ全ファイルを読み出し、ファイルが書き込まれていることを終えるのを待たない。テール（ファイルの開始点からの読み出しを開始するためのオプション「−ｃ０」、及びファイルが書き込まれている際にファイルの後続する終端部に留まるためのオプション「−ｆ」を有する）は、外部プロセスにより停止されるまで永久に更なるデータを待つ。
【００１０】
発明の概要
符号化中に動的にファイルを利用可能にするためのシステム及び方法が開示される。本発明のシステム、方法、特徴および利点は、以下の図面および詳細な説明の考察により当業者に明らかになるであろう。そのような追加の方法、特徴および利点の全ては、本説明内に含まれ、本発明の範囲内にあり、添付の特許請求の範囲により保護されることが意図されている。また、本発明は、例示的な実施形態の細部が欠かせないことに制限されないことが意図されている。
【００１１】
従って、一態様において、遠隔転送およびトランスコーディング中にファイルを動的に利用可能にするための方法は、トランスコーディングする前に、ストリーミングできないメディアファイルをストリーミング可能フォーマットに変換し、取り込み及びトランスコーディングが完了する前に、トランスコーディングされたファイルをストリーミングすることを含む。ストリーミングできないメディアファイルの第１の部分が、トランスコーディングのために取り込みサーバにおいて受け取られる。その第１の部分がヘッダを含まないことを判断すると、メディアファイルのヘッダの推定位置が求められ、取り込みサーバにおいて、ファイルのヘッダ部分が受け取られる。第１のストリーミング可能セグメントを生成するために、第１の部分をヘッダの少なくとも一部と結合する。取り込みサーバにおいてメディアファイルの最後の部分を受け取る前に、第１のトランスコーディングサーバにおいて、第１のストリーミング可能セグメントがトランスコーディングされて、第１のトランスコーディングされたストリーミング可能セグメントが生成される。
【００１２】
一実施形態において、メディアファイルの第１の部分、及びメディアファイルのヘッダ部分が、遠隔サーバから受け取られる。
【００１３】
別の実施形態において、ヘッダの位置が、メディアファイルの第１の部分に基づいて求められる。
【００１４】
更に別の実施形態において、第１のトランスコーディングされたストリーミング可能セグメントが送信される。第１のトランスコーディングされたストリーミング可能セグメントの送信は、メディアファイルの最後の部分をトランスコーディングする前に行われ得る。第１のトランスコーディングされたストリーミング可能セグメントの送信は、取り込みサーバにおいてメディアファイルの最後の部分を受け取る前に行われ得る。
【００１５】
更なる具現化形態において、ストリーミングできないメディアファイルの第２の部分が、トランスコーディングのために取り込みサーバにおいて受け取られる。第２のストリーミング可能セグメントを生成するために、メディアファイルの第２の部分がヘッダの少なくとも一部と結合される。更に、第２のトランスコーディングサーバにおいて、第２のストリーミング可能セグメントがトランスコーディングされて、第２のトランスコーディングされたストリーミング可能セグメントが生成される。
【００１６】
一実施形態において、メディアファイルの第２の部分は、メディアファイルの第１の部分をトランスコーディングすることと同時に受け取られる。
【００１７】
別の実施形態において、メディアファイルの第２の部分は、メディアファイルの第１の部分をトランスコーディングすることと同時にトランスコーディングされる。
【００１８】
更に別の実施形態において、メディアファイルの第２の部分は、第１のトランスコーディングされたストリーミング可能セグメントを送信することと同時にトランスコーディングされる。
【００１９】
更なる実施形態において、ストリーミングできないメディアファイルの追加部分が、取り込みサーバにおいて受け取られ、それら追加部分は、メディアファイルが完全にトランスコーディングされるまで、１つ又は複数のトランスコーディングサーバにおいてトランスコーディングされる。ストリーミングできないメディアファイルの追加部分のそれぞれは、キーフレームから始まることができる。
【００２０】
別の態様において、遠隔転送およびトランスコーディング中にファイルを動的に利用可能にするためのシステムは、取り込みサーバ及びトランスコーディングサーバを含む。取り込みサーバは、ストリーミングできないメディアファイルの複数の部分をトランスコーディングのために受け取り、メディアファイルの第１の受け取り部分がヘッダを含むか否かを判断し、メディアファイルのヘッダの位置を求め、メディアファイルの、ヘッダを含むヘッダ部分を受け取り、第１のストリーミング可能セグメントを生成するために、メディアファイルの第１の受け取り部分をヘッダの少なくとも一部と結合するように構成されている。トランスコーディングサーバは、第１のストリーミング可能セグメントをトランスコーディングして、第１のトランスコーディングされたストリーミング可能セグメントを生成するように構成され、この場合、取り込みサーバがメディアファイルの最後の部分を受け取る前に、第１のストリーミング可能セグメントがトランスコーディングされる。
【００２１】
一実施形態において、メディアファイルの第１の部分およびメディアファイルのヘッダ部分が、遠隔サーバから受け取られる。
【００２２】
別の実施形態において、ヘッダの位置は、メディアファイルの第１の部分に基づいて求められる。
【００２３】
更に別の実施形態において、トランスコーディングサーバは更に、第１のトランスコーディングされたストリーミング可能セグメントを送信するように構成される。第１のトランスコーディングされたストリーミング可能セグメントの送信は、トランスコーディングサーバがメディアファイルの最後の部分をトランスコーディングする前に行われ得る。第１のトランスコーディングされたストリーミング可能セグメントの送信は、取り込みサーバにおいてメディアファイルの最後の部分を受け取る前に行われ得る。
【００２４】
更なる具現化形態において、システムは、第２のトランスコーディングサーバを含む。取り込みサーバは更に、ストリーミングできないメディアファイルの第２の部分をトランスコーディングのために受け取り、第２のストリーミング可能セグメントを生成するために、メディアファイルの第２の部分をヘッダの少なくとも一部と結合するように構成されている。第２のトランスコーディングサーバは、第２のストリーミング可能セグメントをトランスコーディングして、第２のトランスコーディングされたストリーミング可能セグメントを生成するように構成される。
【００２５】
一実施形態において、メディアファイルの第２の部分は、メディアファイルの第１の部分をトランスコーディングすることと同時に受け取られる。
【００２６】
別の実施形態において、メディアファイルの第２の部分は、メディアファイルの第１の部分をトランスコーディングすることと同時にトランスコーディングされる。
【００２７】
更に別の実施形態において、メディアファイルの第２の部分は、第１のトランスコーディングされたストリーミング可能セグメントを送信することと同時にトランスコーディングされる。
【００２８】
更なる実施形態において、ストリーミングできないメディアファイルの追加部分は、取り込みサーバにおいて受け取られ、メディアファイルが完全にトランスコーディングされるまで、１つ又は複数のトランスコーディングサーバにおいて追加部分がトランスコーディングされる。ストリーミングできないメディアファイルの追加部分のそれぞれは、キーフレームから始まることができる。
【００２９】
本発明の他の態様および利点は、以下の図面、詳細な説明および特許請求の範囲から明らかになるであろう。当該図面、詳細な説明および特許請求の範囲の全ては、単なる例示のために、本発明の様々な実施形態の特定の原理を示す。
【００３０】
本明細書の一部として含まれる添付図面は、上記で与えられた一般的な説明および以下で与えられる好適な実施形態の詳細な説明と共に、現時点で好適な実施形態を示し、本発明の原理を説明および教示するのに役立つ。
【図面の簡単な説明】
【００３１】
【図１】一実施形態による、本システムと共に使用するための例示的なトランスコーディングのアーキテクチャを示す図である。
【図２】一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な取り込み及び処理モジュールを示す図である。
【図３】一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な処理モジュールを示す図である。
【図４】一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な処理および供給モジュールを示す図である。
【図５】一実施形態による、本システムと共に使用するための例示的なコンピュータのアーキテクチャを示す図である。
【００３２】
留意すべきは、図面は必ずしも一律の縮尺に従わずに描かれており、類似した構造または機能の要素は一般に、図面の全体にわたって図示するために同様の参照番号により表される。また、留意すべきは、図面は、本明細書で説明される様々な実施形態の説明を容易にすることのみが意図されている。図面は、本明細書で開示された教示のあらゆる態様を必ずしも説明しておらず、特許請求の範囲を制限しない。
【００３３】
詳細な説明
本システムは、ビデオ又は音声ファイルが、遠隔源からの取り込みを含むトランスコーディングのプロセス中に、復号可能となることを可能にする。その結果は著しく低減された待ち時間であり、そのためトランスコーディング（及び／又は取り込み）が完了する前に、ファイルが何らかの他の目的（例えば、後処理）のために視聴または復号され得る。
【００３４】
以下は、本開示の全体にわたって使用される用語集である：
ヘッダー（headers）：データの残りの部分を記述する、ファイルに含まれる（メタ）データであり、ファイルの残りの部分にあるデータタイプの標識、及びファイル内のデータのレイアウトに関する構造的情報を含むことが多い；
ＭＰ４：音声及びビデオストリームの記憶に一般に使用される汎用ＩＳＯベースのメディアコンテナファイルのフォーマット；
ボックス（box）：ＭＰ４ファイルにおける、特定の（メタ）データ；
ティーコマンド（tee command）：入力のストリームを取り込んで２つのコピー（１つはディスク上のファイルに対して、及び１つは出力ストリームに対して）を書き出す関数；
パイプ（pipe）：１つのプロセスの出力ストリームを取り込んで、それを別のプロセスの入力ストリームへ送るオペレーティングシステムレベル（制限されたサイズ）のバッファ；
Fifo：パイプのようにふるまう特殊ファイル（即ち、先入れ先出し）であり、それと相互作用するプロセスが通常のファイルアクセスのコマンドでそれにアクセスできることを除いたもの。Ｆｉｆｏは、書き込みプロセスがそれを書き込みだけのストリームとして識別し、読み出しプロセスがそれを読み出すだけのストリームとして識別する点で制限される；
ランダムアクセス：ファイル／ストリームデータの順番にファイル／ストリームを読み出す（又はストリームを書き込む）代わりに、データが、異なった時間にバラバラの順序でファイルの様々な部分に対して読み／書きされ得る；
キャット（cat）：入力ストリーム又はディスク上のファイルからデータを読み出し、当該データを出力ストリームへ書き込む関数。キャットは、複数のファイルを読み出してそれらを連続的に、それ故に名前（「連結」から）を出力することができる；
テール（tail）：ファイルの終端部からデータを読み出し（デフォルト又は前もって指定された点から始める）、それを出力ストリームに書き込み、オプションとして「追従」モードに置かれることができ、その結果、ファイルが書き込まれる際に、それがもっと多くのデータを読み出してそのデータを出力し続ける関数；
Lsof：システムのプロセスにより開かれるファイルを列挙する関数。様々なオプションは、単一のファイルのプロセスのみを列挙させる、リストからのプロセスを除外する、更新されたリストを定期的に出力するように継続的に実行する、及びひとたび出力するリストが空になった場合に実行を停止するように指定され得る。
【００３５】
一実施形態に従って、本システムにより、ビデオ及び／又は音声ファイルが、トランスコーディングのプロセス中に、及び／又は当該ファイルが取り込みのために遠隔システムから転送されている間に、転送、復号、視聴、又は使用されることを可能にする。理解されるべきは、本開示は一例としてビデオを利用するが、本システムはビデオ、音声、及び他のメディアファイルに適用可能である。従って、本明細書で使用される限り、ビデオは、任意のビデオ、音声（オーディオ）、又は本明細書に記載された技術が適用され得る他のメディアファイルを意味する。
【００３６】
一実施形態に従って、本システムにより、ビデオは、トランスコーディング及び／又は取り込みが完了する前に、任意のビデオストリーミングの機構、例えばRTP、RTMP、HTTP Live Streaming、HTTP Dynamic Streaming、Smooth Streaming又はMPEG DASHを用いることによって視聴または使用されることを可能にする。
【００３７】
一実施形態に従って、本システムは、ビデオの個々のユーザによる、ジャストインタイムで決定された要求または設定に基づいて符号化する（例えば、９５０kbit／sになるユーザの帯域幅を検出して、そのユーザ専用にビデオのカスタムバージョンを符号化する）、及びオプションで符号化されたファイルを他のユーザのためにキャッシングすることを可能にする。
【００３８】
一実施形態に従って、本システムは、フォーマット（例えば、ISOメディア、MP4）を用いて、終端部にヘッダデータを有するファイルをオンザフライで書き換えて、ファイルが本プロセスを用いてトランスコーディング及び視聴されることを可能にするために、全ファイルがダウンロードされる前にファイルの前部にこれらヘッダを移動することを可能にする。
【００３９】
一実施形態に従って、本システムは、（１）ファイルをできるだけ早く転送し、トランスコーディング装置が各セクションに取り掛かる時までに順繰りにバイトを送出することを保証する（転送がボトルネックの場合）ために、又は（２）帯域幅を絞る（トランスコーディングがボトルネックの場合）ために、ダウンロード接続の数、及び各接続によりダウンロードされるバイト幅を動的に調整することを可能にする。
【００４０】
一実施形態に従って、本システムは、ユニックス（Unix）（登録商標）の「cat」及びユニックス（登録商標）の「tail-f」に類似した機能を利用することにより、ファイルが依然として書き込まれている間に、パイプにファイルをストリーミングする（Streaming File Reader）。本システムは、出発点から順にディスクからファイルを読み出し、他のプロセスへパイピングされ得る出力ストリームにそれを出力する。システムが停止の代わりに特定の外部信号を受け取る場合、「追従（follow）」モードがオフにされる。このように、システムがファイルから全データを既に読み出し／処理した場合、それは即座に終了するが、ファイルに更なるデータが存在する場合、それはファイルの終端部に到達するまで読み出し／処理を継続する。これは、データが別のプログラムに依然としてストリーミングされ得るという理由で、ファイルが書き込まれている際に即座にStreaming File Readerを出ないという問題を解決する。
【００４１】
本システムは、「lsof」のプログラム又は類似した関数を用いることにより、及びStreaming File Readerが特定のファイルにアクセスする唯一のプログラムになるまで（その時点で全部のファイルが書き込まれているとみなされ得る）、コマンドが待つようにlsofのオプションを調整することにより、ファイルが依然として書き込まれているか否かを判断する。その時点で、システムはファイルの読み出しを停止する。
【００４２】
本システムは、ファイルが依然としてトランスコーディングされている又は変更されている間に、ファイルが別のアプリケーションにストリーミングされる必要がある任意の状況において有用であることがわかる。例には、（１）遠隔サーバから転送されている間に、転送プロセスからのファイルをトランスコーディングプロセスへストリーミングすること（ファイルを１つ又は複数の遠隔トランスコーディングサーバにストリーミングすることを含む）、（２）ビデオ復号プロセスからビデオ符号化プロセスへ又はトランスコーディングプロセスから転送プロセスへストリーミングするような、第１のプロセスが依然として生じている間に１つのビデオ処理プロセスから別のプロセスにファイルをストリーミングすることが含まれる。
【００４３】
一実施形態に従って、本システムは、ファイルの出発点にヘッダを有していないメディアファイルを再構成または再構築し、ストリーミングの態様で依然としてそれらを処理することができる。
【００４４】
幾つかのファイルフォーマットは、ファイルの終端部にヘッダを有することができ、それは、ファイルが順繰りにダウンロードされる場合に、処理を始めるために必要な情報は、ファイルが完全にダウンロードされるまで利用できないという意味である。以下の説明において、一般的なMP4スタイルのフォーマットが使用されるが、当該特徴は類似した構造を有する他のファイルフォーマットに適用可能である。
【００４５】
一実施形態に従って、本システムは、ファイルが転送される際にファイルの出発点を分析し、ヘッダがその出発点において利用可能であるか否か、又はヘッダがファイルの他の場所にあるか否かを判定する。ヘッダがその出発点にない場合、別個の転送プロセスが起動されて、ファイルからヘッダを検索する。ヘッダは、ファイルが転送される際にファイルから読み出される／書き込まれるストリームへ書き換えられて先頭に追加される。
【００４６】
これらのステップは、全ファイルが転送される前にファイルを処理することを行う。当該ステップは以下に詳述される。
【００４７】
１．ヘッダがファイルの出発点にあるか否かを判断
本システムは、少なくとも１つの「moov」又は「mdat」ボックスを探索するために、必要なだけのファイルがダウンロードされるまで待機する。「moov」ボックスはヘッダを包含し、「mdat」ボックスはメディアデータを包含する。ほとんどの場合、これらボックスのそれぞれの１つのみがMP4ファイルに存在する。「moov」ボックスがファイルにおいて「mdat」ボックスに先行する場合、ヘッダは出発点にあり、更なる作業が行われる必要はない。「mdat」ボックスが「moov」ボックスに先行する場合、最初に、ファイルを転送するための時間が、書き換えるのに値する特定の閾値を上回るか否かが判定される。これは、ファイルサイズ及び現在の転送速度に基づいて計算される。（ヘッダがファイルの終端部に配置される場合、「mdat」ボックスはデータの前に列挙されたそのサイズを有する）。ファイルを書き換えるのに値すると判定される場合、本システムは、「mdat」ボックスのサイズを使用して、「moov」ボックスの位置を求める（恐らくは、他のメタデータが先行する又は後続する）。当業者ならば理解されるように、ファイルが書き換えるのに値するか否かを判定するための様々な他の方法が利用可能である。
【００４８】
２．ファイルの他の場所からヘッダをダウンロードするための別個のプロセスを起動
本システムは最初に、転送プロトコルが、部分的ファイルをダウンロードすることをサポートするか否かを判定する。そうであるならば、本システムは、「moov」ボックスが始まるべきである場所が求められた位置／オフセットを使用して、別個のスレッド／プロセスにおいて、そのオフセットから始めてファイルの終端部または「moov」ボックスの終端部まで継続して部分的ファイルをダウンロードする。転送は、ファイルの他の部分の転送と同時に行われ得る。次いで、本システムは、この部分的ファイルが有効なMP4ボックスを包含するか否かを確かめるために当該ファイルを検査し、そうであるならば、「moov」ボックスが予想通りに出現するか否かを確かめる。そうであるならば、本システムは、別個のプロセスにおいて、これらヘッダを書き換えることにより継続する。
【００４９】
３．ヘッダを書き換えて、それらをストリームの先頭に追加
本システムは、データの各チャンクのファイルオフセット位置の全てを再計算する。その理由は、先頭に追加されたヘッダが各チャンクに対するファイル内の絶対的オフセットを変更するからである。これは、データチャンクのオフセットを調整するための最終量として、別個にダウンロードされたヘッダのサイズに、少量のバッファ空間、並びに「mdat」ボックスに先行する任意の他の初期データを加えたものを用いることにより、計算される。新たなヘッダを作成するために、本システムは、ダウンロードされたファイルの出発点から「ftyp」ボックスで始まる新たなファイルを作成し、「moov」ボックスの内部におけるヘッダのツリー内のどこかに指定された各データチャンクの位置に対して事前に計算された調整値を追加することにより、「moov」ボックスを書き換える。元のファイルの「mdat」ボックスに先行する任意のデータのサイズに加えて、追加される少量のバッファ空間を考慮するサイズを有する「空の」ボックスが追加される。これは、ラインに沿って他の処理ソフトウェアを混乱させるかもしれないファイル中の任意の他のヘッダを無視することを容易にする。最後に、追加されるバッファ空間の残りのサイズを考慮するために、ゼロが新たなヘッダファイルの終端部に追加される。次いで、データファイルを読み出す際に、代わりに新たなヘッダファイル及び元のデータファイルの双方を一緒に交互に読み出すように、主処理スレッドの構成が変更される。従って、それは、まるでヘッダがファイルの出発点にもともとあったように、他のソフトウェアに見える。
【００５０】
また、主処理スレッドは、ファイルのヘッダが書き換えられるときはいつも追加のステップも実行する。それは、新たなヘッダ及び元のファイルをオンディスク（on-disk）の１つの新たなファイルへ結合するが、元のデータファイルから元の「moov」ボックスを除外する。その理由は、ランダムアクセスモードでファイル全体を読み出すソフトウェアがファイルの出発点におけるものよりも信頼できるものとして、ファイルの終端部における「moov」ボックスを考える可能性があるからである。この新たなファイルは、任意の更なるオンディスク処理に使用され、並びにヘッダの書き換えが後続の処置中に必要ないように、ファイルの信頼できるキャッシュバージョンとしての機能も果たす。
【００５１】
本システムの利点は、遠隔サーバからのトランスコーディング及び／又は取り込みが完了する前に、様々な目的（例えば、ストリーミングしている間に再生のためにファイルを復号）のために、トランスコーディングされたファイルの視聴または他の使用を可能にすることを含む。言い換えれば、ファイルの一部は、取り込みのためにファイルの最後の部分を受け取る前に、トランスコーディングされ得る。本明細書で説明されたように、ストリーミング可能でないフォーマット（例えば、ファイルの出発点にヘッダを備えていないもの）は、トランスコーディングする前に、ストリーミング可能なフォーマットへと処理を施される。理解されるべきは、本明細書で説明された技術は、ファイル内の任意の位置にヘッダを備えるものを含む、様々なストリーミング可能およびストリーミングできないメディアフォーマットに適用可能である。
【００５２】
本システムの更なる利点は、ユーザがトランスコーディングされたバージョンを実際に再生しようと試みるまで、顧客がそのコンテンツをトランスコーディングすることを保留することを可能にすることを含む。これは、必要とされるトランスコーディングの総量を低減する（例えば、幾つかのバージョンは一度も再生を要求されないかもしれない）。更に、これは、元のビデオ及びそのトランスコーディングされた全バージョンに必要とされる総記憶容量も低減する。
【００５３】
本システムの更なる利点は、所望される的確な送信状況に基づいて、解像度およびビットレートに関する決定をオンデマンドで行うことを可能にすることを含む。例えば、ユーザが９５０kbpsの利用可能な帯域幅を備えるコンピュータを動作させ、コンピュータ上で再生するためにビデオを要求していると仮定する。一実施形態によれば、本システムは、ユーザコンピュータの９５０kbpsの帯域幅を検出し、その的確なビットレートで新たなバージョンをトランスコーディングし、９５０kbpsのバージョンを即座に再生し始める。次いで、このトランスコーディングされたファイルは、次のユーザによる再利用のためにキャッシュされる。帯域幅／ビットレートに加えて、システムは、解像度、ビデオ／音声コーデック、ビデオ／音声コーデックのプロファイル、及びストリーミングフォーマットのような広範にわたる他の要因に基づいて、オンデマンドでカスタムバージョンをトランスコーディングする。
【００５４】
本システムの更なる利点は、改善された符号化ソフトウェア及び／又は全部のコンテンツのライブラリを再符号化しない設定の即時の利用を可能にすることを含む。
【００５５】
図１は、本システムと共に使用するための例示的なトランスコーディングのアーキテクチャを示す。トランスコーディングのアーキテクチャは、トランスコーディングを要求するファイルが存在する出所システム２０２を含む。ファイルがトランスコーディングシステム２０１にアップロードされ、ファイルがトランスコーディングされている間、部分的にトランスコーディングされたファイルが宛先システム２０５へ供給（送信、配信）される。
【００５６】
図２は、一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な取り込み及び処理モジュールを示す。データが処理される際、それは、矢印により示された方向にストリーミングされ、そのようなものだから、各ステップは、前のステップを完了するまで待つことなしに、並列にデータの一部に実行され得る。一実施形態によれば、ビデオファイルは出所システム２０２に存在する。ビデオファイルはトランスコーディングシステム２０１に転送される（ステップ３０１）。ビデオファイルは、出所システム２０２からのダウンロード（プル）
を介して、又出所システム２０２からトランスコーディングシステム２０１へのアップロード（プッシュ）を介して転送される。ビデオファイルが転送される際、ファイルが、１つ又は複数の取り込みサーバ２０３内のローカルファイルに書き込まれる（ステップ３０２ａ）。ファイルの書き込みと同時に（又は並列に）（ステップ３０２ａ）、ファイルが取り込みサーバ（単数または複数）２０３へ依然として転送されている間に、ファイルは、１つ又は複数のトランスコーディングサーバ２０４においてビデオのトランスコーディングソフトウェアへストリーミング（ステップ３０２ｂ）される。
【００５７】
図３は、一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な処理モジュールを示す。データが処理される際、それは、矢印により示された方向にストリーミングされ、そのようなものだから、各ステップは、前のステップを完了するまで待つことなしに、並列にデータの一部に実行され得る。処理中、受け取られたビデオ（又は音声（オーディオ））ファイルが、独立した個々のストリーム（ビデオ、音声、又はその他）へ逆多重化（分離）される（ステップ３０３ａ）。一例として、受け取られたMP4ファイルは、MP3及びH.264トラックを含み、個々のMP3及びH.264トラックが抽出される。次いで、分離されたストリームが並列にトランスコーディングされる（ステップ３０３ｂ）。先の例を続けると、MP3オーディオはAACオーディオにトランスコーディングされ、（並列に）５MbpsのH.264オーディオは２MbpsのH.264ビデオにトランスコーディングされる。新たにトランスコーディングされた個々のストリームは、結合される（又は多重化される）（ステップ３０３ｃ）。先の例を続けると、トランスコーディングされたH.264及びAACトラックは、MPEG-TSファイルへ結合される。必要に応じて、結合されたファイルは、後処理され、セグメント化され、又はストリーミングのために準備される（ステップ３０３ｄ）。先の例を続けると、MPEG-TSファイルは、ＨＴＴＰライブストリーミングのために１０秒のセグメントへセグメント化される。これは、１つ又は複数のトランスコーディングされたメディアファイル又は漸進的に更新されたストリーミングのマニフェストを含む完成ファイルという結果になる（ステップ３０３ｅ）
【００５８】
図４は、一実施形態による、本システムと共に使用するためのトランスコーディングのアーキテクチャに関する例示的な処理および供給モジュールを示す。トランスコーディングシステム２０１は、全ファイルがトランスコーディング（ステップ３０３ａ〜３０３ｅ）を終了する前、又は全ファイルが出所サーバ２０２から転送される前でさえ、完成したビデオを漸進的に供給する（ステップ３０４）。供給（３０４）は、遠隔サーバへのストリーミング、遠隔サーバへのアップローディングにより、又はファイルをローカルサーバ（２０５、２０５ａ、２０５ｂ）でダウンロード又はストリーミングに使用可能にすることにより達成される。
【００５９】
一実施形態によれば、トランスコーディングシステム２０１は、Apple HTTPライブストリーミングのようなセグメント化ストリーミングフォーマットを出力する。この場合、ビデオトランスコーディングシステム２０１は、HTTP Live Streaming又はMPEG DASHのセグメント化バージョンのようなセグメント化フォーマットを用いて、ビデオを複数のセグメントへ出力する（例えば、６０秒のビデオは、ビデオの６個の個別的な１０秒のセグメントとして出力される）。個々のビデオセグメントは、各セグメントが完了した後すぐに遠隔サーバにアップロードされるか、又はセグメントがローカル的にホストされてローカルサーバから即座にダウンロードのために使用可能にされる。また、ビデオトランスコーディングシステム２０１は、ストリーミングマニフェストのファイル（例えば、HTTP Live Streaming用のM3U8ファイル）も出力し、トランスコーディングが完了する前にファイルをユーザダウンロードのために使用可能にする。トランスコーディングシステム２０１は、それぞれの新しいセグメントが完了した後（しかし、全ファイルがトランスコーディングを終了する前）にストリーミングマニフェストに列挙されるように、新たなストリーミングセグメントが終了する際に、ストリーミングマニフェストを漸進的に更新する。
【００６０】
一実施形態によれば、トランスコーディングシステム２０１が、ファイルの終端部にヘッダ（例えば、moov atom）を有するMP4ファイルのような、ファイルの前部にファイルメタデータを備えていない遠隔ファイル（又はその一部）を受け取る場合、トランスコーディングシステム２０１は、第２の独立したダウンロードを開始し、ファイルのどこかよそからヘッダを検索する。場合によっては（例えば、ISOメディア）、ヘッダの位置は、ダウンロードする際に遠隔ファイルの開始点を解析し、この開始点データに基づいてヘッダの位置を求めることにより、求められる。次いで、トランスコーディングシステム２０１は、元のファイルに実質的に等しいが、デコーダへストリーミングされ得るビデオを生成するために、ファイルの前部に再構築されたヘッダを備える新たなファイルを動的に作成する。例えば、ファイルの終端部にmoov atomを備えるMP4ファイルが与えられた場合、トランスコーディングシステム２０１は、ファイルの前部（動画データ、又はmdat atom）及びファイルの終端部（moov atom）を同時にダウンロードし、前部に再構築された有効なmoov atomを備える新たなMP4ファイルを作成し、この場合、mdat atomは、ダウンロードされる際に新たなファイルに添付される。次いで、この新たに再構築されたファイルは、ビデオトランスコーディングのソフトウェアへ同時にストリーミングされる。再構築されたファイルのトランスコーディングは、ファイルの取り込みと、他の再構築されたファイルのトランスコーディングと、及び／又はトランスコーディングシステム２０１のトランスコーディングサーバ（単数または複数）からの再構築されたファイルの転送と同時に行われ得る。
【００６１】
一実施形態によれば、トランスコーディングシステム２０１へストリーミングされる遠隔ファイルは不完全である。このバージョンにおいて、ファイルはトランスコーディングシステム２０１へ転送されるが、依然として出所システム２０２へストリーミングされており、トランスコーディングシステム２０１は、ファイルが依然として出所システム２０２へ転送されている（取り込まれている）間でさえ、ファイルの一部をトランスコーディングして供給する。
【００６２】
一実施形態によれば、１つの遠隔ファイルが複数の派生物にトランスコーディングされる。ディスクに保存することは、ローカルファイルシステムを介してではなくて、ネットワークを介して行われる。言い換えれば、遠隔ファイルは、トランスコーディングシステム２０１のネットワーク内の単一サーバに転送され、ビットが転送される際、ビットは複数のトランスコーディングサーバ２０４に漸進的にストリーミングされ、その結果、二つ以上のサーバ２０４が、出力のために１つ又は複数のトランスコーディングされたファイルへと元のファイルを同時にトランスコーディングし、当該１つ又は複数のトランスコーディングされたファイルのそれぞれは、本トランスコーディングプロセスの残りの部分に続く。
【００６３】
一実施形態によれば、本トランスコーディングプロセスは、HTTP Live Streaming、HTTP Dynamic Streaming、Smooth Streaming、MPEG DASH、RTMP及びRTSPを含む広範にわたるストリーミングフォーマットへ出力する。
【００６４】
一実施形態によれば、本トランスコーディングプロセスは、操作者により、又はAPI呼出しを介した別のソフトウェアシステムによりトリガされる。
【００６５】
一実施形態によれば、本システム内の不完全なファイルは、トランスコーディングシステムから供給されて、より永続的な記憶位置に供給されることを同時に行う。
【００６６】
一実施形態によれば、ファイルが、本トランスコーディングのメカニズム中に符号されることができない場合（例えば、フォーマットがデコーダへストリーミングされることができない場合、又はエンコーダからストリーミングされることができない場合、又は第２のパスの前に第１のパス全部を完了することを必要とする態様において符号化（エンコーディング）の２つのパスを要求する場合）、システムは自動的に、プロセスのその部分に関する従来のトランスコーディング手法に対してフェイルオーバーする。本トランスコーディングメカニズムの他の部分は、依然として使用される。例えば、符号化が完了する前に再生または復号を可能にする態様でシステムから、出力ファイルがストリーミングされることができない場合（例えば、トランスコーディングの後にファイルの前部に移動されたmoov atomを有するMP4出力の場合）、プロセスの他の部分は継続し、これは、インバウンド転送プロセス中にファイルを復号する効率に起因して、全体の処理がより速くなるという結果になる。
【００６７】
一実施形態によれば、ファイルは、マルチパス符号化（２つ以上のパス）を用いて符号化される。この場合、第２のパスは、第１のパスが完了するまで待つ必要があるかもしれないが、本トランスコーディングメカニズムの他の態様は継続し、ファイルは依然として、最後のパスが完了する前に（たとえ第１のパスが完了する前でなくても）再生可能である。
【００６８】
一実施形態によれば、マルチパスの各パスの符号化は、実際には完了している前のパスの大部分を、後のパスが使用することを可能にするように、並列に実行される。例えば、２つのパスの符号化を仮定すると、第１のパスがより速いペースで実行されることができ、第２のパスが開始する際に、第２のパスがファイル（しかし、完成したファイルではない）の一部に関する第１のパスの分析データを有するように、ヘッドスタート（head start）を与えられ得る。第１のパスが実行する際、第２のパスが漸進的により多くのデータを受け取る。これは、第２のパスが扱うデータがより少ないが、第１のパスのより少ない待ち時間という結果になることから、ビット配置の効率が僅かに少ないという結果になるかもしれない。
【００６９】
一実施形態によれば、ビデオの個々のフレームは、トランスコーディングのプロセス中に漸進的にイメージとしてエクスポートされる。例えば、システムは、フレーム３００が復号される（しかし残りのフレームが全て復号される前に）とすぐに、PNGファイルとしてフレーム３００をエクスポートすることができる。このエクスポートされたイメージファイルは即座に、視聴のために利用可能にされる得るか、及び／又は遠隔システムに転送され得る。
【００７０】
一実施形態によれば、入力または出力のファイル転送は、あまりにも遅くて、本トランスコーディングシステムを通じて形成されるファイルのリアルタイム再生または復号を可能にすることができない。この場合、ファイルは、本トランスコーディングシステムを用いて処理され、より遅いレートでの復号に使用可能である。
【００７１】
一実施形態によれば、本トランスコーディングシステムは、コンテンツを供給するためのビルトインサーバを含む。例えば、システムは、HTTPベースの供給用のHTTPサーバ、又はRTMP／RTSPストリーミング供給用のRTMP／RTSPサーバを含むことができる。
【００７２】
一実施形態によれば、本トランスコーディングシステムは、要求された際にファイルを符号化し、最適な記憶コスト及び符号化コストを可能にするために一定期間にわたって、符号化されたファイルをキャッシュするホストティングシステム又は出所サーバと結合される。例えば、ファイルが一度だけ要求された場合、それは符号化されるべきであり、キャッシュされるべきではない。ファイルが何度も要求された場合、それは再びトランスコーディングされる必要がないように、キャッシュされるべきである。
【００７３】
一実施形態によれば、本システムは、ダイナミック（動的）転送最適化をサポートする。単一の接続を介して、又はファイルの終端部にヘッダを有するファイルの場合には２つの接続を介して遠隔ファイルをダウンロードする代わりに、本システムは、より迅速にファイルをダウンロードするために複数の接続を利用する。この場合、各接続により取り出されるバイト範囲は、より速い接続によりダウンロードされたビット間のギャップの故に、ビデオが決してバッファリングする必要がないことを確実にするためにトランスコーディング速度および転送速度に基づいて動的に決定され得る。この方法は、転送ができるだけ速く生じることを確実にし、トランスコーディング装置に対するボトルネックにならない。
【００７４】
一実施形態によれば、本システムは、様々なワークフローの細部を含む。１秒当たりＸフレームでダウンロードし、１秒当たりＹフレームでトランスコーディングするファイルを想定すると、本トランスコーディングシステムは、ファイルの出発点に関して１つのダウンロード接続を開く。本トランスコーディングシステムは、必要に応じて、ファイルの終端部にあるヘッダを検索する（取り出す）ために第２のダウンロード接続を開くことができる。ひとたびシステムが適切な転送レート及びトランスコーディングレートを確立したならば、ダウンロード接続の最適な数および分配が決定される。例えば、１つの接続がビデオの０〜1,000,000バイトをダウンロードするべきであり、第２の接続が1,000,001〜1,500,000バイトをダウンロードするべきであると決定され得る。転送速度およびトランスコーディング速度に基づいて、システムは、1,000,000バイトに達する前に遮断しない。システムは、バッファリングなしにビデオを順繰りに供給することを確実にするために、新たな接続を適宜に開始および停止することができる。
【００７５】
できる限り迅速に遠隔ファイルをダウンロードする代わりに、システムは、実際のトランスコーディング速度または供給（送出）速度に適合するようにダウンロードを減速することを決定することができる。言い換えれば、トランスコーディング装置が５００kbit／sでトランスコーディング又は供給することだけでき、システムが最高２０００kbit／sで転送することができる場合、システムは、ネットワーク帯域幅を維持するために５００kbit／sまでインバウンド転送を遅くすることを決定することができる。
【００７６】
一実施形態によれば、転送がトランスコーディングよりも遅い場合、第１の方法が使用される（順序正しい供給を保証しながら、より迅速にダウンロードするために複数の接続を用いる）。トランスコーディングが転送よりも遅い場合、第２の方法が使用される（トランスコーディング速度に適合するために転送を減速する）。
【００７７】
未完成で進行中のトランスコーディングされるファイルは、幾つかの方法で再生可能にされ得る。ファイルは、トランスコーディングシステムから別のサーバへHTTP又はFTPを介してストリーミングされ得る。例えば、トランスコーディングソフトウェアの出力は、利用可能になるとすぐに宛先サーバへトランスコーディングされたビットを供給することができるアップロードソフトウェアへ直接的にパイピング又はストリーミングされ得る。次いで、宛先サーバは、HTTP又はストリーミングサーバを用いることにより、部分的なファイルを再生可能にする役割を果たすことができる。代案として、トランスコーディングシステムは、未完成のトランスコーディングされたファイルに対してローカルなサーバ（例えば、HTTP又はRTMPサーバ）を走らせることにより、未完成でありながら部分的なファイルをストリーミング出力することができる。再生装置は、トランスコーディングプロセス中、この一時的な場所を参照する。トランスコーディングが完了し、最後のファイルがその最終場所に供給された場合、トランスコーディングシステムは、新たなURL（完成したファイルのURL）を再生システムに知らせて、次いで再生システムは新たなURLを用いて切り替わる。この時点で、トランスコーディングシステム上の一時的なファイルは除去され得るか、又は一定期間にわたってキャッシュされ得る。
【００７８】
ISOメディア（MP4）のようなフォーマットの供給（送出）はより困難である。その理由は、これらのフォーマットが、トランスコーディングが完了した際に書き込まれる必要がある１つの場所にヘッダを有し、ファイルの前部に移動される必要があるかもしれないからである。以下は、このプロセスをISOメディア（MP4）出力に適用するためのメカニズムを示す。
【００７９】
トランスコーディングされるファイルが、マルチパートのアップロードメカニズムを用いてアップロードされる。トランスコーディングシステムは、最後のmoov atomのサイズを推定し、最後のファイルの前部にその空間を確保しておく。動画データ（mdat atom）のトランスコーディングされる部分は、最後の宛先サーバに最初にアップロードされる。
【００８０】
トランスコーディングが完了した場合、moov atomは、ファイルの前部にアップロードされる。前のステップが成功した場合、この時点で、有効な「ファストスタート（faststart）」MP4ファイルが今、遠隔サーバ上に存在する（即ち、ストリーミング又は漸進的なダウンロードを可能にするために、ファイルの前部に移動されたmoov atomを備えるMP4ファイル）。moov atomのために確保された空間が不十分である場合には、moov／mdatヘッダが書き換えられて、全ファイルが再アップロードされる。
【００８１】
MP4を再生可能にするために、トランスコーディングシステムは、最後のmoov atom のサイズを推定し、できる限り多くの前もって推定することができる情報で仮のmoov atomを書く。十分な情報が書き込まれて、前部の仮のmoov atomでMP4ファイルを再生可能にする。
【００８２】
一実施形態によれば、トランスコーディングプロセスは、以下のように並列化される。プロセスの開始点において、トランスコーディングシステムは、ファイルのメタデータを、例えばヘッダを介して検索する。様々なフォーマット（Parallel Format）に関して、システムは、キーフレームの位置に関する情報を検索することができる。トランスコーディングシステムは、このキーフレーム情報を用いて、複数のコンピュータ上にファイルの有効なセグメントをダウンロードし、この場合、各セグメントはキーフレームを始める。必要に応じて（例えば、MP4コンテンツの場合）、各コンピュータも、ファイルのヘッダをダウンロードし、より短いけれども復号可能なファイルを形成するためにファイルの何らかの有効なセグメントと共に、元のファイルからのmoov atomを結合することにより、有効なファイルを動的に再構築する。次いで、この動的に再構築されたセグメントは、トランスコーディングシステムへ入れられて、上述されたように処理される。各セグメントは、マルチパートアップロードを用いて遠隔サーバへアップロードされる。各セグメントのアップロードが完了した場合、サーバは単一の有効なファイルを有する。
【００８３】
代替の実施形態において、ファイルが転送される際に同時に処理される目的（全ファイルに対するランダムアクセスを必要とする代わりに、ファイルの順序正しいストリーミングを介した処理を可能にする任意のプロセス）に応じて、転送の最適化が使用される。
【００８４】
図５は、一実施形態による、本システムと共に使用するための例示的なコンピュータのアーキテクチャを示し、本明細書で説明されたサーバ及びシステムは、例示されたアーキテクチャに従って実現され得る。アーキテクチャ５００の一実施形態は、情報を伝えるためのシステムバス５２０、情報を処理するための、バス５２０に結合されたプロセッサ５１０を含む。アーキテクチャ５００は更に、情報、及びプロセッサ５１０により実行されるべき命令を格納するためにバス５２０に結合されたランダムアクセスメモリ（ＲＡＭ）又は他の動的記憶デバイス５２５（本明細書においてメインメモリと呼ぶ）を含む。また、メインメモリ５２５は、プロセッサ５１０による命令の実行中に一時的な変数または他の中間情報を格納するためにも使用され得る。また、アーキテクチャ５００は、静的情報およびプロセッサ５１０により使用される命令を格納するために、バス５２０に結合された読み出し専用メモリ（ＲＯＭ）及び／又は他の静的記憶デバイス５２６も含むことができる。
【００８５】
また、磁気ディスク又は光ディスク及びその対応するドライブのような、データ記憶デバイス５２７も、情報および命令を格納するためにコンピュータシステム５００に結合され得る。また、アーキテクチャ５００は、Ｉ／Ｏインターフェース５３０を介して第２のＩ／Ｏバス５５０にも結合され得る。複数のＩ／ＯデバイスがＩ／Ｏバス５５０に結合されることができ、複数のＩ／Ｏデバイスには、ディスプレイ装置５４３、入力デバイス（例えば、英数字入力デバイス５４２及び／又はカーソル移動制御デバイス５４１）が含まれる。
【００８６】
通信デバイス５４０は、ネットワークを介して他のコンピュータ（サーバ又はクライアント）に対するアクセスを可能にする。通信デバイス５４０は、イーサネット（登録商標）、トークンリング、又は他のタイプのネットワークに結合するために使用されるもののような、１つ又は複数のモデム、ネットワークインターフェースカード、無線ネットワークインターフェース又は他のよく知られたインターフェース装置を含むことができる。
【００８７】
上記の説明において、単なる説明のために、本開示の完全な理解を提供するための特定の学術用語が記載されている。しかしながら、当業者には明らかなように、これら特定の細部は、本開示の教示を実施するために必要ではない。
【００８８】
本明細書の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビットに基づく演算の記号的表現およびアルゴリズムに関して提示されている。これらアルゴリズムの説明および表現は、データ処理の働きの中身を当業者に最も効果的に伝えるためにデータ処理技術の当業者により使用される手段である。アルゴリズムは本明細書において及び一般的に、所望の結果をもたらす首尾一貫した一連のステップとなるように表される。ステップは、物理量の物理的な操作を必要とするものである。一般に、必ずというわけではないが、これらの量は、格納され、転送され、結合され、比較され、及び操作されることができる電気信号または磁気信号の形態をする。主に一般的な使用の理由で、これら信号を、ビット、値、要素、記号、文字、用語、数字等として表すことが、時には便利であることは明らかである。
【００８９】
しかしながら、留意すべきは、これらの用語および類似の用語の全ては、適切な物理量に関連付けられるべきであり、これら量に適用される都合の良い単なる呼び名である。以下の説明から明らかなように特に明記しない限り、「処理」又は「コンピューティング」又は「計算」又は「判断（決定、求める）」又は「表示」等のような用語を利用する考察、説明はあらゆる点で、コンピュータシステム又は類似の電子コンピューティング装置の動作およびプロセスを意味することを理解すべきであり、当該コンピュータシステム又は類似の電子コンピューティング装置は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表されるデータを、コンピュータシステムのメモリ又はレジスタ又は他の係る情報記憶装置又は伝送装置又はディスプレイ装置内の物理量として表される類似した他のデータへ操作および変換する。
【００９０】
また、本開示は、本明細書の動作を実行するための装置に関係する。この装置は特に、必要な目的のために構築されることができ、又はコンピュータに格納されてプロセッサにより実行されるコンピュータプログラムにより、選択的に付勢または再構成される汎用コンピュータを含むことができる。係るコンピュータプログラムは、以下に制限されないが、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、及び光磁気ディスクを含む任意のタイプのディスク、コンピュータシステムのバスにそれぞれ結合された、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、又は電子命令を格納するのに適した任意のタイプの媒体のような、コンピュータ可読記憶媒体に格納され得る。
【００９１】
本明細書で提示されたアルゴリズムは、任意の特定のコンピュータ又は他の装置に本質的に関係しない。様々な汎用システム、コンピュータサーバ、又はパーソナルコンピュータが本明細書の教示に従ってプログラムと共に使用されることができ、必要な方法のステップを実行するために、より専用の装置を構築することが便利であることは明らかである。様々なこれらシステムに必要な構造は、本明細書の説明から明らかであろう。様々なプログラミング言語が、本明細書で説明されたような開示の教示を実現するために使用され得ることは理解されるであろう。
【００９２】
更に、代表的な例および従属請求項の様々な特徴は、本教示の更なる有用な実施形態を提供するために、特に及び明確に列挙されない方法で結合され得る。また、特に留意すべきは、全ての値の範囲、又はエンティティのグループの表示は、元の開示のために、並びに特許請求の範囲に記載された内容を制限するために、あらゆる考えられる中間値、又は中間のエンティティを開示する。また、特に留意すべきは、図面に示されたコンポーネントの寸法および形状は、本教示を如何にして実施するかを理解するのに役立つように設計されているが、例に示された寸法および形状を制限することは意図されていない。
【００９３】
符号化（エンコード）中に動的にファイルを利用可能にするためのシステム及び方法が開示された。理解されるべきは、本明細書で説明された実施形態は、説明のためであり、本開示の内容を制限すると考えられるべきではない。本発明の範囲または思想から逸脱しない、様々な変更、使用、代用、組合せ、改良、製造方法は、当業者には明らかであろう。
【図１】
0006266540.tif 000002
【図２】
0006266540.tif 000003
【図３】
0006266540.tif 000004
【図４】
0006266540.tif 000005
【図５】
0006266540.tif 000006