RTMP сервер

Материал из virt2real wiki
Перейти к: навигация, поиск

Содержание

Общий принцип

Примеры скриптов трансляции

Для Flash плееров необходимо указывать idrinterval и intraframeinterval, иначе будет проблема с ключевыми кадрами.


Трансляция на встроенный nginx-rtmp сервер

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 copyOutput=false encodingpreset=2 ratecontrol=1 targetbitrate=600000 intraframeinterval=50 idrinterval=100 rcalgo=0 ! \
flvmux streamable=true ! \
rtmpsink location="rtmp://localhost/live/ playpath=v2r live=1" sync=false


Трансляция сервер ЯТВ

Аналогично первому примеру, но требуется добавить параметр "app=", значение которого для своего канала можно узнать в панели управления на сайте yatv.ru, подробности см. тут.

Например, для моего канала app=live/gol_tv/p/1f5351030932991

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 copyOutput=false encodingpreset=2 ratecontrol=1 targetbitrate=600000 intraframeinterval=50 idrinterval=100 rcalgo=0 ! \
flvmux streamable=false ! \
rtmpsink location="rtmp://m1.d0.yatv.ru app=live/gol_tv/p/1f5351030932991 playpath=v2r live=1" sync=false

Трансляция сервер Ustream

gst-launch v4l2src always-copy=false chain-ipipe=true !\
capsfilter caps=video/x-raw-yuv,format='(fourcc)'NV12,width=1280,height=720,framerate='(fraction)'30/1 !\
dmaiaccel !\
dmaienc_h264 ddrbuf=false copyOutput=false encodingpreset=2 ratecontrol=1 targetbitrate=1000000 intraframeinterval=30 idrinterval=60 t8x8intra=true t8x8inter=true airrate=30 !\
flvmux streamable=true !\
rtmpsink location="<RTMP URL>/<Ключ потока>" sync=false enable-last-buffer=false

где <RTMP URL> и <Ключ потока> берутся с сайта http://www.ustream.tv/manage-show/remote/9906504

<RTMP URL> выглядит примерно так: rtmp://1.9906504.fme.ustream.tv/ustreamVideo/9906504

<Ключ потока> выглядит примерно так: DKab11bfb0qSHLceJhf62gePBkEgTFuw


Трансляция без звука на Twitch.tv

gst-launch  v4l2src always-copy=false chain-ipipe=true ! \
capsfilter caps=video/x-raw-yuv,format='(fourcc)'NV12,width=720,height=576,pitch=736,framerate='(fraction)'25/1 ! \
dmaiaccel ! \
dmaienc_h264 encodingpreset=1 ratecontrol=1 targetbitrate=600000 maxbitrate=800000 intraframeinterval=50 idrinterval=500 bytestream=false headers=false aud=false level=51 t8x8intra=true t8x8inter=true airrate=30 ! \
dmaiperf print-arm-load=true ! \
flvmux streamable=false ! \
rtmpsink location="rtmp://live-lhr.twitch.tv/app/<ключ_потока>" sync=false enable-last-buffer=false


Трансляция сервер Youtube

Настройка трансляции: https://support.google.com/youtube/answer/2853700?hl=ru&ref_topic=2853713

На вашей странице создания живой трансляции на YouTube будут указаны ссылка и имя трансляции. Их необходимо подставить в соответствующее место в коде

gst-launch v4l2src queue-size=6 always-copy=false chain-ipipe=true  ! \
'video/x-raw-yuv,format=(fourcc)NV12, width=640, height=480' ! videorate ! 'video/x-raw-yuv,framerate=(fraction)30/1' ! \
dmaiaccel ! \
dmaienc_h264 ddrbuf=true copyOutput=true encodingpreset=2 ratecontrol=1 profile=66 level=30 entropy=0 t8x8intra=0 aud=false headers=false bytestream=false seqscaling=0 targetbitrate=600000 intraframeinterval=50 idrinterval=100 ! queue ! \
flvmux streamable=false name=mux alsasrc latency-time=10000 slave-method=0 ! \
audio/x-raw-int, channels=1, rate=32000, endianness=1234,signed=true,width=16,depth=16 ! queue ! \
dmaienc_aac bitrate=32000 tns=false copyOutput=true outputBufferSize=10000 fullbandwidth=true ! mux. mux. ! queue !  \
rtmpsink location="УКАЗАННЫЙ_В_НАСТРОЙКАХ_АДРЕС/УКАЗАННОЕ_В_НАСТРОЙКАХ_ИМЯ_ТРАНСЛЯЦИИ live=1" sync=true

В моем случае для одной из трансляций последняя стрчока выглядела так:

rtmpsink location="rtmp://a.rtmp.youtube.com/live2/realizator100-0431.hdxe-q155-cc71-azke live=1" sync=true


Обращаю внимание, что для каждой новой создаваемой вами трансляции гугл генерирует новое имя. Т.е. начиная новую трансляцию на YouTube не забудьте указать новое имя в этой строчке.


Трансляция со звуком

ЯТВ

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 ! queue ! \
dmaienc_h264 ddrbuf=true copyOutput=false encodingpreset=2 profile=66 \
level=30 entropy=0 t8x8intra=0 aud=false headers=false bytestream=false \
seqscaling=0  ratecontrol=1  targetbitrate=1000000 intraframeinterval=50 \
idrinterval=100 airrate=0 ! \
flvmux streamable=false name=mux alsasrc latency-time=200000 slave-method=0 ! queue ! \
audio/x-raw-int, channels=1, rate=16000, endianness=1234,signed=true,width=16,depth=16 ! \
dmaienc_aac bitrate=16000 tns=false copyOutput=false outputBufferSize=3000000 ! mux. mux. ! \
rtmpsink location="rtmp://m1.d0.yatv.ru app=live/gol_tv/p/1341de6789142311 playpath=cam1 live=1" \
blocksize=10000 enable-last-buffer=true preroll-queue-len=10 sync=false max-lateness=1000000


Twitch.tv

gst-launch v4l2src always-copy=false chain-ipipe=true ! \
capsfilter caps=video/x-raw-yuv,format='(fourcc)'NV12,width=720,height=576,pitch=736,framerate='(fraction)'25 ! \
queue ! \
dmaiaccel ! \
dmaienc_h264 encodingpreset=1 ratecontrol=1 targetbitrate=600000 maxbitrate=800000 intraframeinterval=50 idrinterval=500 bytestream=false headers=false aud=false level=51 t8x8intra=true t8x8inter=true airrate=30 ! \
dmaiperf print-arm-load=true ! \
flvmux streamable=false name=mux \
alsasrc latency-time=100000 slave-method=0 do-timestamp=false provide-clock=false ! \
queue ! \
capsfilter caps=audio/x-raw-int,channels=1,rate=16000,endianness=1234,signed=true,width=16,depth=16 ! \
queue !\
dmaienc_aac bitrate=48000 maxbitrate=48000 tns=false copyOutput=false outputBufferSize=300000 fullbandwidth=true fixTimestamp=true ! \
queue ! \
mux. \
mux. ! \
rtmpsink location="rtmp://live-lhr.twitch.tv/app/<ключ_потока>" sync=false enable-last-buffer=false


Ссылки по теме

http://habrahabr.ru/post/162237/




Дополнительные параметры цепочек

Можно посмотреть, указав имя цепочки в параметре утилиты gst-inspect

Например, для dmaienc_h264

gst-inspect dmaienc_h264