Инструменты пользователя

Инструменты сайта


develop:qt:media

Мультимедия

qt += multimedia

QMediaObject

Предоставляет некоторые базовые функции, которые являются общими для классов более высокого уровня, в основном такие как: доступность, метаданные, функции для соединения со вспомогательными классами.

Классы более высокого уровня обеспечивают фактическую мультимедийную функциональность за счет внутреннего использования QMediaService и используют интерфейсы QMediaControl, реализованные службой, для реализации своего API.
Большинство медиа-объектов при создании будут запрашивать новый экземпляр QMediaService, но некоторые (QMediaRecorder, QAudioRecorder) могут совместно использовать службу.

QMediaService

Класс устарел, не рекомендуется к использованию, альтернатива не указана.
Общий базовый класс, для реализации медиа-сервисов.
Из функций толком ничего не указано в доке, видимо выводится из использования, а функционал вынесен в другие классы.

QMediaControl

Базовый класс для элементов управления медиа-сервисом.
Из функций тоже ничего не указано, наследуемых классов оч много, очевидно именно в них весь функционал
«Большая часть кода приложения не будет напрямую взаимодействовать с элементами управления медиа-службой, вместо этого QMediaObject действует как посредник, между эл управления и приложением»

QCamera

Предоставляет интерфейс для системных камер.
Можно использовать с QCameraViewfinder для отображения видоискателя, QMediaRecorder для записи видео и QCameraImageCapture для съемки изображений

Имеется несколько свойств:

  • captureMode - тип носителя (CaptureViewfinder (отображение видоискателя); CaptureStillImage (захват изображения); CaptureVideo (захват видео)), изменение режима вызывает изменение статуса камеры. Так же, дается сигнал- captureModeChanged()
  • lockStatus - общий статус всех запрошенных блокировок камеры (фокус/экспозиция и т.д.)
  • state - текущее состояние камеры (UnloadedState; LoadedState; ActiveState). Есть сигнал
  • status - текущий статус камеры (ActiveStatus; Starting; StoppingStatus и т.д.). Есть сигнал

QCameraImageCapture

Класс для доступа к функциям записи мультимедийных объектов.
enum CaptureDestination: {CaptureToFile; CaptureToBuffer}

int Capture(QString)- захват изображения и сохранение его в файл. Асинхронная, вызываются сигналы типа imageCaptured(), imageSaved(id, name), error().
Если путь/имя файла не передано в аргументе, используется умолчательные, возвращается в сигналах.
Возвращает параметр Id используемый в упомянутых сигналах
Перед вызовом стоит проверить готовность камеры, свойство- isReadyForCapture(). Есть соответствующий сигнал.

imageAvailable(int Id, QVideoFrame)- сигнал, посылается когда захват установлен в буфер и есть доступный кадр.

QCameraInfo

Получение информации о доступных в системе камерах.
Статические ф-ции defaultCamera() и availableCameras() возвращают доступные устр-ва.
Можно создавать собственные объекты, ссылающиеся на физ устр-ва

:!: Пример: выбор камеры из списка
const QList<QCameraInfo> vCamers= QCameraInfo::availableCameras();
for(const QCameraInfo &cameraInfo:vCamers)
{
  if(cameraInfo.deviceName()== "myCamera")
    camera= new QCamera(cameraInfo())
}

QCameraViewfinder

Виджет видоискателя камеры

:!: Пример: использование QCameraViewfinder
camera= new Camera;
viewfinder= new QCameraViewfinder();
viewfinder->show();
 
camera->setViewfinder(viewfindeer);
 
imageCapture= new QCameraImageCapture(camera);
camera->setCaptureMode(QCamera::CaptureStillImage);
camera->start();

QCameraFocus

Позволяет настраивать фокусировку и масштабирование.
Масштабирование может быть оптическим (более дорогое но более качественное, используются сенсоры камеры поэтому может не поддерживаться) либо цифровым (простое увеличение части рамки).
maximumOpticalZoom() позволяет проверить поддержку оптического зума, zoomTo() позволяет одновременно изменять оптическое и цифровое масштабирование.

Некоторое оборудование поддерживает автофокусировку, можно использовать с помощью FocusPointMode. Можно использовать в сочетании с QCameraFocusZone.

:!: Установить фокус в нижней части, 25% от угла.. вроде как
QCameraFocus *focus= camera->focus();
focus->setFocusMode(QCameraFocus::FocusPointCustom);
focus->setCustomFocusPoint(QPointF(0.25f, 0.75f));
 
// super zoom
focus->zoomTo(3.0, 4.0);
develop/qt/media.txt · Последнее изменение: 2021/11/05 11:38 — admin