QTKit часто задаваемые вопросы
Этот Technote покрывает следующий, часто задавал вопросы QTKit.
Получение изображения кадра фильма
Q: Я хотел бы иметь возможность получить изображение для кадра фильма в определенное время. Действительно ли это возможно?
A: Да. Используйте frameImageAtTime: метод, внедренный в Mac OS X 10.3:
- (NSImage *)frameImageAtTime:(QTTime)time; |
QTMovie frameImageAtTime: метод был также обновлен в Mac OS X 10.5 для принятия словаря атрибутов.
- (void *)frameImageAtTime:(QTTime)time withAttributes:(NSDictionary *)attributes error:(NSError **)errorPtr; |
Словарь атрибутов может содержать следующие ключи:
QTMovieFrameImageSize
QTMovieFrameImageType
QTMovieFrameImageRepresentationsType
QTMovieFrameImageOpenGLContext
QTMovieFrameImagePixelFormat
QTMovieFrameImageDeinterlaceFields
QTMovieFrameImageHighQuality
QTMovieFrameImageSingleField |
Посмотрите QTMovie.h для получения дополнительной информации об этих атрибутах.
Для QTMovieFrameImageType атрибут возможные значения следующие:
QTMovieFrameImageTypeNSImage QTMovieFrameImageTypeCGImageRef QTMovieFrameImageTypeCIImage QTMovieFrameImageTypeCVPixelBufferRef QTMovieFrameImageTypeCVOpenGLTextureRef |
Например, вот то, как попросить определенный тип изображения (NSImage значение по умолчанию, и представление по умолчанию NSBitmapImageRep):
Перечисление 1 , Как получить CGImage для кадра фильма в установленный срок.
NSDictionary *dict = [NSDictionary
dictionaryWithObject:QTMovieFrameImageTypeCGImageRef
forKey:QTMovieFrameImageType];
QTTime time = [movie currentTime];
CGImageRef theImage = (CGImageRef)[movie frameImageAtTime:time
withAttributes:dict error:NULL]; |
Посмотрите пример кода QTKitMovieFrameImage для полного примера.
Когда я пытаюсь играть звуковой файл, ничто не происходит
Q: Я использую QTKit, чтобы открыть и играть звуковой файл, но когда я делаю это, ничто не происходит. Я не слышу звука вообще. Но если я установил мой QTMovie к a QTMovieView использование setMovie: метод это работает просто великолепно. Вот мой код. Что я делаю неправильно?
QTMovie *aMovie;
QTMovieView *aMovieView;
aMovie = [QTMovie movieWithFile:s error:nil];
[aMovie setVolume: volumeVal];
// [aMovieView setMovie:aMovie]; // doing this makes it work!
[aMovie play]; |
A: Следующая строка кода создает автовыпущенный (QTMovie) объект:
aMovie = [QTMovie movieWithFile:s error:nil]; |
Как только Вы повторно вступаете, выполнение циклично выполняются, от объекта избавляются, который объяснил бы, почему ничто не происходит, когда Вы пытаетесь использовать объект снова.
Причина Ваш код работает, когда Вы присваиваетесь QTMovie к a QTMovieView QTMovieView сохраняет QTMovie объект и сохраненный QTMovie бездействуется через нормальный бездействующий механизм, созданный в QTMovie - следовательно игры фильма.
Вместо этого создайте QTMovie объект с помощью alloc: метод, таким образом, это не помещается в пул автовыпуска. Тогда просто выпустите объект, когда Вы будете сделаны с ним. Вот то, как это смотрит:
QTMovie* aMovie; aMovie = [[QTMovie alloc] initWithFile:s error:nil]; [aMovie setVolume: volumeVal]; [aMovie play]; ... /* do stuff */ [aMovie release]; // release object when done |
Поочередно, Вы могли использовать movieWithFile: метод, как был сделан в исходном фрагменте кода, но тогда сразу сохраняют объект:
QTMovie* aMovie;
aMovie = [QTMovie movieWithFile:s error:nil];
[aMovie retain]; // retain the object
[aMovie setVolume: volumeVal];
[aMovie play];
... /* do stuff */
[aMovie release]; // release object when done |
Как я добавляю QTTrack к QTMovie?
Q: Как делают меня для добавления a QTTrack к a QTMovie? Быстрая проверка справочной документации QTKit не показывает простой способ сделать это.
A: В настоящее время нет никаких методов QTKit для добавления дорожек к a QTMovie объект. Однако можно использовать стандартный QuickTime APIs для добавления дорожек к Фильму, связанному с a QTMovie (а именно, NewMovieTrack, NewTrackMedia, и т.д.). Это должно хорошо работать.
Вот быстрая схема того, что необходимо сделать:
создайте a
QTMovieсвяжите фильм в формате QuickTime с
QTMovieсоздайте новую дорожку с
NewMovieTrackиспользуйте ту дорожку для инициализации a
QTTrack
Вот фрагмент кода, показывающий, как он сделан.
Перечисление 2 , добавляющее a QTTrack к a QTMovie
@implementation QTMovie (QTMovieExtensions)
-(BOOL)isEditable
{
NSDictionary *movieDict = [self movieAttributes];
NSNumber *isEditable = [movieDict objectForKey:QTMovieEditableAttribute];
return [isEditable boolValue];
}
- (QTTrack *) addVideoTrackWithSize:(NSSize) aSize
{
QTTrack *newTrack = nil;
require( [self isEditable] == YES, NOT_EDITABLE);
Track videoTrack = NewMovieTrack ([self quickTimeMovie],
FixRatio (aSize.width, 1),
FixRatio(aSize.height, 1),
kFullVolume);
require (GetMoviesError() == noErr, NEWTRACK_ERROR);
Handle dataRef = NULL;
Handle hMovieData = NewHandle (0);
require (hMovieData != nil, NEWHANDLE_ERR);
OSErr osErr = PtrToHand (&hMovieData, &dataRef, sizeof(Handle));
require (osErr == noErr, PTRTOHAND_ERROR);
Media videoMedia = NewTrackMedia (videoTrack,
VideoMediaType,
[[self timeScale] longValue],
dataRef,
HandleDataHandlerSubType);
require (GetMoviesError() == noErr, TRACKMEDIA_ERROR);
QTTime movieDuration = [self duration];
InsertMediaIntoTrack (videoTrack, 0, 0, movieDuration.timeValue, fixed1);
require (GetMoviesError() == noErr, INSERTMEDIA_ERROR);
newTrack = [QTTrack trackWithQuickTimeTrack: videoTrack error:nil];
return newTrack;
INSERTMEDIA_ERROR:
DisposeTrackMedia(videoMedia);
TRACKMEDIA_ERROR:
PTRTOHAND_ERROR:
DisposeHandle(hMovieData);
NEWHANDLE_ERR:
DisposeMovieTrack (videoTrack);
NEWTRACK_ERROR:
NOT_EDITABLE:
return nil;
}
@end |
Когда стреляет уведомление QTMovieTimeDidChangeNotification?
Q: Когда делает QTMovieTimeDidChangeNotification огонь уведомления? Я ожидал, что он будет стрелять, когда временной код фильма изменился, такой как тогда, когда новый кадр выводится на экран, но это, кажется, не имеет место. Я хотел бы иметь возможность вывести на экран текущее время фильма, поскольку оно играет.
A: QTMovieTimeDidChangeNotification запущен каждый раз, когда время фильма изменяется на время *** кроме того, чем это было бы во время нормального воспроизведения ***. Таким образом, это не запустило каждый кадр.
Некоторые примеры: пользовательские щелчки на панели контроллера фильма для изменения времени фильма или соединенного проводом действия изменяет время фильма.
Вместо этого Вы могли бы рассмотреть использование NSTimer, или даже функция фильтра действия Контроллера Фильма (см., что функционирует Панель инструментов Фильма MCSetActionFilterWithRefCon).
Создание пустого фильма и добавление изображений к нему
Q: Я хотел бы создать 10-секундное долго QTMovie от сингла NSImage и сохраните его как фильм в формате QuickTime (.mov) файл. Однако, кажется, нет никакого условия в QTKit для создания «пустого» фильма. Действительно ли это - истина?
A: QuickTime 7.2.1 обеспечивает новый метод initToWritableFile: создать «пустое» QTMovie (в терминологии QuickTime, фильме с перезаписываемой ссылкой на данные):
- (id)initToWritableFile:(NSString *)filename error:(NSError **)errorPtr; |
Для версий QuickTime до 7.2.1, можно использовать собственный QuickTime API CreateMovieStorage для создания фильма в формате QuickTime с перезаписываемой ссылкой на данные затем используйте QTKit movieWithQuickTimeMovie: метод для инстанцирования a QTMovie из этого фильма в формате QuickTime.
Пример кода 'QTKitCreateMovie' демонстрирует оба из этих методов.
Можно также инициализировать a QTMovie непосредственно от Вашего NSImage и затем экспортируйте его, как Вы в настоящее время делаете. Вот фрагмент кода, показывающий этот метод:
Перечисление 3 , инициализирующее a QTMovie от NSImage.
// instantiate an NSImage object for our image
NSImage *image = [NSImage imageNamed:@"some_image"];
if (image)
{
// Returns a data object containing TIFF for all representations
NSData *data = [image TIFFRepresentation];
QTDataReference *dataRef = [QTDataReference dataReferenceWithReferenceToData:data
name:@"some_image.tiff" MIMEType:nil];
// make a QTMovie from the NSImage
QTMovie *movie = [QTMovie movieWithDataReference:dataRef error:nil];
// make the movie editable
[movie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];
// set the duration to 10 seconds
QTTimeRange range = QTMakeTimeRange(QTZeroTime, [movie duration]);
[movie scaleSegment:range newDuration:QTMakeTime(10, 1)];
// export as a 3GPP file; or use your existing export code here....
// setup the proper export attributes in a dictionary
NSDictionary *dict= [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], QTMovieExport,
[NSNumber numberWithLong:kQTFileType3GPP], QTMovieExportType, nil];
// write the QTMovie to a 3GPP movie file on disk
[movie writeToFile:@"/tmp/my3GP.mov" withAttributes:dict];
} |
Экспорт QTMovie к новому файлу на диске
Q: У меня есть a QTMovie то, что я хотел бы записать в мой жесткий диск. Я использую writeToFile: метод, чтобы сделать это и файл создаются на моем диске, но фильм показывает пустой (белый) экран, когда я играю его.
Вот мой код:
// My movie
QTMovie *movie = [qtPlayer movie];
// The codec dictionary
NSDictionary *codecDictionary =
[NSDictionary dictionaryWithObjectsAndKeys: @"jpeg",
QTAddImageCodecType, [NSNumber numberWithInt: codecNormalQuality],
QTAddImageCodecQuality, nil];
// The moviePath is also correct
[movie writeToFile: moviePath withAttributes: codecDictionary]; |
A: Ключи QTAddImageCodecType и QTAddImageCodecQuality предназначаются для использования в словаре, переданном - [QTMovie addImage:forDuration:withAttributes:] метод.
С writeToFile:withAttributes: метод необходимо вместо этого использовать следующие ключи (они взятые от QTMovie.h соединяют интерфейсом с файлом):
// writeToFile: attributes dictionary keys
QTKIT_EXTERN NSString *QTMovieExport
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; // NSNumber (BOOL)
QTKIT_EXTERN NSString *QTMovieExportType
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; // NSNumber (long)
QTKIT_EXTERN NSString *QTMovieFlatten
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; // NSNumber (BOOL)
QTKIT_EXTERN NSString *QTMovieExportSettings
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; // NSData (QTAtomContainer)
QTKIT_EXTERN NSString *QTMovieExportManufacturer
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; // NSNumber (long) |
Следующие выборки показывают, как выполнить работу экспорта: Пример кода 'QTKitCreateMovie', Пример кода 'QTKitProgressTester' и Пример кода 'QTKitCommandLine'.
Получение списка QuickTime поддерживало типы файлов или расширения
Q: Как я могу получить список типов файлов или расширений, которые может обработать QuickTime?
A: Посмотрите QTMovie movieFileTypes: метод класса. Это должно сделать точно, что Вы хотите. Просто передайте вывод этого метода к NSSavePanel setAllowedFileTypes: метод. Проверьте Пример кода 'QTKitAdvancedDocument', чтобы видеть, как это сделано.
Это будет хорошо работать, и это позволяет Вам выборочно включать требующие типы неподвижного изображения, переводимые типы и типы, «агрессивные» средства импорта (как текст и файлы HTML) путем корректировки набора флагов передали movieFileTypes: метод.
Существует, однако, еще более простой метод, и это должно использовать canInitWithFile: method:. Вот фрагмент кода, показывающий, как он сделан:
- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
{
BOOL isDir = NO;
[[NSFileManager defaultManager] fileExistsAtPath:filename isDirectory:&isDir];
return isDir ? YES : [QTMovie canInitWithFile:filename];
} |
Этот метод в основном эквивалентен передаче в массиве типов файлов, возвращенных movieFileTypes: метод с QTIncludeAllTypes флаг.
Как выполняет работу функции QTMakeTimeFromString/QTTimeFromString?
Q: Как делает QTMakeTimeFromString/QTTimeFromString функциональная работа?
Текущая документация утверждает, что вызвана эта функция QTMakeTimeFromString, однако, если взгляд в заголовочном файле QTTime.h, Вы не найдете ту функцию. Это фактически вызывают QTTimeFromString. Вот код, который я использую:
QTTime oldTime = [qtMovie currentTime]; QTTime incTime = QTTimeFromString( @"00:02:00.00" ); QTTime newTime = QTTimeIncrement( oldTime, incTime ); NSLog( QTStringFromTime( oldTime ) ); NSLog( QTStringFromTime( incTime ) ); NSLog( QTStringFromTime( newtime ) ); |
Я получаю следующие результаты:
0:00:00:00.00/48000 0:00:00:00.00/1000000 0:00:00:00.00/1000000 |
Я также попытался установить строку времени в @"0:00:02:00.00", @"0:0:2:0.0", и другие изменения. Никакая удача.
Что я делаю неправильно?
A: Вы заметите следующий комментарий в QTTime.h:
// ,,,dd:hh:mm:ss.ff/ts |
который переводит в:
days:hours:minutes:seconds:frames/timescale |
Таким образом, необходимо попробовать строку как:
QTTime incTime = QTTimeFromString( @"00:00:02:00.00/600" ); NSLog( QTStringFromTime( incTime ) ); |
который должен хорошо работать. Текущая документация является неправильной.
QTMovie возражают не полностью сформированный?
Q:
Я в состоянии успешно инстанцировать a QTMovie объект с помощью movieWithFile: метод в моем приложении, но прямо после того, как я делаю это, я запрашиваю объект и замечаю, что это не содержит дорожек и только очень немногих атрибутов. И если я пытаюсь добраться, QTMovieNaturalSizeAttribute приписывают его, сообщает размер 0,0.
Есть ли что-то еще, что я должен сделать для надлежащего инстанцирования a QTMovie объект?
A:
Если Вы запрашиваете QTMovie возразите сразу после инициализации с movieWithFile: метод QTMovie объект не может быть полностью сформирован - в том смысле, что можно попросить его атрибуты или выполнить определенные операции на нем как вызов writeToFile: метод и другие. Это вызвано тем, что все QTMovie методы инициализации происходят aysnchronously по умолчанию.
Для предотвращения этого можно выполнить вызов инициализации синхронно. Чтобы сделать это, необходимо использовать initWithAttributes: метод и удостоверяется, что Вы устанавливаете QTMovieOpenAsyncOKAttribute к НЕТ. Вот фрагмент кода:
NSSize movieSize;
NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
(id)url, QTMovieURLAttribute,
[NSNumber numberWithBool:NO], QTMovieOpenAsyncOKAttribute,
nil];
QTMovie *movie = [QTMovie movieWithAttributes:attrs error:nil];
movieSize = [[movie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
[movie play];
... |
Другая опция состоит в том, чтобы установить обработчик уведомления для QTMovieLoadStateDidChangeNotification уведомление, и не запрашивает QTMovie объект для любых атрибутов до состояния загрузки, по крайней мере, QTMovieLoadStateLoaded. Вот фрагмент кода:
// install a notification handler for QTMovieLoadStateDidChangeNotification
QTMovie *movie = [QTMovie movieWithURL:url error:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(loadStateChanged:) name:QTMovieLoadStateDidChangeNotification object:movie];
.
.
.
// check for load state changes
-(void)loadStateChanged:(QTMovie *)movie
{
long loadState = [[movie attributeForKey:QTMovieLoadStateAttribute] longValue];
if (loadState >= QTMovieLoadStatePlayable)
{
// the movie has loaded enough media data to begin playing
[movie play];
}
else if (loadState >= QTMovieLoadStateLoaded)
{
// the movie atom has loaded; it's safe to query movie properties
NSSize movieSize;
movieSize = [[movie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
/* ... */
}
else if (loadState == -1)
{
/* error occurred; handle it */
}
} |
Нахождение последнего кадра фильма
Q:
Когда я достиг последнего кадра фильма, как я могу определить?
Я попытался использовать stepForward: метод, но это не сообщает, успешно выполнилось ли это фактически или нет. Будет QTMovieDidEndNotification дайте мне эту информацию?
A:
QTMovieDidEndNotification не выпущен при продвижении до конца фильма.
Одна альтернатива должна была бы определить Ваше собственное QTMovie категория с новыми методами для этих операций как показано ниже (замечают, что мы предварительно ожидали каждый метод с префиксом «rt _», таким образом, они не конфликтуют ни с какими текущими или будущими методами QTKit.):
@implementation QTMovie (MyQTMovieExtension)
- (BOOL)rt_stepForward
{
QTTime curTime, newTime;
curTime = [self currentTime];
[self stepForward];
newTime = [self currentTime];
return (QTTimeCompare(curTime, newTime) != NSOrderedSame);
}
- (BOOL)rt_stepBackward
{
QTTime curTime, newTime;
curTime = [self currentTime];
[self stepBackward];
newTime = [self currentTime];
return (QTTimeCompare(curTime, newTime) != NSOrderedSame);
}
@end |
Используя QTMovie возражает на фоновых потоках?
Q:
Я просто считал статью TN2125: ориентированное на многопотоковое исполнение программирование в QuickTime, но это ничего не говорит о QTKit. Как делают я безопасно использую QTMovie объекты на фоновом потоке?
A:
Наблюдайте следующие инструкции при работе с QTMovie объекты на фоновых потоках:
(1) выделите все QTMovie объекты на основном потоке.
Причина этого довольно проста: a QTMovie всегда связывается с компонентным экземпляром контроллера фильма, и в настоящее время никакие компоненты контроллера фильма не ориентированы на многопотоковое исполнение. В то время как неноль QTMovie может действительно быть создан на фоновом потоке, связанным контроллером фильма всегда будет NULL. Это отдельно не является фатальным; много операций могут быть выполнены на a QTMovie объект, инициализированный на фоновом потоке. Но определенные операции не будут работать правильно, включая большинство все уведомления и даже асинхронную загрузку фильма. Вот почему выделение a QTMovie на фоновом потоке не советуется.
(2) если Вы хотите воздействовать на a QTMovie на различном потоке отсоедините его от текущего потока с помощью Панели инструментов C Фильма API DetachMovieFromCurrentThread (на фильме в формате QuickTime связался с этим QTMovie как получено с quickTimeMovie: метод); тогда присоедините его к различному использованию потока AttachMovieToCurrentThread. Кроме того, к обходному решению ошибка в QTKit мы рекомендуем вызвать закрытый метод setIdling: здесь для проверки для фильма не определяют задачу на фоновом потоке.
(3) вызвать EnterMoviesOnThread перед созданием любого другого QuickTime, или QTKit обращается к вторичному потоку.
(4) вызвать ExitMoviesOnThread прежде, чем выйти из потока Вы сделали QuickTime, обращается.
(5) будьте подготовлены обработать ошибки от любого из тех вызовов; некоторые фильмы не могут быть перемещены во вторичные потоки (это - определенный кодек).
QTKit не делает ни одного из этого автоматически для Вас, но мы работаем над некоторым новым APIs, который, возможно, сделает этот процесс проще (или по крайней мере более подобный Какао).
Вот отрывок короткого кода, показывающий, как выполнить экспорт фильма на фоновом потоке:
- (void)doExportOnThread:(QTMovie *)movie
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
EnterMoviesOnThread(0);
AttachMovieToCurrentThread([movie quickTimeMovie]);
// To workaround a bug in QTKit we need to call the private
// method setIdling: to make sure the movie is not tasked on
// a background thread
if ([movie respondsToSelector:@selector(setIdling:)])
[movie setIdling:NO];
// do export
[movie writeToFile:....];
DetachMovieFromCurrentThread([movie quickTimeMovie]);
ExitMoviesOnThread();
[pool release];
} |
Разделение на подклассы QTMovieView
Q:
Я попытался переопределить mouseDown: метод QTMovieView класс без успеха. Покажите мне, как должным образом переопределить QTMovieView.
A:
Это - известная проблема с QTMovieView в QTKit 1.0, впоследствии фиксированном в QuickTime 7.0.4. Удостоверьтесь, что у Вас есть QuickTime 7.0.4 установленных.
QTMovie неожиданно рисует к верхней левой части экрана?
Q:
Если я создаю фильм с Панелью инструментов C Фильма API CreateMovieStorage, добавьте кадры к нему, затем инстанцируйте a QTMovie из этого фильма в формате QuickTime это неожиданно нарисует к верхней левой части экрана. Что продолжается?
A:
Вы столкнулись с проблемой, которая может возникнуть при смешивании Углерода QuickTime APIs и QTKit. При создании фильма с помощью собственного Углерода QuickTime APIs необходимо было всегда устанавливать действительный порт заранее, таким образом, фильм знает, где нарисовать. Вот Вопросы и ответы, который описывает это:
То, что происходит в Вашем случае, - в то время, когда Вы вызываете CreateMovieStorage активный порт установлен в экран, поэтому Ваш фильм нарисует на экран если не указано иное (например, путем звонка к SetMovieGWorld для фильма для указания различного порта).
Для предотвращения этого, Вы можете:
1) Используйте любой из доступных методов QTKit для открытия файла ролика, такой как movieWithFile:. QTKit гарантирует, что любой файл ролика, Вы открываете использование его APIs, будет иметь допустимый GWorld.
2) Создайте «фиктивный» GWorld прежде, чем создать новый фильм с CreateMovieStorage. Вот то, как:
-(void)QTKitMovieExample:(NSString *)inMoviePath
{
GWorldPtr gworld = NULL;
Rect rect = {0, 0, 1, 1};
// create a "dummy" gworld for our movie
QDErr qtErr = NewGWorld(&gworld, 32, &rect, NULL, NULL, 0);
NSAssert( qtErr == 0, @"NewGWorld failed");
OSErr err = noErr;
Handle dataRefH = nil;
OSType dataRefType;
// create a file data reference for our movie
err = QTNewDataReferenceFromFullPathCFString((CFStringRef)inMoviePath,
kQTNativeDefaultPathStyle,
0,
&dataRefH,
&dataRefType);
NSAssert( err == noErr, @"QTNewDataReferenceFromFullPathCFString failed");
// create a QuickTime movie from our movie file data reference
Movie nativeMovie = nil;
DataHandler outDataHandlerRef;
CreateMovieStorage (dataRefH,
dataRefType,
'TVOD',
smSystemScript,
newMovieActive,
&outDataHandlerRef,
&nativeMovie);
err = GetMoviesError();
NSAssert( err == noErr, @"CreateMovieStorage failed");
// set the gworld for the native QuickTime movie
SetMovieGWorld(nativeMovie, gworld, NULL);
// instantiate a QTKit QTMovie from our QuickTime movie
QTMovie *qtMovie = [QTMovie movieWithQuickTimeMovie:nativeMovie disposeWhenDone:NO error:nil];
NSAssert( qtMovie != nil, @"movieWithQuickTimeMovie failed");
[qtMovie retain];
// ... do stuff with movie here
if (dataRefH)
{
DisposeHandle(dataRefH);
}
if (qtMovie)
{
[qtMovie release];
}
if (nativeMovie)
{
DisposeMovie(nativeMovie);
}
} |
После того фильм привлечет к «макету» gworld место назначения.
История версии документа
| Дата | Примечания |
|---|---|
| 24.04.2008 | Добавленный, как получить кадр фильма, поскольку изображение, плюс обновления для существующего Q&As о создании фильма и добавлении изображений, добавляя QTTrack, объект QTMovie, не полностью сформированный и фильма неожиданно, рисует на верхний левый из экрана. |
| 25.09.2006 | Новые дополнения Вопросов и ответов для покрытия поточной обработки, синхронного инстанцирования фильма и других. |
| 19.12.2005 | Фиксируйте, чтобы передать корректное значение масштаба времени NewTrackMedia |
| 14.07.2005 | Новый документ, предоставляющий ответы многим часто, задавал вопросы QTKit. |