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