AV基金会 - AVAssetTrack,mediaType& CMFormatDescriptio

时间:2013-05-09 00:26:10

标签: avfoundation timecodes

我有一个快速对象,我正在阅读av基础。 我可以看到它的轨道,我希望能够读取'tmcd'轨道(时间码)并将其输出作为我可以在NSTextView中使用的字符串。

使用NSLog和[track formatDescriptions],我看到:

{\ n \ tmediaType:'tmcd'\ n \ tmediaSubType:'tmcd'\ n \ tmediaSpecific:{\ n \ t \ tframeDuration:{1001/24000 = 0.042} \ t \ tframes / sec:24 \ t \ ttcFlags:0 \ n \ t} \ n \ textensions:{{type = immutable dict,count = 1,\ nentries => \ n \ t1:{contents = \“VerbatimSampleDescription \”} = {length = 38, capacity = 38,bytes = 0x00000026746d63640000000000000001 ... 03e918d400000000} \ n} \ n} \ n} \ n“ )

我可以看到那里有很多信息,但我想知道如何使用它。 这是我可以用其他AV Foundation工具分开的东西,还是我需要以某种方式将它拆开?

基本上我想以“00:12:23:12”等格式结束。

谢谢!

亚当

2 个答案:

答案 0 :(得分:1)

尝试使用avfprobe。它会为您解码所有曲目信息,包括您在问题中提到的CMFormatDescription。你会看到这样的事情:

formatDescriptions = [
    {
        mediaType = kCMMediaType_TimeCode; // = 'tmcd'
        mediaSubType = 'tmcd';
        extensions = {
            VerbatimSampleDescription = <00000022 746d6364 00000000 00000001 00000000 00000002 0000ea60 000003e9 3c00>;
        };
    },
    ];

但是,这只是关于时间码轨道的信息 - 而不是轨道的内容。我也没有关于VerbatimSampleDescription财产内容的更多信息。

答案 1 :(得分:0)

你可以试试这个:

NSArray*                        arrFormat   = [tTrack formatDescriptions];
NSInteger                       nCountArr   = [arrFormat count];
CMTimeCodeFormatDescriptionRef  refCmFormat = (__bridge CMTimeCodeFormatDescriptionRef)(arrFormat[0]);
NSDictionary*                   dictFormat  = (__bridge NSDictionary *)(refCmFormat);

NSLog(@"format[%ld] = %@", nCountArr, dictFormat);

dictFormat 中,您可以获得不太易读的 formatDescriptions 字符串abobe的键和值。然后看看你需要什么键/值......