Получение необработанных данных H.264 и AAC с камеры QML

Согласно этому коду:

import QtQuick 2.5
import QtMultimedia 5.5

Item {
id: root
Camera {
objectName: "camera"id: camera
captureMode: Camera.CaptureVideo
videoRecorder.videoCodec: "h264"videoRecorder.audioCodec: "aac"}
}

Можно ли получить необработанные данные H.264 и AAC (например, в unsigned char * типа) без записи на диск? Могу ли я получить доступ к этим потокам со стороны C ++?
Фактически, эти данные в будущем будут отправляться на сервер nginx с использованием librtmp,

0

Решение

Я буду использовать GStreamer.

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <gst/gst.h>

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

GstElement *pipeline;
GstBus *bus;
GstMessage *msg;

putenv("GST_DEBUG=6");
putenv("GST_PLUGIN_PATH_1_0=E:\\sdk\\gstreamer\\1.0\\x86_64\\lib\\gstreamer-1.0\\");
putenv("GST_PLUGIN_PATH=E:\\sdk\\gstreamer\\1.0\\x86_64\\lib\\gstreamer-1.0\\");

/* Initialize GStreamer */
gst_init (&argc, &argv);

/* Build the pipeline */
//pipeline = gst_parse_launch ("playbin uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm",
//NULL);
pipeline = gst_parse_launch ("ksvideosrc device-index=0 ! autovideosink", NULL); // Windows OS specific

/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);

/* Wait until error or EOS */
bus = gst_element_get_bus (pipeline);
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));

/* Free resources */
if (msg != NULL)
gst_message_unref (msg);
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);

return app.exec();
}

Вы можете написать свой собственный плагин для QML, используя эту библиотеку.
Спасибо форуму Qt за правильный путь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]