読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

動画データ解析ツールを作成する(3) - QuickTime SDKを使ってトラック情報から動画サイズを取得する

QuickTime SDKを使ってメタ情報を取り出すのはツライ・・・

残念ながらプログラミングセンスのない僕には難しいよ。QuickTime SDKの使用はあきらめましたが、トラック情報から動画のサイズを取り出すところまでは実装出来たので、備忘録を兼ねて使用したAPIの説明をしていきます。*1

英語の読める人は、「Page Not Found - Apple Developer」をお読みください。てきとーな事を書いている僕の説明より信用できますよ。

Macintoshでプログラミングした事のある方々にはお馴染みらしいのですが、Windowsネイティブのパス名をFSSpes構造体へ変換します。その後はFSSpecを用いて動画ファイルを開き、Movieの制御を行います。

/*! 
    Windowsネイティブのパス名をFSSpes構造体への変換を行う。
    @param[in] inName Windowsネイティブのパス名
    @param[out] outFile FSSpec構造体へのポインタ
    @param[in] flags 変換オプション
    @return 成功したときはnoErrを返します。
            失敗したときはError Codesに基づいた値を返す。
*/
OSErr NativePathNameToFSSpec (char *inName, FSSpec *outFile, long flags );
/*! 
    動画ファイルを開きます
    @param[in] fileSpec FSSpec構造体へのポインタ
    @param[out] resRefNum ファイル参照番号
    @param[in] permission 属性オプション
    @return 成功したときはnoErrを返します。
            失敗したときはError Codesに基づいた値を返す。
    @note 属性オプションはいくつかあります。
          fsRdPerm 読み込みを許可
          fsWrPerm 書き込みを許可
          fsRdWrPerm 排他的な読み込み/書き込みを許可
          fsRdWrShPerm 共有的な読み込み/書き込みを許可
    @note CloseMovieFile()を使いオープンしたファイルを閉じる必要がある。
*/
OSErr OpenMovieFile (const FSSpec *fileSpec, short *resRefNum, SInt8 permission );
/*! 
    動画ファイルからMovie作業領域を確保します
    @param[out] theMovie Movie識別子ポインタ
    @param[in] resRefNum ファイル参照番号
    @param[out] resId Movie識別子のリソースIDポインタ
    @param[out] resName Movie識別子のリソース名へのポインタ
    @param[in] newMovieFlags オプション
    @param[in] dataRefWasChanged 
    @return 成功したときはnoErrを返します。
            失敗したときはError Codesに基づいた値を返す。
    @note オプションはいくつかあります。
          newMovieActive 新しい動画をMovie Toolboxで扱えるようにアクティブにします
    @note DisposeMovie()を使い作業領域を解放します
*/
OSErr NewMovieFromFile 
(
  Movie *theMovie,
  short resRefNum,
  short *resId,
  StringPtr resName,
  short newMovieFlags,
  Boolean *dataRefWasChanged 
);
/*! 
    Movie作業領域を解放します
    @param[in] theMovie Movie識別子
    @return 無し
*/
void DisposeMovie ( Movie theMovie );
/*! 
    動画ファイルを閉じます
    @param[in] resRefNum ファイル参照番号
    @return 無し
*/
OSErr CloseMovieFile ( short resRefNum );

*1:わざわざ公開するほどではないので、作りかけのQuickTime SDKを使ったソースがご入用でしたらメッセでどうぞ。消していなければお渡し出来ると思います。