予告しておきますが、途中挫折してますので。
普段は動画のプレビューなんてしないから、QuickLookでFLVなどが観れなくても特に困っていなかった。が、多くのマカーが困っているらしい。
OS X MavericksからQuickTimeやQTKitが廃止され、flvなどのQuickLookPluginが使えなくなったけど、何か対処法ある?
http://applech2.com/archives/35111401.html
経緯は上の記事が分かりやすいかと。
では、QuickLookプラグイン(qlgenerator)をちょっと調べてみようか。
Animated GIF QuickLook plugin プロジェクト日本語トップページ - SourceForge.JP
http://sourceforge.jp/projects/sfnet_animgifqlgen/
え~っ!GIFアニメの再生はHTML書いて、Webkitにやらせているよ。
たしかに、Quick Lookプログラミングガイドの「プレビューの動的な生成」の「リッチなHTMLの生成」の項でもそう書かれている。
Quick Lookプログラミングガイド: Quick Lookプログラミングガイドの紹介
>プレビューを動的に生成するための、全般的に有効ですがやや複雑なアプローチは、
>HTMLを作成し、そこにイメージ、Javaアプレット、Flashアニメーションなどの
>他のデータを添付することです。
でも、その最後にちゃっかり推奨しないとも書いてるよ(^ω^)
>リッチなHTMLのWeb Kitプラグインを使って、Quick Lookに渡すことは推奨されません。
「サムネイルへのCore Graphicsイメージの割り当て」の項には動画のサムネイルの返し方まで載っているし。
もしかして、簡単な作業じゃないのか。
恐る恐る、古いmovファイルをSafariで開いてみる。
ふむ、Safariなら開けるな。いけそうである。
UTIについて調べてみるか。動画再生のqlgeneratorは、Movie.qlgenerator。Info.plistを覗いてみると"public.movie”となっている。
'/System/Library/QuickLook/Movie.qlgenerator/'
HTMLを書いて実験してみたが、プラグインが見つかりませんとなる。どうなっているんだ。Safariにmovファイルをドロップした時は、QTKitServerのプロセスが動いている。WebViewじゃなくてQTView使っているのか。簡単には、いかない様な気がしてきた。
Object要素ではなく、video要素(HTML5)で書き直してみた。こちらだと、きちんと再生できる。同じくQTKitServerを使うようだ。背景が白じゃなく水色なのは依然不可解だが。
qltestvideo.html
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor=“#ffffff”><center>
<video border=1 width="320" height="240" controls>
<source src="file:///Users/tbboy/Movies/mr24.mov">
</video>
</center></body>
</html>
HTML Scripting Guide for QuickTime: HTML Scripting
これによると、純粋なSafari(HTML5)はH.264しかサポートしないようだが・・・。
では、XcodeでQuickLookを作ってみようか。OSX 10.9 MavericksだとARCが標準なので、NSAutoreleasePoolからの書き換えが必要。つーか、今(Lion以降)の書き方全然知らないし。
とりあえず、GeneratePreviewForURL()を書いて動かしてみたが、なぜかGenerateThumbnailForURL()の方が先に呼ばれる。そういう仕様なのか。
サムネイルも書くか。QuickTime(QT7)にはポスターフレームを設定する機能があったが、AV Foundationにはない模様。アートワークで代用しろってことかな。DRMが設定された動画は、ポスターフレームが取り出せないからの措置だろうけど。
ちなみにDRMなしの動画でアートワークがない場合、iTunesでは中間時間のフレームが、Finderでは10秒のフレームがアートワークとして使われる。(いいのか?統一とれてなくて)
Technical Note TN2300: Transitioning QTKit Code to AV Foundation
https://developer.apple.com/library/mac/technotes/tn2300/_index.html
AV Foundation Metadata Key Constants Reference
avfoundation - Programmatically set poster frame of .MOV in ios - Stack Overflow
http://stackoverflow.com/questions/10341473/programmatically-set-poster-frame-of-mov-in-ios
OSX 10.9における動画のサムネイルの扱い
サムネイルの元 |
Finder(QuickLook) |
|
アートワークあり |
表示 |
表示 |
ポスターフレーム |
無視 |
表示(アートワークを優先する) |
アートワークなし |
10秒 |
(duration/2)秒 |
QuickTimeのメタ情報を辿れば、ポスターフレームを取り出せそうだがいまさらQuickTimeのヘッダを取り込むのもなんだし、やらない方向で。
Finderに仕様を合わせてみようか。
imageGeneratorのcopyCGImageAtTimeでエラーが発生。AVFoundationErrorDomain Code=-11800。AVErrorUnknownかよ。OSStatus エラー -12430が本命か。
しかし、よくよく考えてみれば古いコーデックをAV Foundationがサポートしているはずもなく、ポスターフレームなんて取り出せるわけもないか。失敗、失敗。
改めてQuickTimeで書いてみる。
>GenerateThumbnailForURL.m:20:34: 'movieWithURL:error:' is deprecated
当然だがis deprecatedの警告ラッシュ。
しかし、サムネイル自体は表示する事が出来た。
GeneratePreviewForURL()が呼ばれずに、プレビューが表示されない問題は何も解決してないが。
どうやら、プレビューでqlmanageがURL(動画ファイル)を読みにいくと、エラーメッセージを吐いてサムネイル表示に切り替わっているようだ。下の記事と同一現象かと。
How to sandbox quick look plugin on...: Apple Support Communities
https://discussions.apple.com/message/25470656
objective c - sandbox custom qlgenerator (Quick look) plugin - Stack Overflow
http://stackoverflow.com/questions/23058657/sandbox-custom-qlgenerator-quick-look-plugin
OSX Mavericks以降からの現象で、qlgeneratorもSandboxが強化されている模様。
偶然、GeneratePreviewForURL()が呼ばれる現象を発見。qlmanageで存在しないファイルを指定すると、プレビューが呼ばれる。GeneratePreviewForURL()に固定パスのURL(動画ファイル)を書いて開くようにしたが、動画は再生されず。
Sandbox(コード署名)が出来ないからここまでか。
参考サイト
Quick Lookプログラミングガイド: Quick Lookプログラミングガイドの紹介
でらうま倶楽部 : OSXのQuickLookを自作したい人のためのメモ
http://blog.livedoor.jp/tek_nishi/archives/8199974.html
Quick Look で MKV の動画を見る。 - 日々、とんは語る。
http://d.hatena.ne.jp/tomoya/20081025/1224948536
OS X MavericksからQuickTimeやQTKitが廃止され、flvなどのQuickLookPluginが使えなくなったけど、何か対処法ある?
http://applech2.com/archives/35111401.html
Quick Look プラグインを作る - d.hetima
http://d.hatena.ne.jp/hetima/20071030/1193755590
Animated GIF QuickLook plugin プロジェクト日本語トップページ - SourceForge.JP
http://sourceforge.jp/projects/sfnet_animgifqlgen/
Xcode - Quick Lookプラグインのテスト環境設定 - Qiita
http://qiita.com/1024jp/items/36aed3468a99e7e4848b
Mac の Quick Look をちょっとだけ快適に – xattr 編 - (フェンリル | デベロッパーズブログ)
http://blog.fenrir-inc.com/jp/2013/04/mac-quicklook-xattr.html
[iOS5] ARC : Autorelease, キャスト, 環境設定 - iOS 開発ブログ Natsu's note
http://blog.natsuapps.com/2011/11/ios5-arc-autorelease-bridge-xcode.html
[iOSアプリ開発] いまさら聞けないモダンな書き方 | Developers.IO
http://dev.classmethod.jp/smartphone/iphone/ios-modern-nsarray/
Technical Note TN2300: Transitioning QTKit Code to AV Foundation
https://developer.apple.com/library/mac/technotes/tn2300/_index.html
AV Foundation Metadata Key Constants Reference
AV Foundation プログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/AVFoundationPG.pdf
<video>-HTML5タグリファレンス
http://www.htmq.com/html5/video.shtml
HTMLタグ/要素一覧/object 要素 - TAG index Webサイト
http://www.tagindex.com/html_tag/elements/object.html
AV Foundation Error Constants
HTML Scripting Guide for QuickTime: HTML Scripting
CocoaDev » Quicklook