Технические вопросы и ответы QA1586

Получение QTKit - указание настроек сжатия носителей

Q: Как может я сжимать носители, получаемые до файла ролика при использовании QTCaptureMovieFileOutput объект?

A: Как может я сжимать носители, получаемые до файла ролика при использовании QTCaptureMovieFileOutput объект?

QTCaptureMovieFileOutput конкретный подкласс QTCaptureFileOutput возразите, что носители записей к файлам фильма в формате QuickTime (.mov) и представляют выходное место назначения для a QTCaptureSession.

Метод, ответственный за конфигурирование настроек сжатия носителей для QTCaptureMovieFileOutput объект называют достаточно удобно setCompressionOptions:forConnection:. Этот метод принимает a QTCompressionOptions объект (объект, инкапсулирующий предварительно установленные настройки сжатия) и a QTCaptureConnection объект для получаемых носителей.

При вызове setCompressionOptions:forConnection:, a QTCaptureConnection объект получен путем отправки сообщения connections к экземпляру QTCaptureMovieFileOutput. Этот метод наследован от QTCaptureOutput и используется для получения QTCaptureConnection экземпляры, представляющие отдельные мультимедийные потоки.

- (void)setCompressionOptions:(QTCompressionOptions *)compressionOptions 
                forConnection:(QTCaptureConnection *)connection

Description:

Sets the options the receiver uses to compress media on the given connection as it is being captured.

Parameters:

compressionOptionscompressionOptions - A QTCompressionOptions object detailing the options being
used to compress captured media, or nil if the media should not be compressed.

connection - The QTCaptureConnection connection containing the media to be compressed.

Discussion:

This method sets the options for compressing media as it is being captured. If compression cannot
be performed in real time, the receiver will drop frames in order to remain synchronized with the
session. If the receiver does not recompress the output media, this method should be passed nil.
The default value is nil.

Сконфигурировать экземпляр a QTCaptureMovieFileOutput возразите, чтобы сжать полученные носители, сначала создать a QTCompressionOptions экземпляр, указывающий, как Вы хотели бы сжатые носители (использование одного из предварительно установленных идентификаторов ниже), тогда просто вызовите setCompressionOptions:forConnection: передача в инициализированном QTCompressionOptions экземпляр и QTCaptureConnection для мультимедийного потока, который будет сжат.

Перечисление 1  , Устанавливающее опции сжатия для Видео.

QTCaptureSession            *mCaptureSession;
QTCaptureDeviceInput        *mCaptureDeviceInput;
QTCaptureMovieFileOutput    *mCaptureMovieFileOutput;
NSError *error;

...

mCaptureSession = [[QTCaptureSession alloc] init];

// find a video device and add it to the session
QTCaptureDevice *device = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
if (device) [device open:&error];

mCaptureDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:device];
[mCaptureSession addInput:mCaptureDeviceInput error:&error];

// create the movie file output and add it to the session
mCaptureMovieFileOutput = [[QTCaptureMovieFileOutput alloc] init];
[mCaptureSession addOutput:mCaptureMovieFileOutput error:&error];

// set the compression options for the movie file output
QTCaptureConnection *connection  = [[mCaptureMovieFileOutput connections] lastObject];
QTCompressionOptions *compressionOptions = [QTCompressionOptions 
                                            compressionOptionsWithIdentifier:
                                            @"QTCompressionOptionsSD480SizeH264Video"];

[mCaptureMovieFileOutput setCompressionOptions:compressionOptions forConnection:connection];

...

Перечисление 2  , Устанавливающее опции сжатия для Аудио и Видео.

...

NSEnumerator *connectionEnumerator = [[mCaptureMovieFileOutput connections] objectEnumerator];
QTCaptureConnection *connection;

// iterate over each output connection for the capture session and specify the desired compression
while ((connection = [connectionEnumerator nextObject])) {
    NSString *mediaType = [connection mediaType];
    QTCompressionOptions *compressionOptions = nil;

    // specify the compression options according to the media type
    // (note: a list of other valid compression types can be found in the
    // QTCompressionOptions.h interface file)
    if ([mediaType isEqualToString:QTMediaTypeVideo]) {
        // use H.264
        compressionOptions = [QTCompressionOptions 
                               compressionOptionsWithIdentifier:@"QTCompressionOptions240SizeH264Video"];
    } else if ([mediaType isEqualToString:QTMediaTypeSound]) {
        // use AAC Audio
        compressionOptions = [QTCompressionOptions
                               compressionOptionsWithIdentifier:@"QTCompressionOptionsHighQualityAACAudio"];
    }

    // set the compression options for the movie file output
    [mCaptureMovieFileOutput setCompressionOptions:compressionOptions forConnection:connection];
}

...

A QTCompressionOptions объект может быть создан с любым из следующих идентификаторов, каждое представление ряд опций, определяющих, как будут сжаты носители.

Video compression options identifiers ( QTMediaTypeVideo ):

These compression options are appropriate for high quality intermediate video that
requires further processing.

    QTCompressionOptionsLosslessAppleIntermediateVideo
    QTCompressionOptionsLosslessAnimationVideo
    QTCompressionOptionsJPEGVideo

These compression options are appropriate for medium and low quality video that will be used for
delivery to destinations such as the internet.

    QTCompressionOptions120SizeH264Video
    QTCompressionOptions240SizeH264Video
    QTCompressionOptionsSD480SizeH264Video
    QTCompressionOptions120SizeMPEG4Video
    QTCompressionOptions240SizeMPEG4Video
    QTCompressionOptionsSD480SizeMPEG4Video
Audio compression options identifiers ( QTMediaTypeSound ):

This compression option is appropriate for lossless audio that requires further processing, or is
intended for high fidelity destinations.

    QTCompressionOptionsLosslessALACAudio

These compression options are appropriate for audio delivered with lossy compression.

For music and other high quality audio.

    QTCompressionOptionsHighQualityAACAudio

For voice recordings.

    QTCompressionOptionsVoiceQualityAACAudio

Если кодек, требуемый определенной опцией сжатия в не установленный, вызывая compressionOptionsWithIdentifier: возвратится nil и идентификатор не будет включен в массив, возвращенный compressionOptionsIdentifiersForMediaType:. Например, QTCompressionOptionsLosslessAppleIntermediateVideo идентификатор требует, чтобы Промежуточный Кодек Apple был установлен в системе.

Ссылки:



История версии документа


ДатаПримечания
09.10.2009

Передовая статья

11.03.2008

Передовая статья

13.02.2008

Новый документ, описывающий, как сконфигурировать выходной объект файла сохранить сжатые полученные носители.