Quicktime: установить атом 'elng' или свойство extendedLanguageTag AVAssetTrack - PullRequest
3 голосов
/ 22 декабря 2011

У меня есть несколько видео, для которых мне нужно установить расширенный языковой тег для каждого из треков.Я не нашел ни одного приложения, которое делает это, поэтому я пытаюсь сделать это в коде.

Документация для тега elng здесь .

Место, где я пытаюсь прочитать этот тег, находится на iOS, где extendedLanguageTag - это свойство только для чтения AVAssetTrack.По сути, я хочу установить на дорожку что-то в моем файле QuickTime, которое можно получить с помощью этого свойства.

Мне все равно, какой QuickTime API я использую - в этой попытке я использую QTKit, чтобы открытьвидео, а затем с помощью старого API C QuickTime, чтобы попытаться установить тег.Тем не менее, это не работает.(Коды ошибок не возвращаются, тег просто не устанавливается.)

NSError *error = nil;
QTMovie *mov = [QTMovie movieWithFile:filename error:&error];
NSArray *tracks = mov.tracks;

int i=0;
for (QTTrack *track in tracks)
{
    OSErr err;

    Track qtrack = track.quickTimeTrack;

    Media media = GetTrackMedia(qtrack);

    QTAtomContainer props;
    err = GetMediaPropertyAtom(media, &props);

    if (props == NULL)
    {
        err = QTNewAtomContainer(&props);
    }

    char nt[5]=   "en-gb" ;

    QTAtom newAtom;
    err = QTInsertChild(props, kParentAtomIsContainer, 'elng', 1, 0, 5,  &nt, &newAtom);

    if (newAtom == NULL)
    {
        NSLog(@"Insert child failed");
    }

    SetMediaPropertyAtom(media, props);
}

[mov writeToFile:@"/Users/amy/Downloads/testfilmAgain43.mov" withAttributes:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:QTMovieFlatten]];

На самом деле я никогда раньше не использовал QuickTime C API, так что я могу что-то неправильно понять.Кто-нибудь может помочь?

...