GStreamer и его цепочки — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
 
Строка 5: Строка 5:
  
 
= Первые шаги =
 
= Первые шаги =
== Трансляция (UDP) ==
+
== Установка ПО ==
 
+
=== Windows ===
Для трансляции на комп 192.168.1.10 запустить на virt2real
+
 
+
gst-launch v4l2src always-copy=false chain-ipipe=true ! video/x-raw-yuv,format='(fourcc)'NV12, \
+
width=640, height=480, framerate='(fraction)'30/1 ! dmaiaccel  ! dmaienc_h264 ddrbuf=true rcalgo=0 \
+
bytestream=true encodingpreset=2 ratecontrol=1 intraframeinterval=46 idrinterval=46 \
+
targetbitrate=1000000 ! rtph264pay ! udpsink port=3000 host=192.168.1.10 sync=false enable-last-buffer=false
+
 
+
== Прием потока на Windows ===
+
 
+
 
GStreamer для Windows можно скачать с оф. сайта http://gstreamer.freedesktop.org/data/pkg/windows/1.0.10/
 
GStreamer для Windows можно скачать с оф. сайта http://gstreamer.freedesktop.org/data/pkg/windows/1.0.10/
 
В процессе установки нужно выбрать "Выборочную установку" и выбрать все компоненты gstreamer.
 
В процессе установки нужно выбрать "Выборочную установку" и выбрать все компоненты gstreamer.
Строка 27: Строка 18:
 
* [http://gstreamer.freedesktop.org/data/pkg/windows/1.0.10/gstreamer-1.0-devel-x86_64-1.0.10.msi gstreamer-1.0-devel-x86_64-1.0.10.msi]
 
* [http://gstreamer.freedesktop.org/data/pkg/windows/1.0.10/gstreamer-1.0-devel-x86_64-1.0.10.msi gstreamer-1.0-devel-x86_64-1.0.10.msi]
  
== Прием потока на Linux ==
+
=== Linux (deb-дистрибутивы) ===
Должен быть установлен gstreamer
+
 
 +
Полный комплект gstreamer-a:
 +
 
 +
sudo apt-get install gstreamer0*
 +
 
 +
Базовый комплект (без шелухи):
 +
 
 +
sudo apt-get install gstreamer0.10 gstreamer0.10-plugins-base gstreamer0.10-plugins-bad gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly
 +
 
 +
=== Mac OS X ===
 +
 
 +
Ставим необходимые пакеты
 +
 
 +
brew install gstreamer gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly
 +
 
 +
== Трансляция (UDP) ==
 +
 
 +
Для трансляции на комп 192.168.1.10 запустить на virt2real
 +
 
 +
gst-launch v4l2src always-copy=false chain-ipipe=true ! video/x-raw-yuv,format='(fourcc)'NV12, \
 +
width=640, height=480, framerate='(fraction)'30/1 ! dmaiaccel  ! dmaienc_h264 ddrbuf=true rcalgo=0 \
 +
bytestream=true encodingpreset=2 ratecontrol=1 intraframeinterval=46 idrinterval=46 \
 +
targetbitrate=1000000 ! rtph264pay ! udpsink port=3000 host=192.168.1.10 sync=false enable-last-buffer=false
 +
 
 +
Прием на Linux:
  
 
  gst-launch udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \
 
  gst-launch udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \
Строка 37: Строка 52:
 
  show-preroll-frame=false
 
  show-preroll-frame=false
  
== Прием потока на Mac OS X ==
+
Прием на Mac OS X:
 
+
Ставим необходимые пакеты
+
 
+
brew install gstreamer gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly
+
 
+
Команда
+
  
 
  gst-launch-1.0 udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \
 
  gst-launch-1.0 udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \

Текущая версия на 11:53, 15 октября 2014

За трансляцию, запись и преобразование мультимедиа-информации в Virt2real отвечает приложение Gstreamer - модульное приложение, позволяющее строить цепочки обработки аудио-видео-потоков. К сожалению, альтернативные варианты почти полностью вытеснены этим продуктом из-за его тесной интеграциии в продукты TI. Эта интеграция состоит в наличии интерфейса к закрытым кодекам h.264/aac и уже реализованного механизма минимального копирования данных при обработке потока, что значительно сказывается на производительности.

Содержание

Сборка SDK

После make defconfig выполнить Package Selection for the target -> Audio and video applications должны быть выбраны базовые модули gstreamer-a + gst-ti-dmai (собственно, поддержка кодеков). Если вы пользуетесь прошивкой по умолчанию - там уже все есть, беспокоится не надо. Особо отметим, что сборка DVSDK (а именно - DMAI) должна предшествовать сборке buildroot, потому что в при компиляции gst-ti-dmai потребуются готовые библиотеки.

Первые шаги

Установка ПО

Windows

GStreamer для Windows можно скачать с оф. сайта http://gstreamer.freedesktop.org/data/pkg/windows/1.0.10/ В процессе установки нужно выбрать "Выборочную установку" и выбрать все компоненты gstreamer.

Для Windows x86 необходимо уставить пакеты:

Для Windows x64 необходимо уставить пакеты:

Linux (deb-дистрибутивы)

Полный комплект gstreamer-a:

sudo apt-get install gstreamer0*

Базовый комплект (без шелухи):

sudo apt-get install gstreamer0.10 gstreamer0.10-plugins-base gstreamer0.10-plugins-bad gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly

Mac OS X

Ставим необходимые пакеты

brew install gstreamer gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly

Трансляция (UDP)

Для трансляции на комп 192.168.1.10 запустить на virt2real

gst-launch v4l2src always-copy=false chain-ipipe=true ! video/x-raw-yuv,format='(fourcc)'NV12, \
width=640, height=480, framerate='(fraction)'30/1 ! dmaiaccel  ! dmaienc_h264 ddrbuf=true rcalgo=0 \
bytestream=true encodingpreset=2 ratecontrol=1 intraframeinterval=46 idrinterval=46 \
targetbitrate=1000000 ! rtph264pay ! udpsink port=3000 host=192.168.1.10 sync=false enable-last-buffer=false

Прием на Linux:

gst-launch udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \
encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQg\
KisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQFAeyA\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)2498431066, clock-base=(guint)297251943, seqnum-base=(guint)34949" ! \
rtph264depay ! queue ! ffdec_h264 ! ffmpegcolorspace ! videoscale ! ximagesink sync=false \
show-preroll-frame=false

Прием на Mac OS X:

gst-launch-1.0 udpsrc port=3000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, \
encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQg\
KisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQFAeyA\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)2498431066, clock-base=(guint)297251943, seqnum-base=(guint)34949" ! \
rtph264depay ! queue ! avdec_h264 ! videoconvert ! videoscale ! osxvideosink sync=false \
show-preroll-frame=false

Вторые шаги

Прием потока через TCP на плейер VLC

На виртурилке

gst-launch v4l2src always-copy=false chain-ipipe=true ! video/x-raw-yuv,format=\(fourcc\)NV12, \
width=640, height=480, framerate=\(fraction\)30/1 ! queue ! dmaienc_mjpeg ! multipartmux ! tcpserversink \
port=3000 sync=false

В VLC открываем url

tcp://адрес_virt2real:3000

Трансляция в HD

  • на стороне устройства:
HOST_ADDR=<Client's IP address>
PORT=3000
gst-launch -e v4l2src always-copy=FALSE input-src=composite chain-ipipe=true ! video/x-raw-yuv,format=\(fourcc\)NV12, width=1280, height=720, framerate=\(fraction\)23/1 ! queue ! dmaiaccel ! dmaienc_h264 encodingpreset=2 ratecontrol=2 intraframeinterval=23 idrinterval=46 targetbitrate=3000000 ! rtph264pay ! udpsink port=$PORT host=$HOST_ADDR sync=false enable-last-buffer=false &
  • на стороне клиента (версия Ubuntu)
PORT=3000
gst-launch -v udpsrc port=3000 ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3I\,aO48sA\=\=", payload=(int)96, ssrc=(guint)1335677188, clock-base=(guint)2580247201, seqnum-base=(guint)5999' ! rtph264depay ! 'video/x-h264' ! ffdec_h264 ! 'video/x-raw-yuv, width=(int)1280, height=(int)720, framerate=(fraction)25/1, format=(fourcc)I420, interlaced=(boolean)false' ! xvimagesink

Остальные примеры цепочек приведены в соответствующих разделах пункта Видео-Аудио.