User:StasFomin/GstreamerTranslation

From Wiki4Intranet
< User:StasFomin
Revision as of 01:21, 24 April 2015 by StasFomin (Talk | contribs) (Sample 11)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
gst-launch hdv1394src ! queue ! decodebin name=d ! queue ! xvimagesink d. ! queue ! alsasink

— Работает, показывает.

Надо задемуксить, и собрать FLV-поток в RTMP.



Путаюсь в mux-demux синтаксисе.



Sample 01

Без звука уже получается... осталось засунуть звук

gst-launch-1.0 -v \
        hdv1394src \
        ! queue \
        ! tsdemux name=demux\
            ! queue \
            ! mpeg2dec \
            ! queue \
            ! x264enc bitrate=700 tune=zerolatency pass=17  \
            ! queue \
      ! flvmux streamable=1 name=mux \
      ! fakesinc

Sample 02

Вот тут я считал, что demux. в предпоследней строчке даст аудиопоток, который придет в flvmux. Но по графу, видно, что не пришел, т.е. «demux.» ссылка почему-то не работает..

gst-launch-1.0 -v \
        hdv1394src \
        ! queue \
        ! tsdemux name=demux\
            ! queue \
            ! mpeg2dec \
            ! queue \
            ! x264enc bitrate=700 tune=zerolatency pass=17  \
            ! queue \
      ! flvmux streamable=1 name=mux \
            ! filesink location="output.flv"  \
       demux. ! audioresample ! voaacenc bitrate=64 \
      ! mux.


Stas-gst-sample-02.svg

Sample 03

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

gst-launch-1.0 -v \
        filesrc location=mydump.ts \
        ! queue \
        ! tsdemux name=demux\
            ! queue \
            ! mpeg2dec \
            ! queue \
            ! x264enc bitrate=700 tune=zerolatency pass=17  \
            ! queue \
      ! flvmux streamable=1 name=mux \
            ! fakesink \
       demux.audio_0814 ! audioresample ! voaacenc bitrate=64 \
      ! mux.

Stas-gst-sample-03.svg

Sample 04

Помощь от gmelnikov

gst-launch hdv1394src \
! tsdemux name=dem \
! queue \
! ac3parse \
! a52dec \
! audioconvert \
! audioresample \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17  \
! mux. mux. ! filesink location="out.flv"

Stas-gst-sample-04.svg

Вариант, который можно тестировать на тестовом входном файле https://cloud.mail.ru/public/2KtUehQBJLx2/mydump.ts

gst-launch filesrc location="mydump.ts" \
! tsdemux name=dem \
! queue \
! ac3parse \
! a52dec \
! audioconvert \
! audioresample \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17  \
! mux. mux. ! filesink location="out.flv"

Sample 05

Проверенный работающий пример от gmelnikov.

Пытался запустить на своем тестовом https://cloud.mail.ru/public/2KtUehQBJLx2/mydump.ts

Версия 0.10 зафейлилась

gst-launch-0.10 \
filesrc location=mydump.ts \
! tsdemux name=dem \
! queue \
! ac3parse \
! a52dec \
! audioconvert \
! audioresample \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17 ! \
mux. mux.! \
filesink location=test.flv

Получил ошибки

No accelerated IMDCT transform found
Подготовка конвейера (PREROLL)...
0:00:00.039853666 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:843:mpegts_base_apply_pmt: Got pmt without pat first. Returning
0:00:00.039918622 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x810
0:00:00.040253360 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x814
0:00:00.040726205 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x810
0:00:00.040803007 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x814
0:00:00.041350560 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x814
0:00:00.041469962 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x810
0:00:00.041866178 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:961:mpegts_base_handle_psi:<dem> bad crc in psi pid 0x814
0:00:00.043802936 14497      0x1cb20f0 ERROR             mpegtsbase mpegtsbase.c:895:mpegts_base_apply_pmt: Attempted to apply a PMT on a program that wasn't created
0:00:00.049958082 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:1409:mpegts_base_loop:<dem> error: Внутренняя ошибка потока данных.
0:00:00.050013169 14497      0x1cb20f0 WARN              mpegtsbase mpegtsbase.c:1409:mpegts_base_loop:<dem> error: stream stopped, reason error
ОШИБКА: из элемента /GstPipeline:pipeline0/GstTSDemux:dem: Внутренняя ошибка потока данных.
Дополнительная отладочная информация:
mpegtsbase.c(1409): mpegts_base_loop (): /GstPipeline:pipeline0/GstTSDemux:dem:
stream stopped, reason error
ОШИБКА: конвейер не хочет подготавливаться (PREROLL).
Установка конвейера в состояние NULL...
Освобождение конвейера...

Версия 1.0 не упала,

gst-launch-1.0 \
filesrc location=mydump.ts \
! tsdemux name=dem \
! queue \
! ac3parse \
! a52dec \
! audioconvert \
! audioresample \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17 ! \
mux. mux.! \
filesink location=test.flv

но тестовый файл пустой.

Та же фигня с графом — звук из TS не идет в FLV

Stas-gst-sample-05.svg

Sample 06

gst-launch filesrc location="mydump.ts" \
! tsdemux name=dem \
! queue \
! decodebin \
! audioconvert \
! audioresample \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17  \
! mux. mux. ! filesink location="out.flv"

Воткнул сильнодействующий decodebin — появился ненулевой выходной файл.


Sample 07

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

gst-launch filesrc location="mydump.ts" \
  ! tee name="srctee" \
    ! queue \
    ! filesink location="out1.ts" \
  srctee. \
    ! queue \
    ! filesink location="out2.ts"

Sample 08

А вот сплиттинг с вышедобавленной перепаковкой какогото хрена не работает.

gst-launch filesrc location="mydump.ts" \
  ! tee name="srctee" \
    ! queue \
    ! filesink location="out.ts" \
  srctee. \
    ! queue \
    ! tsdemux name=dem \
    ! queue \
    ! decodebin \
    ! audioconvert \
    ! audioresample \
    ! flvmux streamable=1 name=mux \
  dem. \
    ! queue \
    ! mpegvideoparse \
    ! mpeg2dec \
    ! x264enc bitrate=768 tune=zerolatency pass=17  \
    ! mux. \
  mux. ! filesink location="out.flv"


Sample 09

И даже не работает тупейший сплиттинг — я точно не понимаю чего-то важного.

gst-launch filesrc location="mydump.ts" \
  ! tee name="srctee" \
    ! queue \
    ! filesink location="out.ts" \
  srctee. \
    ! queue \
    ! decodebin \
    ! autovideosink

Граф выглядит графом здорового человека

Stas-gst-sample-09.svg

Sample 10

gst-launch-1.0 filesrc location="mydump.ts" \
! tee name=srctee \
! queue \
! filesink location=out.ts async=0 \
srctee. \
! queue \
! tsdemux name=dem \
! queue \
! mad \
! audioconvert \
! audioresample \
! voaacenc bitrate=64 ! audio/mpeg,rate=22050,channels=2 \
! flvmux streamable=1 name=mux \
dem. \
! queue \
! mpegvideoparse \
! mpeg2dec \
! x264enc bitrate=768 tune=zerolatency pass=17 \
! mux. mux.! \
filesink location=test.flv async=0

Ругань

etting pipeline to PAUSED ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
0:00:00.035578290 11049       0xff7540 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<filesrc0> error: Internal data flow error.
0:00:00.035624372 11049       0xff7540 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<filesrc0> error: streaming task paused, reason not-negotiated (-4)
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.001247587
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...


Sample 11

gst-launch-1.0   videotestsrc !  queue ! x264enc bitrate=700 tune=zerolatency pass=17 !  avimux name=mux   audiotestsrc ! audioconvert ! wavenc ! mux. mux. !  filesink testavi.avi 

Misc

gst-inspect hdv1394src

Factory Details:
  Rank                     none (0)
  Long-name                Firewire (1394) HDV video source
  Klass                    Source/Video
  Description              Source for MPEG-TS video data from firewire port
  Author                   Edward Hervey <bilboed@bilboed.com>

Plugin Details:
  Name                     1394
  Description              Source for video data via IEEE1394 interface
  Filename                 /usr/lib64/gstreamer-1.0/libgst1394.so
  Version                  1.2.4
  License                  LGPL
  Source module            gst-plugins-good
  Source release date      2014-04-18
  Binary package           ROSA Desktop Fresh R4 gstreamer1.0-plugins-good package
  Origin URL               http://www.rosalab.ru/

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseSrc
                         +----GstPushSrc
                               +----GstHDV1394Src

Implemented Interfaces:
  GstURIHandler

Pad Templates:
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/mpegts
           systemstream: true
             packetsize: 188


Element Flags:
  no flags set

Element Implementation:
  Has change_state() function: gst_base_src_change_state

Element has no clocking capabilities.
Element has no indexing capabilities.

URI handling capabilities:
  Element can act as source.
  Supported URI protocols:
    hdv

Pads:
  SRC: 'src'
    Implementation:
      Has getrangefunc(): gst_base_src_getrange
      Has custom eventfunc(): gst_base_src_event
      Has custom queryfunc(): gst_base_src_query
    Pad Template: 'src'

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "hdv1394src0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  blocksize           : Size in bytes to read per buffer (-1 = default)
                        flags: readable, writable
                        Unsigned Integer. Range: 0 - 4294967295 Default: 4096
  num-buffers         : Number of buffers to output before sending EOS (-1 = unlimited)
                        flags: readable, writable
                        Integer. Range: -1 - 2147483647 Default: -1
  typefind            : Run typefind before negotiating
                        flags: readable, writable
                        Boolean. Default: false
  do-timestamp        : Apply current stream time to buffers
                        flags: readable, writable
                        Boolean. Default: false
  port                : Port number (-1 automatic)
                        flags: readable, writable
                        Integer. Range: -1 - 16 Default: -1
  channel             : Channel number for listening
                        flags: readable, writable
                        Integer. Range: 0 - 64 Default: 63
  use-avc             : Use AV/C VTR control
                        flags: readable, writable
                        Boolean. Default: true
  guid                : select one of multiple DV devices by its GUID. use a hexadecimal like 0xhhhhhhhhhhhhhhhh. (0 = no guid)
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
  device-name         : user-friendly name of the device
                        flags: readable
                        String. Default: "Default"