まず、RubyCocoa で、QuickTime ムービーを扱うには、QTMovie オブジェクトを作る。
Quicktime のファイルを開く方法はいろいろあるけど、とりあえず、ファイルからと URL から開く方法をメモっておく。
ファイルから開くには、movieWithFile_error(file,error) を使い、URL から開くには movieWithURL_error(url,error)を使う。
file は絶対パスで、url は NSURL、error は NSError のオブジェクト。
例えば、@qtMov という QTMovie オブジェクトを作るとすると、
error = NSError.alloc.init
@qtMov = QTMovie.movieWithFile_error(file_path,error)
@qtMov = QTMovie.movieWithURL_error(NSURL.fileURLWithPath(file_path),error)
のような感じで書く。まあ、めんどくさいので一つにまとめたけど、細かく分けると、まず、ファイルの場合は絶対パスが必要なので、
Ruby だと File.expand_path(path) で変換してから、使う。
file_path = File.expand_path("sample.mov")
error = NSError.alloc.init
@qtMov = QTMovie.movieWithFile_error(file_path,error)
URL の場合は、さらに file_path から NSURL.fileURLWithPath で NSURL オブジェクトを作り、QTMovie オブジェクトを作る。
file_url = NSURL.fileURLWithPath(file_path)
@qtMov = QTMovie.movieWithURL_error(file_url,error)
まあ、もとが URL でない場合は、わざわざこんなことしなくても、movieWithFile で開けばいい。例えば、Open Panel を使って
ファイルを指定すると、絶対パスが返るのでそれをそのまま使えばいい。
これをアプリケーションで表示させるには、setMovie(movie) を使う。例えば、@qtView という Quicktime View を Interface Builder で作ったとすると、
次のようにして開いた Quicktime moive を表示する。
@qtView.setMovie(@qtMov)
ここで、このムービーの情報を見るには、movieAttibute というのを使って、
print @qtMov.movieAttribute
なんてする。この場合、できるオブジェクトは NSCFDictionary(配列みたいなやつ?)で、中身はさらに配列だったりするので、to_a で Ruby の
Array オブジェクトにして、最後にそれぞれを Ruby の String オブジェクトにして表示させには、次のような感じで。
@qtMov.movieAttributes.to_a.each do |item|
print item.to_a[0].to_s + "\t" + item.to_a[1].to_s + "\n"
end
他にも、ムービーの長さ(duration)や、現在の時間(再生しないと0だけど)(currentTime)なんかも求められる。
@qtMov.duration
@qtMov.currentTime
ただし、ここでかえってくるのは QTTime オブジェクトなので、to_s とつけても意味がない。そこで、QTStringFromTime という C の関数を使う。
QTStringFromTime(@qtMov.duration)
QTStringFromTime(@qtMov.currentTime)
これで、それぞれが、NSCFString オブジェクトとして求められる。
Ruby で扱う場合は to_s をつけて String オブジェクトにしないとうまくいかない場合がある。
でも結局、QuickTIme ムービーは表示させて、そこでいじくってなんぼなので、その辺りは別の項目で。