Библиотека StreamCamera
StreamCamera — это библиотека на основе плагинов для доступа к необработанным видеоданным с камеры и аппаратных кодировщиков и декодеров. У неё очень ограниченный интерфейс, и её следует рассматривать как дополнение к приложениям для видеоконференций.
Она основана на gecko-camera, библиотеке для браузера Aurora на основе Gecko. Название библиотеки может быть изменено.
Клиентский API
В библиотеке имеется пространство имён Aurora::StreamCamera
.
Классы StreamCamera:
Aurora::StreamCamera::Camera | Камера |
Aurora::StreamCamera::CameraListener | Обратные вызовы для камеры |
Aurora::StreamCamera::CameraManager | Управление камерой |
Aurora::StreamCamera::CodecManager | Управление кодеком |
Aurora::StreamCamera::GraphicBuffer | Дескриптор графического буфера |
Aurora::StreamCamera::VideoDecoder | Видеодекодер |
Aurora::StreamCamera::VideoDecoderListener | Обратные вызовы для видеодекодера |
Aurora::StreamCamera::VideoEncoder | Видеокодер |
Aurora::StreamCamera::VideoEncoderListener | Обратные вызовы для видеокодера |
Aurora::StreamCamera::VideoOutputQt5 | Привязка к Qt5/QML VideoOutput |
Структуры StreamCamera:
Aurora::StreamCamera::CameraCapability | Настройки видеопотока |
Aurora::StreamCamera::CameraInfo | Информация о камере |
Aurora::StreamCamera::RawImageFrame | Дескриптор видеокадра |
Aurora::StreamCamera::VideoCodecInfo | Основная информация о кодеке |
Aurora::StreamCamera::VideoDecoderMetadata | Настройки видеодекодера |
Aurora::StreamCamera::VideoEncoderMetadata | Настройки видеокодера |
Aurora::StreamCamera::YCbCrFrame | Дескриптор YUV-подобного видеокадра |
Aurora::StreamCamera::YCbCrFrame | Дескриптор YUV-подобного видеокадра |
Перечисления StreamCamera доступны в отдельном разделе.
Пример использования StreamCamera
Короткий пример использования камеры:
class Listener : public Aurora::StreamCamera::CameraListener
{
...
void onCameraFrame(std::shared_ptr<Aurora::StreamCamera::GraphicBuffer> buffer) override
{
// Действия с кадром
}
...
}
Aurora::StreamCamera::CameraManager *manager = StreamCameraManager();
Aurora::StreamCamera::CameraInfo info;
if (manager->getCameraInfo(0, info)) {
std::vector<Aurora::StreamCamera::CameraCapability> caps;
if (manager->queryCapabilities(camera.id, caps)) {
std::shared_ptr<Aurora::StreamCamera::Camera> camera = manager->openCamera(info.id);
const Aurora::StreamCamera::CameraCapability cap = caps.at(modeNumber);
Listener listener;
camera->setListener(&listener);
camera->startCapture(cap);
// Главный цикл
// Камера будет остановлена и закрыта, когда умный указатель `camera`
// будет отпущен
}
}
Примечание:
При захвате видео в режиме, отличном от QCamera::CaptureStillImage
, останавливается любое
воспроизведение звука в системе.
Происходит это потому, что при захвате видео с помощью QtMultimedia ресурс звука захватывается отдельно. Другие приложения перестают воспроизводить звук, это обеспечивается менеджером ресурсов ohm.