Управляем чем угодно откуда угодно

Управлялка на QT

Обсуждение клиентского ПО для доступа к виртурилке, управления и мониторинга

Re: Управлялка на QT

Сообщение phoenix367 » 05 мар 2014, 12:35

sanya555 писал(а):Я что то не могу найти где вы реализовали прием видео. Вообще на тему захвата видео с гстримера примеров мало, может посоветуете что почитать. А то я уже и в теме там где человек opencv и стример к проекту VStudio привязывал лазил, пробывал,а эффект нулевой.


Значит попробую объяснить. Вот файл главной формы управляющего приложения https://github.com/phoenix367/v2rpins_sdk/blob/master/cherokey-robot/RobotControl/ui/MainForm.cpp

Рассмотрим конструктор MainForm. В нем есть код

Код: Выделить всё
    videoWidget = new QGst::Ui::VideoWidget(widget.tabVideo);
    QGridLayout *videoGrid = new QGridLayout(widget.tabVideo);
    videoGrid->addWidget(videoWidget, 0, 0);


Т.е. создаем видео-виджет из QtGStreamerUi и привязываем его к одному из табов на главной форме. Собственно это вся инициализация. Теперь рассмотрим функции запуска и остановки видео.

Код: Выделить всё
void MainForm::startVideo()
{
    QString pipeDescr;

    if (widget.rbtWiFi->isChecked())
    {
        pipeDescr = "udpsrc port=3000 ! application/x-rtp, media=video, "
            "payload=96 ! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! "
            "videoscale add-borders=true ! ximagesink sync=false";
    }
    else
    {
        return;
    }

    m_pipeline = QGst::Parse::launch(
            pipeDescr).dynamicCast<QGst::Pipeline>();

    if (m_pipeline)
    {
        videoWidget->watchPipeline(m_pipeline);
        m_pipeline->setState(QGst::StatePlaying);
    }
}

void MainForm::stopVideo()
{
    if (m_pipeline)
    {
        videoWidget->stopPipelineWatch();
        m_pipeline->setState(QGst::StateNull);
        m_pipeline.clear();
    }
}


Для запуска видео мы должны создать пайплайн. Проще всего это сделать воспользовавшись функцией QGst::Parse::launch. После того, как пайплайн создан заставляем видео-виджет его слушать. Как только в пайплайне появляется какое-то видео, оно будет отображаться в нашем виджете. Для того, чтобы теперь пайплайн запустить мы должны ему сказать

Код: Выделить всё
m_pipeline->setState(QGst::StatePlaying);


При остановки видео выполняем действия в обратном порядке. Сначала отцепляем виджет от пайплайна, затем полностью останавливаем пайплайн, и наконец уничтожаем его, чтобы не мешался.

Все вышеперечисленное делается с помощью QtGStreamerApi. Можно аналогичное сделать и на голом жстримере, но кода получится гораздо больше.
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

Re: Управлялка на QT

Сообщение sanya555 » 05 мар 2014, 14:43

Огромное вам спасибо, я ваш должник. Если бы не вы, я бы до сих пор мучился и не знал с чего начать. Теперь я хотя бы знаю в каком направлении двигаться. Кстати понравился фрэймворк QT, для начала выучу работу с ним. Да и QTGstreamer неплохую документацию и примеры имеет. И еще один вопрос, я так понимаю наличие Gstreamera со всеми его dll не нужно?
Ну и нужен ваш совет, я планирую писать под виндой, не возникнет ли у меня каких то нежелательных проблем, или же лучше сразу Ubuntu ставить и писать уже непосредственно под нее?
Еще раз спасибо, жаль что у меня в универе таких учителей как вы не было :D
sanya555
 
Сообщения: 74
Зарегистрирован: 10 фев 2014, 13:20

Re: Управлялка на QT

Сообщение phoenix367 » 05 мар 2014, 17:41

sanya555 писал(а):И еще один вопрос, я так понимаю наличие Gstreamera со всеми его dll не нужно?
Ну и нужен ваш совет, я планирую писать под виндой, не возникнет ли у меня каких то нежелательных проблем, или же лучше сразу Ubuntu ставить и писать уже непосредственно под нее?


dll-ки нужны. Можно попробовать конечно статически все линковать, но я ни разу такую схему не пробовал, поэтому о ее реализуемости ничего сказать не могу. Писать под виндой клиентский и даже встраиваемый софт скорее всего можно. Вроде тут уже эту тему обсуждали применительно к Eclipse
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

Re: Управлялка на QT

Сообщение sanya555 » 06 мар 2014, 10:43

Как я это понимаю: скачиваем обычный gstreamer, скачиваем исходники QTGstreamer отсюда http://gstreamer.freedesktop.org/src/qt-gstreamer/, в проекте добавляем нужные заголовочные файлы с закаченого архива и все. Или нужно так же проэкту указать хэдери и lib файлы с gstreamer, как это было показано в этой ветке viewtopic.php?f=44&t=13392 ?
sanya555
 
Сообщения: 74
Зарегистрирован: 10 фев 2014, 13:20

Re: Управлялка на QT

Сообщение sanya555 » 08 мар 2014, 14:59

Возник вопрос, я так понимаю что под unix системы есть отдельные qtgstreamer? Тоесть под виндой либы из того сообщения что выше бесполезны?
А если можно, то ни могли бы вы помочь сконфигурировать проэкт?
sanya555
 
Сообщения: 74
Зарегистрирован: 10 фев 2014, 13:20

Re: Управлялка на QT

Сообщение phoenix367 » 08 мар 2014, 23:44

sanya555 писал(а):Возник вопрос, я так понимаю что под unix системы есть отдельные qtgstreamer? Тоесть под виндой либы из того сообщения что выше бесполезны?
А если можно, то ни могли бы вы помочь сконфигурировать проэкт?


Ну сначала надо установить необходимые пакеты. Для этого, например, в Ubuntu надо выполнить следующую команду

Код: Выделить всё
sudo apt-get install libqtgstreamer-dev libqtgstreamerui-0.10-0 libqtgstreamerutils-0.10-0


Далее создаете либо qt-приложение, либо библиотеку, в зависимости от ваших потребностей. Затем добавляете поддержку qtgstreamer в проект. Если работаете в QtCreator, то просто пишете в .pro-файл следующие строки

Код: Выделить всё
PKGCONFIG += QtGStreamerUi-0.10
PKGCONFIG += QtGStreamerUtils-0.10
PKGCONFIG += QtGStreamer-0.10


Если же вы используете какую-то другу IDE с поддержкой Qt, то, как правило, нужно добавить включение соответствующих пакетов в настройки проекта. Например для NetBeans 7.3.1 это будет выглядеть так
Изображение

Ну а дальше просто используете компоненты в своем проекте.
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

Re: Управлялка на QT

Сообщение sanya555 » 10 мар 2014, 12:45

а какую строку надо на виртурилке запускать?
sanya555
 
Сообщения: 74
Зарегистрирован: 10 фев 2014, 13:20

Re: Управлялка на QT

Сообщение phoenix367 » 11 мар 2014, 12:33

sanya555 писал(а):а какую строку надо на виртурилке запускать?


Не совсем понятен вопрос. Вы хотите мой проект на виртурилке запустить, или свой сделать?
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

Re: Управлялка на QT

Сообщение sanya555 » 11 мар 2014, 18:44

phoenix367 писал(а):
sanya555 писал(а):а какую строку надо на виртурилке запускать?


Не совсем понятен вопрос. Вы хотите мой проект на виртурилке запустить, или свой сделать?


Хочу свой сделать, но просто мне пока не понятно как правильно писать pipeline для gstreamer. В проэкте есть строка, которая на компе запускаеться, а какую строку вы вводите для gstreamera на самой платке я не знаю.
sanya555
 
Сообщения: 74
Зарегистрирован: 10 фев 2014, 13:20

Re: Управлялка на QT

Сообщение phoenix367 » 12 мар 2014, 11:51

У меня сейчас сделано следующим образом. В папке /etc/cherokey-robot на виртурилке лежат скрипты управления, в том числе и для запуска видео передачи на заданное устройство. Для последнего служат скрипты run_video_composite и run_video_wifi. Соответственно первый запускает видео на композитный видеовыход, а второй - цифровую передачу через wifi с указанием IP-адреса получателя.

Скрипты доступны по ссылке https://github.com/phoenix367/v2rpins_sdk/tree/master/cherokey-robot/scripts
Но вообще я бы вам рекомендовал пользоваться строками, которые приводятся в официальной документации на виртурилку.
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

Пред.След.

Вернуться в Софт на управляющих устройствах (iOS, Android, Win/Mac/Linux)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron