Sunday, May 31, 2015

Compressor 4.2でBlu-Rayディスクの作成が50%完了から進行しない

iMovieからProres422で書き出した動画をBlu-Rayに焼こうと思ってCompressorを購入したが、ディスクイメージを作成できる時と失敗する時がある。
なんでだろうとおもってプロセスを眺めたり、lldbでattachしたりしてごにょごにょしていると、CrashReportというプロセスがあがってから処理が進まなくなっていることがに気づいた。


/var/log/system.logに怪しいログが。

May 21 07:23:01 MacBook-Air Compressor[514]: objc[514]: Class TSSandboxPrefs is implemented in both /Library/Frameworks/TSLicense.framework/Versions/A/TSLicense and /Library/QuickTime/Flip4Mac WMV Advanced.component/Contents/MacOS/Flip4Mac WMV Advanced. One of the two will be used. Which one is undefined.


Flip4Macを消してからCompressorを起動しなおして、やり直すと今度は別のログが。

May 27 07:54:57 MacBook-Air.local BlurayPublishingServer[4161]: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'*** Call stack at first throw:
   (snip)

May 27 07:55:02 MacBook-Air.local ReportCrash[4166]: Saved crash report for BlurayPublishingServer[4161] version 26245.5.45 to /Users/xxxxxx/Library/Logs/DiagnosticReports/BlurayPublishingServer_2015-05-27-075502_MacBook-Air.crash


なるほど、CrashReportってのがあるのね。



Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BREAKPOINT (SIGTRAP)

Exception Codes:       0x0000000000000002, 0x0000000000000000


Application Specific Information:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
Application Specific Backtrace 1:

0   CoreFoundation                      0x92435373 __raiseError + 195
1   libobjc.A.dylib                     0x92880a2a objc_exception_throw + 276
2   CoreFoundation                      0x9243528d +[NSException raise:format:] + 141
3   Foundation                          0x99c0ee5d -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 126
4   Foundation                          0x99c1eb40 +[NSURL(NSURL) fileURLWithPath:isDirectory:] + 76
5   BlurayPublishingServer              0x00080e93 BlurayPublishingServer + 16019
6   libobjc.A.dylib                     0x9287e853 -[NSObject performSelector:withObject:] + 70
7   Foundation                          0x99c6568c __NSThreadPerformPerform + 389
8   CoreFoundation                      0x92341d4f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
9   CoreFoundation                      0x923337dd __CFRunLoopDoSources0 + 253
10  CoreFoundation                      0x92332d12 __CFRunLoopRun + 994
11  CoreFoundation                      0x923326c6 CFRunLoopRunSpecific + 390
12  CoreFoundation                      0x9233252b CFRunLoopRunInMode + 123
13  Foundation                          0x99c6aaaa -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 305
14  BlurayPublishingServer              0x0007e8e6 BlurayPublishingServer + 6374
15  BlurayPublishingServer              0x0007e6bc BlurayPublishingServer + 5820
16  libdyld.dylib                       0x90ca86d9 start + 1


Thread 0 Crashed:: Dispatch queue: com.apple.main-thread0   com.apple.CoreFoundation            0x92435d07 ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ + 7
1   com.apple.CoreFoundation            0x92435689 __raiseError + 985
2   libobjc.A.dylib                     0x92880a2a objc_exception_throw + 276
3   com.apple.CoreFoundation            0x9233275b CFRunLoopRunSpecific + 539
4   com.apple.CoreFoundation            0x9233252b CFRunLoopRunInMode + 123
5   com.apple.Foundation                0x99c6aaaa -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 305
6   BlurayPublishingServer              0x0007e8e6 0x7d000 + 6374
7   BlurayPublishingServer              0x0007e6bc 0x7d000 + 5820
8   libdyld.dylib                       0x90ca86d9 start + 1



ファイルパスをチェックしたらnilだったということか。
coreファイルが吐かれていないので、詳細がわからない。

ここでTechnical Note TN2124Mac OS X Debugging Magicを見はじめる。

よしよし、ターミナルからcoreダンプできるように設定した環境でCompressorを起動してもう一回。


sudo chmod o+wx /cores
ulimit -c unlimited
/Applications/Compressor.app/Contents/MacOS/Compressor 


 あれ?coreができないぞ?sysctlかな?
MacBook-Air:~ xxxxxx$ sysctl -a|grep core 
kern.corefile: /cores/core.%P 
kern.coredump: 1 
kern.sugid_coredump: 0

uid 変えるプログラムとはおもえないけど、Compressorを再起動して試してみる。


sudo sysctl -w kern.sugid_coredump=1
でない・・。

Parent Process:        Create Disc [614]
ってことは、子プロセスにはulimitは引き継がれないのか。
launchdの設定をしてOS再起動。
sudo cat "limit core unlimited" >/etc/launchd.conf

今度は無事/coresにファイルができたので、lldbで中を見てみる。

ごにょごにょ・・・・


結論としては「〜」をmovファイル名に含めないようにしたら解決。
「8月9日〜9月3日」というようなファイル名を「8月9日から9月3日」にしてからは
再発しなくなった。