QuickTime動画を観るQuickLookプラグインを作ってみる

予告しておきますが、途中挫折してますので。

 

普段は動画のプレビューなんてしないから、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プログラミングガイドの紹介

https://developer.apple.com/jp/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/Introduction/chapter_1_section_1.html

 

>プレビューを動的に生成するための、全般的に有効ですがやや複雑なアプローチは、

>HTMLを作成し、そこにイメージ、JavaアプレットFlashアニメーションなどの

>他のデータを添付することです。

 

でも、その最後にちゃっかり推奨しないとも書いてるよ(^ω^)

 

>リッチなHTMLのWeb Kitプラグインを使って、Quick Lookに渡すことは推奨されません。

 

「サムネイルへのCore Graphicsイメージの割り当て」の項には動画のサムネイルの返し方まで載っているし。

もしかして、簡単な作業じゃないのか。

 

恐る恐る、古いmovファイルをSafariで開いてみる。

 

f:id:tbboy:20140601155804p:plain

 

 

ふむ、Safariなら開けるな。いけそうである。

 

UTIについて調べてみるか。動画再生のqlgeneratorは、Movie.qlgenerator。Info.plistを覗いてみると"public.movie”となっている。

 

'/System/Library/QuickLook/Movie.qlgenerator/'

 

f:id:tbboy:20140601155853p:plain

 

HTMLを書いて実験してみたが、プラグインが見つかりませんとなる。どうなっているんだ。Safariにmovファイルをドロップした時は、QTKitServerのプロセスが動いている。WebViewじゃなくてQTView使っているのか。簡単には、いかない様な気がしてきた。

 

f:id:tbboy:20140601161751p:plain

Object要素ではなく、video要素(HTML5)で書き直してみた。こちらだと、きちんと再生できる。同じくQTKitServerを使うようだ。背景が白じゃなく水色なのは依然不可解だが。

 

f:id:tbboy:20140601160743p:plain

 

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

https://developer.apple.com/library/mac/documentation/quicktime/conceptual/qtscripting_html/QTScripting_HTML_Document/ScriptingHTML.html

 

これによると、純粋な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

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVFoundationMetadataKeyReference/Reference/reference.html

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)

iTunes

アートワークあり

表示 

表示

ポスターフレーム

無視

 表示(アートワークを優先する)

アートワークなし

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の警告ラッシュ。

しかし、サムネイル自体は表示する事が出来た。

 

f:id:tbboy:20140601161541p:plain

f:id:tbboy:20140601161116p:plain

 

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(動画ファイル)を書いて開くようにしたが、動画は再生されず。

 

 

f:id:tbboy:20140601161258p:plain

 

Sandbox(コード署名)が出来ないからここまでか。

 

 

 

 

参考サイト

Quick Lookプログラミングガイド: Quick Lookプログラミングガイドの紹介

https://developer.apple.com/jp/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/Introduction/chapter_1_section_1.html

でらうま倶楽部 : 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

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVFoundationMetadataKeyReference/Reference/reference.html

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

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVFoundation_ErrorConstants/Reference/reference.html

HTML Scripting Guide for QuickTime: HTML Scripting

https://developer.apple.com/library/mac/documentation/quicktime/conceptual/qtscripting_html/QTScripting_HTML_Document/ScriptingHTML.html

CocoaDev » Quicklook

http://cocoadev.com/QuickLook