Macintosh Developer Online (MDOnline)


2001年8月18日発行号 - Cocoaでムービー



鶴薗さんの連載原稿はCocoaのサンプルプログラムとして公開されているムービープレイヤを解析したものです。ポイントがよく理解できると思いますので、Cocoa初心者の人はもちろん、腕に自信がある人にも読んでいただきたい原稿ですね。いただいが画像が比較的大きいため、Web上では560ドット幅をこえるものは、560ドットにしました。そうした画像は、ブルーの枠で囲われますが、それをクリックすると別のウインドウが開いて、原寸で画像を表示します。枠のない画像はそのままのものです。Mac OS XのIEだと縮小しても十分判読できるのですが、文字をしっかり見たい場合は原寸で御覧いただいくのがいいでしょう。なお、メールにある画像ファイルのリンクをクリックすると、原寸で表示されるはずです。原稿は5回分ありますが、MDOnlineのサイトにはすべて掲載されています。今日は1、2回目をお届けしますが、順次来週に渡って配信することにします。
来週から発行間隔は戻します…というか、その意味では今日から戻っています。次回、21日火曜日から毎日発行の予定です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┥Information
Macintoshと対象周辺機器の購入で1万円キャッシュバック。複数台ならさらに加算
 デジタルライフキャンペーン
Apple StoreではApple製品だけでなくサードパーティ製品も購入可能に
 アップルストア
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

さて、BeがPalmに買収されることになりましたが、BeOSという製品よりも技術や人材が欲しかったのでしょう。PDA自体の高度化は避けられないでしょうけど、どういう進化をするのかということを、Palmは「パソコン型」と見ているというような気がします。つまり、PDAとしては、単機能的な「専用機型」とも言える方向性よりも、パソコンのような汎用性を持たせるつもりなのではないでしょうか。というか、そういう方向性があっても慌てないようにするという意味合いもあるでしょう。市場次第ですね。「マルチメディア機能の強化」という言い方は投資家に分かりやすいようにということじゃないかと思います。Palm OSをモダンにするには、結局Mac OSをMac OS Xにしたほどの大変化が必要になるわけで、それをあらかじめ見越してのBeじゃないでしょうか。その意味ではアプライアンスへOSへ向かっていたBeは、その稼動環境は数年もするとPDAのハードウエアと重なりが出てくるのは容易に想像できます。もちろん、いきなりOSを変えるのではなく、じわじわとコンポーネントが置き換わるようになるでしょう。最初にBeの技術が製品に反映されるとしたら、ストリーミングビデオのプレイヤとかということなんだと思います。ま、だからマルチメディアなんでしょうね。
(新居雅行 msyk@mdonline.jp


鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(1)

■ 今回のテーマ
第1回目である前回は、Cocoaの概要についてざっと説明いたしました。今回からは、実践で役に立つCocoaのワンポイントレッスン的なものを行っていきたいと思っています。「 最初の一歩から 」的な入門記事も考えたのですが、こういったものはすでにいくつかありますし、避けることにしました。
そこで、いくつかのCocoaアプリケーションを作ったことのある方が、もうちょっと使いこなせるようになりたいという時に、役に立つような内容を扱っていきたいと思います。Cocoaプログラミングが全く初めてという方は、第1回の記事の中に書いたリンクを参考に第一歩を踏み出してみてください。
今回は、Appleが配付している「 SimpleCocoaMovie 」というQuickTimeムービープレイヤーのサンプルプログラムを取り上げることにしました。このサンプルコードを読む上で、ポイントになるところをピックアップして解説していきます。全部で5つの記事に分けてお届けします。まずは、以下のURLからダウンロードして解凍しておいてください。

◇SimpleCocoaMovie
 http://developer.apple.com/samplecode/Sample_Code/Cocoa/SimpleCocoaMovie.htm

■ このサンプルから学べること
このサンプルを読むことで何が学べるのか、まず、そのポイントを列挙してみました。


NSMovieというのは、ムービーデータそのものを扱うクラスで、NSMovieViewというのは、ムービーを表示したり、ユーザーからのイベントを受け付けたりするためのクラスです。NSMovieにムービーファイルを読み込んで、それをNSMovieViewに割り当てることでムービーを画面に表示することが出来ます。Interface Builderでは、Cocoa-Graphics Views PaletteにNSMovieViewがありますので、以下のようにして配置を行います。



QuickTime Frameworkというのは、CocoaアプリケーションからQuickTimeのAPIを直接呼び出すためのものです。NSMovieやNSMovieViewは、シンプルで非常に簡単に扱えるのですが、逆に機能が少ないため、比較的単純なムービープレイヤーレベルのものしか作ることができません。
例えば、ムービーキャプチャーソフトやムービーの圧縮ソフトを作りたくても、そういった機能は実装されていないのです。もっと簡単な「ムービーが何秒あるか」というような情報を取得することもできません。そのために、QuickTime Frameworkが必要になることが現状少なくありません。QuickTime Frameworkを使いこなすためには、Cocoaの知識とは別にQuickTimeの知識が必要になってしまいますが、その分きめの細かい制御ができるようになります。必要に応じて、QuickTimeについても勉強してみてください。

■ アプリケーション概要
さて、このサンプルのアプリケーションがどんな機能を持っているのか、まずは実際に動かして確かめてみましょう。ダウンロードしたファイルの中には、ビルドされたアプリケーションが入っているので、ダブルクリックするだけで、すぐに動かすことが出来ます。



起動すると、ウィンドウが1枚開いて、ムービーが自動的に読み込まれて画面に表示されます。読み込まれるムービーはいつも同じで、ユーザーが選ぶことは出来ません。ムービーの下には5つのボタン(NSButton)があり、それぞれの機能は、左から、「先頭に飛ぶ、コマ戻し、再生/停止、コマ送り、末尾に飛ぶ」となっています。その下のスライダー(NSSlider)は、音量調整です。メニューについては、Movieメニュー(NSMenu)の中にMoviePropertiesというメニューアイテム(NSMenuItem)があり、選択すると、「Movie Properties」というムービーの情報を表示するウィンドウが現れます。このウィンドウには、「自動再生かどうか、トラックの数、トラックのメディアタイプのリスト、ムービーの長さ、タイムスケール」についての情報が表示されます。

これで分かるように、このサンプルはやや変則的です。一般のムービープレイヤーのように、ユーザーがムービーを選択することは出来ず、アプリケーションが指定しているムービーファイルしか再生できません。例えば、ゲームソフトでオープニングムービーを再生するような場合のサンプルとしてはぴったりではありますが、一般的なムービープレイヤーのようにするためには、ファイルを指定するためのユーザーインターフェイスの追加が必要になります。
また、ムービーを再生する場合、ムービーコントローラーを使用するのが一般的ですが、あえて使用せずに自前で機能を実装しています。ムービーコントローラーを使うと非常に楽なのですが、逆に何もしなくてよくなりますので、実は勉強にならないのです。そこで、ムービーコントローラーを自前で実装しているようです。


[鶴薗賢吾]
(続く)

関連リンク:Cocoaはやっぱり!
カテゴリ:QuickTime, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版


鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(2)

■ プロジェクトのファイル構成
続いて、プロジェクトを構成しているファイルを見ていきます。まず、Project Builderでプロジェクトファイル(SimpleCocoaMovie.pbproj)を開きます。



Classesのところに「MyMovieController.h」と「MyMovieController.m」があります。これは、「MyMovieController」というクラスを定義しているものです。このクラスが今回の主役で、アプリケーションのほとんどの制御を行っています。その下の「QTUtils.h」と「QTUtils.c」は、下請けのユーティリティ関数を持っていて、MyMovieControllerから使われます。
続いて、Resourcesを見ると「MovieFile.mov」というQuickTimeムービーのファイルが入っています。これを読みこんで再生します。「MainMenu.nib」には、ユーザーインターフェイス等の定義がなされています。

■ MainMenu.nibの構成
次に、MainMenu.nibをダブルクリックして、Interface Builderでその中身を見てみましょう。



MainMenu.nibのウィンドウを見ると、ウィンドウのインスタンスが2つあるのが分かります。「Window」がメインの再生用のウィンドウ、「Movie Properties」というのがムービー情報表示用のウィンドウになっています。先程出てきたMyMovieControllerのインスタンスもあります。

では、これらがどういう関係になっているのか、主なアクションの接続を確認してきましょう。メインウィンドウの中にある5つのボタンと音量調整のスライダーのアクションは、全てMyMovieControllerに繋がっています。分かりやすい名前がついていますので、見ていただければ分かると思います。メニューからも直接繋がっています。



次は、主なアウトレットの接続の確認です。こちらも分かりやすい名前になっています。メインのウィンドウだけでなく、情報ウィンドウの方やメニューアイテムにも接続されていることが分かります。これらの図は、ソースを見る時に照らし合わせるとよいと思います。



■ ムービーの読み込みと表示(MyMovieController.m)
それでは、コードの方に入っていきます。このサンプルでは、起動時に自動的にムービーを読みこんでいます。その処理は、MyMovieController.mの「awakeFromNib」メソッドの中に書かれています。
アプリケーションは、起動時にMainMenu.nibを読みこんで、画面にメニューやウィンドウを表示します。そして、MainMenu.nibを読み込み終わったら、MainMenu.nibの中にある全てのインスタンスに向かってawakeFromNibメッセージが送られます。ですので、このメソッドは初期化の処理を書くのに適しているわけです。MyMovieControllerもインスタンスがMainMenu.nibにありますので、起動時にメニューなどと同時に読み込まれて、その後、awakeFromNibメソッドが呼ばれます。

さて、本題のムービーの読み込みと表示ですが、以下の3段階で実現できます。


では、サンプルコードの該当個所を見ていきます。まず、ムービーファイルの存在場所を調べるところです。

// ムービーのファイルパスの取得
NSString *filePath = [ [ NSBundle mainBundle ]
pathForResource : @"MovieFile"
ofType : @"mov" ];

// ムービーの場所をURLの形式で取得
NSURL *movieUrl = [ NSURL fileURLWithPath : filePath ];

Cocoaのアプリケーションの実体はフォルダーで、その中に実行ファイルやnibファイルなどのリソースファイルが収められています。このSimpleCocoaMovieのフォルダー構成を見てみましょう。Finder上でSimpleCocoaMovieを表示させて、コントロールキー+クリックで表示されるメニューから「パッケージの内容を表示」を選択すると中身を見ることができます。



このフォルダーのことをバンドル(束)といい、これを扱うクラスがNSBundleです。mainBundleというメソッドで、アプリケーション自身を表すフォルダーのNSBundleが得られます。pathForResource: ofType:を使うことで、バンドル内の「Contents/Resources/」以下にあるリソースファイルのフルパスを取得することが出来ます。このサンプルでは、「MovieFile」という名前と「mov」という拡張子を持つファイルを見つけて、ファイルパスを返してくれます。

 ★ NSBundle : アプリケーション自身のバンドルのインスタンスを作成
  [書式] + (NSBundle *) mainBundle
  [出力] 返り値 : 見つかったファイルのフルパス

 ★ NSBundle : バンドル内のリソースのファイルパスを取得する
  [書式] - (NSString *) pathForResource : (NSString *) name
           ofType : (NSString *) extension
  [入力] name : ファイル名(拡張子を除いたもの)
     extension : 拡張子
  [出力] 返り値 : 見つかったファイルのフルパス

Resourcesフォルダーの下に「English.lproj」というフォルダーがありますが、これは英語圏用のリソースが入るところです。日本語対応したソフトの場合は、Japanese.lprojというフォルダーがあって、この中に日本語化されたリソースファイルが入ります。MovieFile.movは、Resourcesフォルダーの直下にありますが、この場所には言語に依存しないリソースファイルが置かれて共通のリソースとして使われます。

pathForResource: ofType:メソッドは、ローカライズされたリソースが無いかをまずチェックします。この場合は、English.lprojの中を探します。無い場合には、続いてResouces直下のリソースを探します。

次に、得られたファイルパスをURLの形式にします。NSMovieクラスには、ファイルパスからムービーのインスタンスを作るメソッドが無く、URLを扱うクラスである「NSURL」からしか作ることができません。そのため、ファイルパスからfileURLWithPath:を使ってNSURLを作成する必要があります。

 ★ NSURL : ファイルパスからNSURLを作成する
  [書式] + (id) fileURLWithPath : (NSString *) path
  [入力] path : ファイルパス
  [出力] 返り値 : 作成したNSURLのインスタンス

NSURLが準備できたら、NSMovieを作成します。ソースは以下のようになっています。NSMovieのインスタンスをallocで作成して、initWithURL: byReference:にURLを渡して初期化します。これで、ムービーファイルが読みこまれます。

NSMovie *theMovie = [ [ NSMovie alloc ]
initWithURL : movieUrl
byReference : YES ];

ここで得られたNSMovieをNSMovieViewにsetMovie:でセットします。数行飛びますが、以下のようなコードがあります。

[ movieViewObject setMovie : theMovie ];

 ★ NSMovieView : ムービーをセットする
  [書式] - (void) setMovie : (NSMovie *) movie
  [入力] movie : セットするムービー

これで、ムービーを画面に表示させることができます。以上の部分のポイントをまとめると、以下のようになります。

[鶴薗賢吾]
(続く)

関連リンク:Cocoaはやっぱり!
カテゴリ:


Pure Javaの画像検索ライブラリがMac OS X向けにもリリース

eVision社は、画像データの検索ライブラリ「Visual Search SDK for Mac OS X」をリリースしている。Visual Searchは、画像の特徴を抽出するような手法を用いて、ある画像と類似した画像を検索するといったライブラリ機能を提供するものだ。このほどリリースされたVer.2.1では完全にJavaに対応していることから、Mac OS Xでも稼動するし、特定のデータベース環境に依存するということもない。500画像に限定されたSDKバージョンはフリーで入手でき、ライブラリの評価が可能だ。製品添付などのライセンス情報については問い合わせることになっている。なお、Visual Searchを使ったプログラムコンテストも開催されており、1位は$1000、2位は$250の賞金が出る。フリーのSDKを使ってコンテストの参加も可能である。

関連リンク:eVision
カテゴリ:ライブラリ, Java


KBase》Mac OS X ServerのWebとキャッシュで利用するポートについて

Mac OS X ServerでのWebサーバ機能には、Webサーバだけでなく、パフォーマンスキャッシュの機能がある。それらの機能でのTCPポート利用についての解説がKnowledge Baseに掲載された。Webサーバは80番ポートを利用するが、パフォーマンスキャッシュは16080番ポートを利用するので、パフォーマンスキャッシュを使う場合には、IPのフィルタリングやファイアウォールの設定で、16080番をふさがないようにしなければならない。Webアクセスは通常は80番ポートを使うが、パフォーマンスキャッシュがアクティブなとき、Webサーバにリクエストされたデータのキャッシュを16080番ポートを利用して行い、そのポートからクライアントに対してデータを送信するという仕組みになっている。そのため、クライアントでは16080番ポートへのアクセスへリダイレクトされる場合が時折見られるということだ。なお、パフォーマンスキャッシュを使わないのなら、Server AdminのWebサービスの設定でオフにすることができる。

関連リンク:Mac OS X Server 10: Web Service Uses Ports 80 and 16080 by Default
カテゴリ:サーバー製品, Mac OS X Server


KBase》Mac OS X ServerのWebサービスで複数のデフォルト書類ファイル名を指定

Mac OS X Serverで公開しているWebサーバに対して適切なアドレスで接続を行っても、403 Forbiddenのエラーが出てくる場合についての対処がKnowledge Baseで公開されている。Server AdminのWebサービスの設定で、サイトごとの設定の「一般」のタブにある「デフォルトの書類」で、複数のファイル名を、単に空白で区切って設定をした場合に、そうした症状になる場合がある。最初はindex.htmlだけがデフォルトの書類になっているが、複数の書類を設定するには「"index.html" "index.htm" "default.htm"」のように、ダブルクォーテーションで囲い、それを空白で区切って指定をする必要がある。

関連リンク:Mac OS X Server 10.0: "403 Forbidden" Message When Attempting Access to a Web Page
カテゴリ:Knowledge Base(旧TIL), サーバー製品, Mac OS X Server


Mac OS Xで稼動するメッセージング&キューイングのライブラリが他OSにも対応

Jiiva Softwareは、メッセージング&キューイングのためのソフトウエア「RapidMQ Beta3」をリリースした。メッセージング&キューイングとは、ソフトウエア間で、ネットワークを経由するなどしてデータのやり取りや連係動作を行う場合に利用されるテクノロジーだ。Windows 2000にはMicrosoft独自のこうした機能が組み込まれている。ソフトウエア間通信をリアルタイムで行うのではなく、キューを経て行うために、たとえばアクセスが切断していれば、接続を待ってメッセージがおくられるなどの制御を行うことができるのが一般的である。RapidMQはBeta2まではMac OS X向けとして開発されていたが、Beta3でLinuxやSolarisにも対応したことから、異機種間でのメッセージングにも対応できるようになった。ドキュメントでは、C言語を利用したAPIの解説が記載されているので、Cocoa(Objective-C)やCarbonのアプリケーションでは組み込みがやりやすいだろう。

関連リンク:RapidMQ
カテゴリ:ライブラリ, ネットワーク


KBase》Disc Burnerで作成したディスクはWindowsではファイル名が切り詰められる

Disc Burnerで作成したISO9660のCD-RをWindowsパソコンで参照すると、ファイル名は11バイトに切り詰められてしまう件について、Knowledge Baseで掲載された。長いファイル名で参照したいのなら、CDEveryWhereやToast 5 Titaniumといった、Jolietフォーマット対応のユーティリティを使うようにとしている。つまり、ISO9660フォーマットでの長いファイル名にはDisc Burnerは対応していないということである。

関連リンク:Disc Burner: Filenames on CD-R Discs Truncated on Windows-Compatible Computers
カテゴリ:Knowledge Base(旧TIL), Windows, メディア制作


KBase》WebObjects 4.5.xでのLDAPアダプタを使ったサンプルプログラムについて

Knowledge Baseに、WebObjects 4.5/4.5.1で、LDAPアダプタを利用したサンプルプログラムに対する情報が掲載された。1つは、LDAPアダプタの動作の問題にからんで、サーバからのデータの取り出しを最適化する方法を、サンプルプログラムに組み込む方法が掲載されている。もう1つの文書には、サンプルでのメモリーリークを発生させるバグについて、それを回避するための修正方法である。いずれも、プログラムはObjective-Cで掲載されているものだ。LDAPとのやりとりをWebObjectsに組み込んだシステムで、サンプルを参考にしている場合にはチェックをしておく必要があるだろう。

◇WebObjects 4.5: How to Optimize LDAPAdaptor Attribute Fetching
 http://www.info.apple.com/kbnum/n25352

◇WebObjects 4.5: Memory Leak in LDAPAdaptor Example Code
 http://www.info.apple.com/kbnum/n25353

カテゴリ:Knowledge Base(旧TIL), WebObjects


KBase》QuickSilverタイプのPowerMac G4の筐体に見えるモールドライン

QuickSilverタイプのPowerMac G4で、モールドラインが見えているが、動作やあるいは強度の上では問題がないことがKnowledge Baseで公開されている。モールドラインは、ドライブのベイの下の部分やフロントパネルのボタンの横側に見えるとしている。

関連リンク:Power Mac G4 (QuickSilver): Mold Lines Are Normal
カテゴリ:Knowledge Base(旧TIL), Power Mac


KBase》DSL/PPPoEに関するFAQ集、特別なソフトウエアは必要としないなど

Mac OS XでのDSLおよびPPPoEを使った接続に燗するFAQがKnowledge Baseに掲載されている。ブロードバンドインターネット接続での代表的なPPPoE接続についての基本的な情報や、特別なソフトウエアを必要とせずに、Mac OS Xだけの機能で利用できることなどが掲載されている。ただ、内容的には基本的な項目とその返答だけである。

関連リンク:Mac OS X: DSL/PPPoE Frequently Asked Questions (FAQ)
カテゴリ:Knowledge Base(旧TIL), インターネット全般, Mac OS X