- 6,082
- 4,445
Добрый день, уважаемые гости и негости данного форума.
В данной теме будет представлена библиотека захвата веб-камер для GTA:SA/SAMP. Название позаимствовано в дань уважения у класса CCamera из одноимённой игры.
Ниже будет предоставлено API для перечисления устройств, управления захватом и отображения видеопотока, а также файл с полноценным примером работы с библиотекой.
После подключения библиотеки:
Lua:
local ccamera = require 'ccamera'
Ccamera:
| Функция | Описание |
|---|---|
| ccamera.version() | Возвращает версию библиотеки |
| ccamera.enumerate() | Возвращает список доступных камер в формате { id, name } |
| ccamera.new(device_id) | Создаёт объект камеры для указанного устройства. Захват автоматически не запускается |
| ccamera.set_render_device(ptr) | Передаёт библиотеке указатель на IDirect3DDevice9 |
| ccamera.unload() | Останавливает все камеры, принадлежащие текущему Lua-скрипту |
Объект Camera:
| Метод | Описание |
|---|---|
| cam:start(width, height, fps) | Запускает захват с указанными параметрами |
| cam:stop() | Останавливает захват и освобождает ресурсы устройства |
| cam:is_capturing() | Возвращает состояние захвата (true / false) |
| cam:texture_id() | Возвращает текстуру Direct3D9 для отображения |
| cam:actual_fps() | Возвращает фактическую частоту кадров видеопотока |
| cam:resolution() | Возвращает фактическое разрешение текущего видеопотока |
| cam:set_device(device_id) | Переключает объект на другое устройство |
| cam:last_error() | Возвращает текст последней ошибки |
| cam:destroy() | Принудительно освобождает все ресурсы камеры |
Параметры width, height и fps, передаваемые в cam:start(), являются запрашиваемыми значениями. Фактические параметры видеопотока определяются драйвером устройства и возможностями камеры. Например:
не гарантирует получение потока 1920x1080 @ 60 FPS.
Для получения фактических параметров используйте:
cam:start(1920, 1080, 60)не гарантирует получение потока 1920x1080 @ 60 FPS.
Для получения фактических параметров используйте:
cam:resolution()cam:actual_fps()Список устройств:
Lua:
local devices = ccamera.enumerate()
for _, device in ipairs(devices) do
print(device.id, device.name)
end
Пример результата:
Lua:
{
{ id = 0, name = "Dilbarov OBS Virtual GayCam" },
{ id = 1, name = "Grodno HD Webcam" }
}
Lua:
local ok, err = cam:start(1920, 1080, 60)
if ok then
local width, height = cam:resolution()
local fps = cam:actual_fps()
print(string.format("actual: %dx%d @ %.1f fps", width, height, fps))
end
Lua:
local ok, err = cam:set_device(1)
if not ok then
print(err)
end
При использовании mimgui необходимо передать библиотеке указатель на игровой IDirect3DDevice9 следующим образом:
Lua:
local imgui = require 'mimgui'
local ccamera = require 'ccamera'
ccamera.set_render_device(getD3DDevicePtr()) -- в начале кода, или в мейне
-- После запуска камеры:
local tex = cam:texture_id()
if tex then
imgui.Image(tex, imgui.ImVec2(640, 480))
end
Обработка ошибок:
Lua:
local cam, err = ccamera.new(10)
if not cam then
print(err)
end
| Категория | Описание |
|---|---|
| device_not_found | Устройство не найдено |
| device_busy | Устройство используется другим приложением |
| access_denied | Доступ к устройству запрещён операционной системой |
| unsupported_constraints | Запрошенные параметры не поддерживаются устройством |
| d3d9_unavailable | Недоступно устройство Direct3D9 |
| internal | Внутренняя ошибка библиотеки |
Установка: распаковать архив ccamera в директорию moonloader/lib/
Благодарности:
ccap - за удобную библиотеку для захвата камеры
@wqaddfs0 - за помощь и поддержку в разработке
Андрей Бурим - за согласие в тестирование библиотеке (на гифке пример работы)
Вложения
Последнее редактирование: