高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1376
Adding a movie reference to a movie

Q: あるムービーの参照を別のムービーに追加して(たとえば 2 つのムービーを「マージ」する場合など)、1 つが再生した直後にもう 1 つが再生するようにしたいと考えています。これには、データ参照を使うのでしょうか。それともエイリアスのアプローチを使うのでしょうか。混乱しているので 解説をお願いします。

A: これを行う最も簡単な方法は、Movie Toolbox Editing ルーチン InsertMovieSegment を使うことです。この関数はムービーの一部を別のムービーにコピーします。単にこの関数を呼び出して、挿入先のムービーにコピーしたい、ソースムービーの部分を指定します。

たとえば、何らかのソースムービーへの参照をコピー先のムービーに追加するには、下記のコードに示されているように、InsertMovieSegment を使います。

リスト 1. InsertMovieSegment を使ったムービー参照の追加

void addMovieReference(Movie destMovie, Movie sourceMovie)
{
  TimeValue srcMovieDuration, destMovieDuration;
  OSErr err = noErr;

  srcMovieDuration = GetMovieDuration(sourceMovie);
  destMovieDuration = GetMovieDuration(destMovie);
   
   // destMovie に sourceMovie の参照を追加する
  err = InsertMovieSegment(
          sourceMovie,             // ソースムービー
          destMovie,               // 挿入先のムービー
          0,                       // ソースムービーの先頭から挿入
          srcMovieDuration,        // 挿入するソースムービーセグメントの所要時間
          destMovieDuration        // ソースセグメントを挿入するコピー先の位置
        );

  .
  .
  .
}

好ましい速度とボリュームなどのムービー設定を、ソースムービーからコピー先のムービーにコピーしたい場合は、CopyMovieSettings も呼び出します。

リスト 2. CopyMovieSettings を使ったムービー属性のコピー

err = CopyMovieSettings (srcMovie,
                         destMovie );

InsertMovieSegment の呼び出しの前に BeginMediaEdits を 1 回以上呼び出していると、ソースムービーのメディアの一部またはすべてをコピーできます。ここで取り上げている目的のために、ここではそのような呼び出しは行いません。このケースでは、コピー先のムービーに格納されるソースムービー内の実際のメディアへの参照だけが、コピーされます。実際のメディア自体はコピーされません。

最後に、コピー先のムービーが変更内容を保存するために、UpdateMovieResource(またはムービーが CreateMovieStorage で作成されている場合は UpdateMovieInStorage)を忘れずに呼び出します。

ムービーの参照の追加は、データ参照を使って実現することもできます。しかし、データ参照はより複雑なアプローチであり、得られる結果は InsertMovieSegment を使った場合と同じです。

データ参照を使ってムービーの参照を作成する方法のサンプルについては、サンプルコードプロジェクト qtdataref を参照してください。

ドキュメントの改訂履歴

日付メモ
2004-09-16最初のバージョン

掲載日: 2004-09-16