LINUX.ORG.RU

Сообщения Ya-NET

 

bus call в Gstreamer

Форум — Development

Всем привет!

Необходимо проигрывать видео, которое получаю по udp. Когда на порту нет данных (сервер недоступен прим.) необходимо показать заставку.

Server:

gst-launch-1.0 -v filesrc location=/video/0001.mp4 ! decodebin ! vpuenc_h264 bitrate=8192 ! rtph264pay ! udpsink host=192.168.5.255 port=5555

Client:

#define GST_PLAYER_UDP "udpsrc port=5555 caps=\"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96\"\
    ! rtph264depay ! decodebin ! videoconvert ! autovideosink"
....

static gboolean bus_call (GstBus     *bus, GstMessage *msg, gpointer    data)
{
  printf("msg=%s (from %s)\n",gst_message_type_get_name(GST_MESSAGE_TYPE(msg)), GST_MESSAGE_SRC_NAME(msg));

  return TRUE;
}
...
GstElement* gstLaunch()
{
  GstElement *pipeline;
  GError *error = NULL;

  pipeline = gst_parse_launch (GST_PLAYER_UDP, &error);
  if (!pipeline){
    g_print ("\tParse error: %s\n", error->message);
    return 0;
  }

  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
  guint watch_id = gst_bus_add_watch (bus, bus_call, NULL);
  gst_object_unref (bus);

  return pipeline;
}

Когда вещание начинается, все отлично и я могу увидеть событие начала потока:

display(/dev/fb0) resolution is (1280x800).
====== OVERLAYSINK: 4.0.9 build on May 12 2017 10:36:47. ======
display(/dev/fb0) resolution is (1280x800).
display(/dev/fb0) resolution is (1280x800).
msg=state-changed (from autovideosink0)
msg=state-changed (from videoconvert0)
msg=state-changed (from typefind)
msg=state-changed (from decodebin0)
msg=state-changed (from rtph264depay0)
msg=state-changed (from udpsrc0)
msg=state-changed (from pipeline0)
msg=state-changed (from videoconvert0)
msg=state-changed (from typefind)
msg=state-changed (from rtph264depay0)
msg=stream-status (from src)
msg=state-changed (from udpsrc0)
msg=state-changed (from pipeline0)
msg=stream-status (from src)
msg=new-clock (from pipeline0)
msg=state-changed (from videoconvert0)
msg=state-changed (from rtph264depay0)
msg=state-changed (from udpsrc0)
msg=state-changed (from h264parse0)
msg=state-changed (from h264parse0)
[INFO]  Product Info: i.MX6Q/D/S
msg=state-changed (from vpudec0)
[INFO]  Product Info: i.MX6Q/D/S
====== VPUDEC: 4.0.9 build on May 12 2017 10:36:53. ======
  wrapper: 1.0.65 (VPUWRAPPER_ARM_LINUX Build on May 12 2017 10:30:05)
  vpulib: 5.4.33
  firmware: 3.1.1.46072
msg=state-changed (from vpudec0)
[INFO]  bitstreamMode 1, chromaInterleave 1, mapType 0, tiled2LinearEnable 0
msg=state-changed (from decodebin0)
msg=stream-start (from pipeline0)<-------------------------start
msg=state-changed (from autovideosink0-actual-sink-overlay)
msg=state-changed (from autovideosink0)
msg=async-done (from pipeline0)
msg=state-changed (from autovideosink0-actual-sink-overlay)
msg=state-changed (from autovideosink0)
msg=state-changed (from vpudec0)
msg=state-changed (from capsfilter0)
msg=state-changed (from h264parse0)
msg=state-changed (from typefind)
msg=state-changed (from decodebin0)
msg=state-changed (from pipeline0)
msg=qos (from autovideosink0-actual-sink-overlay)
msg=tag (from autovideosink0-actual-sink-overlay)
но когда трансляция завершена или сервер недоступен, то нет никакой возможности понять что сейчас нет данных, не эмиится bus_call. Как я могу понять что трансляция закончена или сервер недоступен?

 

Ya-NET
()

форматирование корневого раздела

Форум — General

Здравствуйте!

Есть задача отформатировать раздел с текущей системой, а после развернуть там новую rootfs. Сначала я выгружаю текущую систему в оперативную память, а посте пытаюсь форматировать мой раздел, но он занят по причине:

@svt /$ mkfs.ext3 /dev/mmcblk0p1 
mke2fs 1.41.4 (27-Jan-2009)
/dev/mmcblk0p1 is apparently in use by the system; will not make a filesystem here!
Я могу его примонтировать, но директории(dev,tmp ...) на нем не удается, т.к. они примонтированы до chroot.

Вот скрипт, кот перемещает в ОЗУ:

# Script to copy / to tmpfs and continue boot from there
# Do not run this from a child shell. Use ". ramify" or exec.
# The shell running this script must be the only process on the system.
#
# Ensure this runs in /
cd /
# Create and mount tmpfs file system for /
mount -t tmpfs tmpfs mnt
# Copy everything from / filesystem to tmpfs
# Tar will restore proper owners and permissions when run as root
# FIXME: This is very slow because it reads / in many small pieces
# TODO: Add --exclude to prevent copying unneeded stuff
tar --one-file-system -c . | tar -C /mnt -x
# Move other mounts
mount --move dev mnt/dev
mount --move proc mnt/proc
mount --move run mnt/run
mount --move sys mnt/sys
# Create fstab with just new root file system
sed -i '/^[^#]/d;' mnt/etc/fstab
echo 'tmpfs / tmpfs defaults 0 0' >> mnt/etc/fstab
# Pivot root using instructions from pivot_root(8) man page
cd mnt
mkdir old_root
pivot_root . old_root
# Old root can only be unmounted once sh running from old root
# finishes. Continue startup normally using init.
exec chroot . bin/sh -c "umount old_root ; exec sbin/init"

Перемещено leave из development

 , ,

Ya-NET
()

Бегущая строка на GTK

Форум — Development

Здравствуйте! Необходимо реализовать бегущую строку текста на gtk. Для примера вот движущаяся окружность:

#include <gtk/gtk.h>

#define WIDTH 	1920
#define HEIGHT 	360

//gcc `pkg-config --cflags gtk+-3.0` -o test test.c `pkg-config --libs gtk+-3.0`

gboolean pos = 0.0;

gboolean timer_func (gpointer data) {
	
  	GtkWidget *widget = (GtkWidget *)data;
  	gtk_widget_queue_draw(widget);

  	return TRUE;
}

gboolean draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) {

	guint width, height;
  	GdkRGBA color;
	pos += 5.0;
  	width = gtk_widget_get_allocated_width (widget);
  	height = gtk_widget_get_allocated_height (widget);
  	cairo_arc (cr,
             pos, height / 2.0,
             MIN (width, height) / 2.0,
             0, 2 * G_PI);

  	gtk_style_context_get_color (gtk_widget_get_style_context (widget),
                               0,
                               &color);
  	gdk_cairo_set_source_rgba (cr, &color);
  	cairo_fill (cr);

	if(pos >= WIDTH) pos =0;

 	return TRUE;
}

void activate (GtkApplication* app, gpointer        user_data) {
  	
  	GtkWidget *window;
  	window = gtk_application_window_new (app);
  	gtk_window_set_title (GTK_WINDOW (window), "Window");
  	gtk_window_set_default_size (GTK_WINDOW (window), WIDTH, HEIGHT);

  	GtkWidget *drawing_area = gtk_drawing_area_new ();

  	gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
  	g_signal_connect (G_OBJECT (drawing_area), "draw",
                    G_CALLBACK (draw_callback), NULL);
  	gtk_container_add(GTK_CONTAINER(window),drawing_area);

  	gtk_widget_show_all (window);

  	g_timeout_add(1, timer_func, (gpointer) drawing_area);
}

int main (int argc, char **argv) {

  	GtkApplication *app;
  	int status;
  	app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  	g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  	status = g_application_run (G_APPLICATION (app), argc, argv);
  	g_object_unref (app);

  	return status;
}
При перемещении возникают «фризы» и нет плавности. Возможно ли это исправить? Складывается ощущене, что не работает двойная буферизация.

 

Ya-NET
()

Netcat в локальной сети.

Форум — Development

Здравствуйте! Необходимо передать данные от одного компьютера - всем. Все подключено к одной сети и отлично пингуется.

Читаю (192.168.5.170-180):

nc -l 1234

Передаю (192.168.5.91) всем?:

cat /file.txt | nc 192.168.5.255 1234

Консоль:

nc: can't connect to remote host (192.168.5.255): Network is unreachable

Но судя по пинг сеть есть. В чем я ошибаюсь?

 

Ya-NET
()

Чтение из pipe

Форум — Development

Здравствуйте!

Имеется pipe в который gstreamer пишет видео. Необходимо постоянно считывать данные из pipe, т.к. gstreamer пишет видео еще и в порт и если этого не делать запись в порт прервется. Видео из pipe должно писаться в файлы по 10 минут. Пробовал читать в /dev/null и одновременно в файл, но данные, естественно, портятся. Если я буду прерывать чтение из pipe, на время создания нового файла как в примере ниже, то картинка, передаваемая через порт, пропадает, что недопустимо.

while true; do

  ......
  kill `ps ax | grep cat | grep -v "grep" | awk '{print $1}'`

  cat /home/pipe > /home/$(date +"%Y.%m.%d_%H:%M:%S").avi &  
  sleep 600
  
done 

 

Ya-NET
()

gstreamer - чтение и запись.

Форум — Development

Здравствуйте!

Необходимо читать из v4l2src device=/dev/video2 (камера ноутбука) и передавать картинку по udp и записывать ее в файл. Сервер и клиент должны находиться на одном компьютере.

сервер

gst-launch-0.10 v4l2src device=/dev/video2 ! udpsink port=8554

клиент

gst-launch-0.10 udpsrc port=8554 ! ffmpegcolorspace  ! jpegenc ! avimux ! filesink location=/home/video.avi

При запуске сервера камера включается (есть индикатор). При чтении (которого, видимо, нет) создается файл, однако записи туда не происходит.

Подскажите пожалуйста, что я делаю не так?

PS: я знаю, что можно реализовать передачу и запись на компьютере без клиент-сервера, через tee и queue, но этот вариант мне не подходит.

 

Ya-NET
()

Заголовки GtkTreeView

Форум — Development

Здравствуйте! Подскажите, есть ли способ создать treeview с заголовками вида:

  ________________________
 |    |       ЦВЕТ        |
 |  № |___________________| 
 |    | R  | G  | B  | A  |
 |____|____|____|___ |____|
 |    |    |    |    |    |         
 |    |    |    |    |    |

 

Ya-NET
()

Сеть на 3 км. с прямой (почти) видимостью

Форум — Linux-hardware

Здравствуйте, товарищи!

На работе наконец-то решили отказаться от ужасных 3G модемов, но... здание находится в 1-1.5 км от дома с подключением, возможности протянуть провод нет. Между зданиями небольшая роща, а в остальном видимость хорошая. Есть у кого реальный опыт создания такой сети? Какое оборудование* выбрать?

*бюджет 10-15к

 ,

Ya-NET
()

подключение к WiFi с использованием nm-glib

Форум — Development

Здравствуйте! Собственно, сабж. Ниже то, что навоял по немногим примерам. Казалось бы, куда проще ssid + password = connect, НО оказалось, библиотека куда более сложна. Думаю, проблема в настройках соедиенния или в specific_object в ф-и подключения.

gboolean wi_fi_dev_activate_connection(const gchar * ssid, const gchar * key)
{
   
    //получаем устройство
    NMDevice *device = get_device_by_type(NM_WIFI_DEVICE);
   
    if (device == NULL) {
      printf("Cannot get available device!\n");
      return FALSE;
    }

    //получаем точку доступа по ssid
    NMAccessPoint* ap = wifi_device_get_ap_by_ssid(device, ssid);
  
    if (ap == NULL) {
      printf("Cannot get acces point!\n");
      return FALSE;
    }

    //создаем подключение
    NMConnection *connection = nm_connection_new();

    //натраиваем его...


    //общие настройки
    NMSettingConnection *s_connection =
                       (NMSettingConnection *) nm_setting_connection_new();
    char *uuid = nm_utils_uuid_generate();
    g_object_set(s_connection,
    NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
    NM_SETTING_CONNECTION_UUID, uuid, "autoconnect", TRUE, "id",
                        ssid, "name", "wireless", NULL);
    nm_connection_add_setting(connection, (NMSetting *) s_connection);
    g_free(uuid);

     //настройки беспроводного
     NMSettingWireless *s_wireless =
                        (NMSettingWireless *) nm_setting_wireless_new();
    GByteArray *_ssid;
    gint len = strlen(ssid);
    _ssid = g_byte_array_sized_new(len);
    g_byte_array_append(_ssid, (const guint8 *) ssid, len);
    g_object_set(s_wireless, NM_SETTING_WIRELESS_SSID, _ssid,
    NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA, NULL);
    g_byte_array_free(_ssid, TRUE);
    nm_connection_add_setting(connection, (NMSetting *) s_wireless);

    //настройки безопасности 
    NMSettingWirelessSecurity *s_wireless_security =
                        (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
    g_object_set(s_wireless_security, "wep-key0", key, "key-mgmt","ieee8021x", NULL);
    nm_connection_add_setting(connection,(NMSetting *) s_wireless_security);


    //настройки IP4(6)
    NMSettingIP4Config *s_ip4 =
                        (NMSettingIP4Config *) nm_setting_ip4_config_new();
    g_object_set(s_ip4, NM_SETTING_IP4_CONFIG_METHOD,
    NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
    nm_connection_add_setting(connection, (NMSetting *) s_ip4);

    NMSettingIP6Config *s_ip6 =
                        (NMSettingIP6Config *) nm_setting_ip6_config_new();
    g_object_set(s_ip6, NM_SETTING_IP6_CONFIG_METHOD,
    NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
    nm_connection_add_setting(connection, (NMSetting *) s_ip6);


 
    //Подключаемся...
    nm_client_activate_connection(client, 
                                  connection, 
                                  device, 
                                  ap ? nm_object_get_path(NM_OBJECT(ap)) : NULL,
                                  activate_new_cb, NULL);

    return TRUE;
}

 ,

Ya-NET
()

glib network

Форум — Development

Здравствуйте! Начал перевод простенького NM на glib (до - скрипты c исп-ем nmcli, через system()). Сразу проблема - не могу получить устройства. В документации просто написано:

path: the DBus object path of the device

Формат и пример найти уже полдня не могу. Помогите, кто работал с этим. Заранее спасибо!

static DBusGConnection *connection = NULL;
static GObject *wifi_dev = NULL;

int dbus_network_connection_init(void)
{
    error = NULL;
    connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
    if (connection == NULL) {
        g_printerr("Failed to open connection to bus: %s\n", error->message);
        g_error_free(error);
        return 1;
    }
     wifi_dev = nm_device_wifi_new (connection,???);
    if (wifi_dev == NULL) {
        return 1;
    }
  return 0;
}

 , ,

Ya-NET
()

Размер GtkWidget по hide

Форум — Development

Здравствуйте, товарищи! Опять столкнулся с проблемой по GTK. Есть контейнер (box/grid) в котором упакованы label'ы, необходимо при скрытии одной из меток оставить ее место, а не сжимать box. Box'у и Label'у нельзя задавать фиксированный размер.

 ,

Ya-NET
()

виртуальная клавиатура на GTK

Форум — Development

Здравствуйте, товариши! Нужна помощь по сабжу. Может, кто-то уже сталкивался с подобной задачей. Возмжна ли реализация силами только GTK или в другую сторону копать?

 ,

Ya-NET
()

Из консоли в ...TextView

Форум — Development

Здравствуйте! Необходимо получить информацию от gcc о компиляции и поместить ее в TextView. Выглядит это ТАК
Если я правильно понял, то необходимо перехватить поток вывода от процесса... помогите, если кто знает. Это кусок обработчика кнопки Выполнить:

char command[128];
sprintf(command, "gcc -shared -fPIC -Wl,-soname,test.so -Wall -I/example %s", filename);
system(command);

Заранее спасибо за помощь!

 ,

Ya-NET
()

Как получить позицию виджета в GtkGrid?

Форум — Development

В документации ничего такого не нашел. Нужно получить по фокусу на элементе внутри Grid'а расположение виджета, т.е. строка/столбец.

 , gtkgrid

Ya-NET
()

Как изменить цвет текущей строки в GtkTextView?

Форум — Development

Здравствуите! Подскажите, есть ли CSS свойство или что-то еще для изменения цвета фона текущей строки? Необходимо поменять на более яркий, бледный серый совсем не видно.

 , , gtktextviev

Ya-NET
()

Как подключить css в gtk

Форум — Development

Здравствуйте, помогите подключенить css в gtk. Вот css:

GtkNotebook headret {
    background-color: #a939f0
}
[code/]



GError **error;
GtkCssProvider *cssprov = gtk_css_provider_new ();
cssprov = gtk_css_provider_get_default();
gtk_css_provider_load_from_path (cssprov, "home/style.css", &error);
[code/]

в документации запутался. Если я правильно понял, то теперь провайдера можно подключить к виджетам...(но КАК?) Или он по имени в css к виджетам обращается? 

 ,

Ya-NET
()

подсветка синтаксиса GtkSourceLanguage

Форум — Development

Здравствуйте! Помогите разобраться с подсветкой синтаксиса GtkSourceView. Делал по тесту из документации. Не применяется.

gtk_source_buffer_set_highlight_syntax(buffer, TRUE);

	GtkSourceLanguageManager *lm;
	GtkSourceLanguage *l = NULL;

    l = gtk_source_language_manager_guess_language(lm, name_file, NULL);
    g_assert_cmpstr(gtk_source_language_get_id (l), ==, "c");
    gtk_source_buffer_set_language(buffer, l);

 gtksourcelanguage, , синтаксиса

Ya-NET
()

RSS подписка на новые темы