Streaming to YouTube Live

Peter Maersk-Moller pmaersk at gmail.com
Sun May 5 14:17:39 PDT 2013


Hi Chuck.

Thanks for your suggestion.

I don't see much else of interesting info from other elements than
rtmpsink. Below is an extract of the debug=8  output (perhaps level=5 is
max) .I've included a little bit of the pad capability listing too.

As you can see, rtmpsink gets to send about 92k of data before it quits
with the message RTMP send error 104. It quits roughly 5 times out of 6
with that message and sometimes it just quits (without the RTMP send error).

Suggestions are very welcome .Perhaps rtmpsink just doesn't work with
YouTube Live for yet unknown reasons. However largely same setup works with
UStream. And I have checked that the URL works with a Flash Live Media
Encoder sending to YouTube. Perhaps some yet to me unknown mode is invoked
by the Flash Live Media Encoder, a mode not yet supported by rtmpsink.

Anyway, as written, suggestions are very welcome. It would be rather cool
if we can get GStreamer and rtmpsink to work with YouTube Live.

Best regards
Peter

/GstPipeline:pipeline0/GstFaac:faac0.GstPad:sink: caps = audio/x-raw-int,
endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16,
rate=(int)44100, channels=(int)1,
channel-positions=(GstAudioChannelPosition)<
GST_AUDIO_CHANNEL_POSITION_FRONT_MONO >
/GstPipeline:pipeline0/GstFlvMux:mux.GstPad:audio: caps = audio/mpeg,
mpegversion=(int)2, channels=(int)1, rate=(int)44100,
stream-format=(string)raw, codec_data=(buffer)
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:src: caps = video/x-h264,
width=(int)640, height=(int)360, framerate=(fraction)30/1,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb2,
stream-format=(string)avc, alignment=(string)au, level=(string)4.1,
profile=(string)main
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:sink: caps =
video/x-raw-yuv, level=(string)4.1, profile=(string)main,
format=(fourcc)YV12, framerate=(fraction)30/1, width=(int)640,
height=(int)360, color-matrix=(string)sdtv, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:src: caps =
video/x-h264, width=(int)640, height=(int)360, framerate=(fraction)30/1,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb2,
stream-format=(string)avc, alignment=(string)au, level=(string)4.1,
profile=(string)main
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:sink: caps =
video/x-h264, width=(int)640, height=(int)360, framerate=(fraction)30/1,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb2,
stream-format=(string)avc, alignment=(string)au, level=(string)4.1,
profile=(string)main
/GstPipeline:pipeline0/GstFlvMux:mux.GstPad:video: caps = video/x-h264,
width=(int)640, height=(int)360, framerate=(fraction)30/1,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb2,
stream-format=(string)avc, alignment=(string)au, level=(string)4.1,
profile=(string)main
/GstPipeline:pipeline0/GstFlvMux:mux.GstPad:src: caps = video/x-flv,
streamheader=(buffer)< 464c5601050000000900000000,
120000f50000000000000002000a6f6e4d65746144617461080000000a000c766964656f636f646563696400401c000000000000000577696474680040840000000000000006686569676874004076800000000000000c417370656374526174696f58003ff0000000000000000c417370656374526174696f59003ff000000000000000096672616d657261746500403e000000000000000c617564696f636f6465636964004024000000000000000f6d6574616461746163726561746f720200134753747265616d657220464c56206d75786572000c6372656174696f6e6461746502001753756e204d617920352032303a35383a3539203230313300000900000100,
0900002c000000000000001700000000014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb200000037,
0800000200000000000000af000000000d >
/GstPipeline:pipeline0/GstRTMPSink:rtmpsink0.GstPad:sink: caps =
video/x-flv, streamheader=(buffer)< 464c5601050000000900000000,
120000f50000000000000002000a6f6e4d65746144617461080000000a000c766964656f636f646563696400401c000000000000000577696474680040840000000000000006686569676874004076800000000000000c417370656374526174696f58003ff0000000000000000c417370656374526174696f59003ff000000000000000096672616d657261746500403e000000000000000c617564696f636f6465636964004024000000000000000f6d6574616461746163726561746f720200134753747265616d657220464c56206d75786572000c6372656174696f6e6461746502001753756e204d617920352032303a35383a3539203230313300000900000100,
0900002c000000000000001700000000014d4029ffe10018674d4029eca05017fcb8088000000300bb9aca00078c18cb01000468ebecb200000037,
0800000200000000000000af000000000d >
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.812604837  4391      0x1e590f0 DEBUG               rtmpsink
gstrtmpsink.c:235:gst_rtmp_sink_render:<rtmpsink0> Opened connection to
rtmp://a.rtmp.youtube.com/live2/STREAMNAME_REMOVED
0:00:00.812654112  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:241:gst_rtmp_sink_render:<rtmpsink0> Caching first buffer of
size 13 for concatenation
0:00:00.812694629  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:249:gst_rtmp_sink_render:<rtmpsink0> Joining 2nd buffer of
size 260 to cached buf
0:00:00.812722484  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 273 bytes to
RTMP server
0:00:00.812778812  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 59 bytes to RTMP
server
0:00:00.812813232  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 17 bytes to RTMP
server
0:00:00.812894371  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 166 bytes to
RTMP server
0:00:00.813448928  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 9302 bytes to
RTMP server
0:00:00.815407311  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 132 bytes to
RTMP server
0:00:00.815900534  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 130 bytes to
RTMP server
0:00:00.816342378  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 129 bytes to
RTMP server
0:00:00.816862090  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 136 bytes to
RTMP server
0:00:00.817290072  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5841 bytes to
RTMP server
0:00:00.818967597  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5849 bytes to
RTMP server
0:00:00.820808038  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5858 bytes to
RTMP server
0:00:00.822764003  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 131 bytes to
RTMP server
0:00:00.823313489  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 132 bytes to
RTMP server
0:00:00.823740494  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 129 bytes to
RTMP server
0:00:00.824154593  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 133 bytes to
RTMP server
0:00:00.824576933  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5753 bytes to
RTMP server
0:00:00.852905074  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5846 bytes to
RTMP server
0:00:00.854825476  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5741 bytes to
RTMP server
0:00:00.856572691  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 136 bytes to
RTMP server
0:00:00.857108289  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 136 bytes to
RTMP server
0:00:00.857549728  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 139 bytes to
RTMP server
0:00:00.857983149  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5847 bytes to
RTMP server
0:00:00.859692554  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5768 bytes to
RTMP server
0:00:00.861227906  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 139 bytes to
RTMP server
0:00:00.861721182  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 149 bytes to
RTMP server
0:00:00.862153646  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 146 bytes to
RTMP server
0:00:00.862577417  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 145 bytes to
RTMP server
0:00:00.863008600  4391      0x1e59050 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5799 bytes to
RTMP server
0:00:00.864681394  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5791 bytes to
RTMP server
0:00:00.872594409  4391      0x1e590f0 LOG                 rtmpsink
gstrtmpsink.c:256:gst_rtmp_sink_render:<rtmpsink0> Sending 5753 bytes to
RTMP server
ERROR: WriteN, RTMP send error 104 (140 bytes)





On Wed, Apr 24, 2013 at 3:50 PM, Chuck Crisler <ccrisler at mutualink.net>wrote:

> Turn on logging to get more info. Logging can deluge you, so start slowly
> until you get enough info to narrow down. Start with something like 'export
> GST_DEBUG=*:3', which will give you a lot of messages. Then pick out the
> very few (1-2-3) elements that are interesting and set a higher debugging
> level for them (and disabling logging for everything else). Something like
> 'export GST_DEBUG=element1:4,element2:4'
>
> Then post the logs if the answer isn't obvious.
>
>
>
>
> On Wed, Apr 24, 2013 at 8:15 AM, Peter Maersk-Moller <pmaersk at gmail.com>wrote:
>
>> Hi.
>>
>> A little update on using GStreamer to generate a live stream for YouTube
>> Live. Using the following information, the pipeline gets a little bit
>> further.
>>
>>      .... ! flvmux streamable=true name=mux ! rtmpsink
>> location="$LOCATION"
>>
>> Here LOCATION is now defined as follows
>>
>>     LOCATION="Primary Server URL/Stream Name live=1
>> flashver=FME/3.0\20(compatible;\20FMSc\201.0) "
>>
>> Primary Server URL and Stream Name is copied from the settings from the
>> live event created for the YouTube account.
>>
>> Nevertheless the script now fails with the following message after
>> apparently setting up communication with the YouTube servers.
>>
>>
>>    Pipeline is PREROLLED ...
>>    Setting pipeline to PLAYING ...
>>    New clock: GstSystemClock
>>    ERROR: WriteN, RTMP send error 104 (126 bytes)
>>
>> Anybody know what that is?
>>
>> Best regards
>>
>>
>> On Mon, Apr 22, 2013 at 11:57 PM, Peter Maersk-Moller <pmaersk at gmail.com>wrote:
>>
>>> Hi.
>>>
>>> I was wondering if anybody has been successful streaming to the YouTube
>>> Live streaming servers using GStreamer?
>>>
>>> I get the following error message which I believe indicates that YouTube
>>> doesn't accept my data:
>>>
>>>   Pipeline is PREROLLED ...
>>>   Setting pipeline to PLAYING ...
>>>   New clock: GstSystemClock
>>>   ERROR: RTMP_ReadPacket, failed to read RTMP packet header
>>>   ERROR: from element /GstPipeline:pipeline0/GstRTMPSink:rtmpsink0:
>>> Could not   open resource for writing.
>>>   Additional debug info:
>>>   gstrtmpsink.c(228): gst_rtmp_sink_render (): /GstPipeline:pipeline0
>>> /GstRTMPSink:rtmpsink0:
>>>   Could not connect to RTMP stream "rtmp://
>>> a.rtmp.youtube.com/videolive?..........
>>>
>>> I am using the following script that works great for UStream, but not
>>> for YouTube LIve. Anybody got any good suggestion?
>>>
>>> Best regards
>>> Peter
>>>
>>> ================
>>> #!/bin/bash
>>> if [ $# != 1 ] ; then exit ; fi
>>> AUDIOFORMAT='audio/x-raw-int, endianness=(int)1234,
>>> signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100,
>>> channels=(int)1'
>>> case $1 in
>>>   you|youtube)
>>>         width=1280
>>>         height=720
>>>         framerate='30/1'
>>>         videoencoder="x264enc bitrate=2000 profile=main bframes=2"
>>>         videomode='video/x-h264, width=(int)1280, height=(int)720,
>>> framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1,
>>> profile=(string)main'
>>>         videomode='video/x-h264, profile=main'
>>>         audioencoder="faac bitrate=64000 profile=2"
>>>         location="rtmp://
>>> a.rtmp.youtube.com/videolive?signature=REMOVED_FOR OBVIOUS_REASONS
>>> flashver=FME/3.0\20(compatible;\20FMSc\201.0)"
>>>
>>>         ;;
>>>   ustream)
>>>         width=1024
>>>         height=576
>>>         framerate='25/1'
>>>         videoencoder="x264enc bitrate=800 bframes=0"
>>>         videomode='queue'
>>>         audioencoder="lame mode=3 bitrate=64"
>>>         location="rtmp://
>>> SOMETHING.fme.ustream.tv/ustreamVideo/SOMETHING/MORESOMETHING'
>>> flashver=FME/3.0\20(compatible;\20FMSc\201.0)'"
>>>         ;;
>>>   *)    echo 'Use youtube or ustream'
>>>         exit
>>> esac
>>>
>>> gst-launch -v videotestsrc !\
>>>         'video/x-raw-yuv, framerate='$framerate', width='$width',
>>> height='$height !\
>>>         ffmpegcolorspace                !\
>>>         $videoencoder                   !\
>>>         "$videomode"                    !\
>>>         mux. audiotestsrc               !\
>>>         $AUDIOFORMAT                    !\
>>>         $audioencoder                   !\
>>>         flvmux streamable=true name=mux !\
>>>         rtmpsink location="$location"
>>>
>>> ==================
>>>
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20130505/18f45b86/attachment-0001.html>


More information about the gstreamer-devel mailing list