[FFmpeg-trac] #5011(undetermined:new): ffmpeg native RTMP protocol implementation fails to parse app and playpath from some Wowza URIs

FFmpeg trac at avcodec.org
Tue Nov 17 15:34:06 CET 2015


#5011: ffmpeg native RTMP protocol implementation fails to parse app and playpath
from some Wowza URIs
-------------------------------------+-------------------------------------
             Reporter:  irius        |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  git-
  undetermined                       |  master
             Keywords:  rtmp         |               Blocked By:
  librtmp                            |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 I am trying to publish on a live RTMP publishing point (wowza) on the
 following URI:


 {{{
 rtmp://foo.bar.foo.barserver.net/foo-
 user-4-live01/_definst_/doPublish=abab2de0fe/hello
 (** Please, note that I changed the real server address for security
 reasons.)
 }}}



 The problem is that if I compile ffmpeg WITHOUT support for librtmp (no
 -enable_librtmp flag) it doesn't work. However, when using librtmp it
 works.

 Trying to figure out what was going on I found out the following:
 * Native ffmpeg RTMP and librtmp impementations parse in a different way
 the app and playpath from this URI. In particular, librtmp does it right
 and native implementations doesn't. Here are the details:


 {{{
 Native RTMP:
 app= foo-user-4-live01/_definst_
 fname= doPublish=abab2de0fe/hello

 libRTMP:
 app= foo-user-4-live01/_definst_/doPublish=abab2de0fe
 fname= hello
 }}}


 * Having a quick look at the source code, I wonder if it might be related
 to the "_definst_" thing in rtmpproto.c on the following function ?

 {{{
 static int do_llnw_auth(RTMPContext *rt, const char *user, const char
 *nonce)

 }}}

 Here you have the command line I am using and the output with verbose
 level for both native rtmp and librtmp versions:

 ** NATIVE RTMP **:


 {{{
 ffmpeg -i test.mp4 -f flv -v verbose rtmp://foo.bar.foo.barserver.net/foo-
 user-4-live01/_definst_/doPublish=abab2de0fe/hello
 ffmpeg version 2.7 Copyright (c) 2000-2015 the FFmpeg developers
   built with gcc 4.9.2 (Rev5, Built by MSYS2 project)
   configuration: --disable-gpl --enable-shared --enable-libfdk-aac
 --target-os=mingw32 --disable-iconv --disable-zlib --disable-bzlib
   libavutil      54. 27.100 / 54. 27.100
   libavcodec     56. 41.100 / 56. 41.100
   libavformat    56. 36.100 / 56. 36.100
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 16.101 /  5. 16.101
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  2.100 /  1.  2.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf56.26.101
   Duration: 01:02:54.64, start: 0.360000, bitrate: 4999 kb/s
     Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 /
 0x31637661), yuv420p, 1920x1080 (1920x1088) [SAR 1:1 DAR 16:9], 4998 kb/s,
 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
     Metadata:
       handler_name    : VideoHandler
 rtmp://foo.bar.foo.barserver.net/foo-
 user-4-live01/_definst_/doPublish=abab2de0fe/hello: Input/output error
 }}}



 ** LIBRTMP **:


 {{{
 ffmpeg version N-71066-ga2dd2d7 Copyright (c) 2000-2015 the FFmpeg
 developers
   built with gcc 4.9.2 (GCC)
   configuration: --disable-static --enable-shared --enable-gpl --enable-
 version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-
 fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass
 --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype
 --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug
 --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-
 libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora
 --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-
 libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack
 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs
 --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
   libavutil      54. 20.101 / 54. 20.101
   libavcodec     56. 29.100 / 56. 29.100
   libavformat    56. 26.101 / 56. 26.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 13.101 /  5. 13.101
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf56.26.101
   Duration: 01:02:54.64, start: 0.360000, bitrate: 4999 kb/s
     Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 /
 0x31637661), yuv420p, 1920x1080 (1920x1088) [SAR 1:1 DAR 16:9], 4998 kb/s,
 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
     Metadata:
       handler_name    : VideoHandler
 Parsing...
 Parsed protocol: 0
 Parsed host    : foo.bar.foo.barserver.net
 Parsed app     : foo-user-4-live01/_definst_/doPublish=abab2de0fe
 RTMP_Connect1, ... connected, handshaking
 HandShake: Type Answer   : 03
 HandShake: Server Uptime : 96850052
 HandShake: FMS Version   : 3.0.1.1
 HandShake: Handshaking finished....
 RTMP_Connect1, handshaked
 Invoking connect
 HandleServerBW: server BW = 2500000
 HandleClientBW: client BW = 2500000 2
 HandleCtrl, received ctrl. type: 0, len: 6
 HandleCtrl, Stream Begin 0
 HandleChangeChunkSize, received: chunk size change to 512
 RTMP_ClientPacket, received: invoke 261 bytes
 (object begin)
 Property: <Name:           no-name., STRING:    _result>
 Property: <Name:           no-name., NUMBER:    1.00>
 Property: <Name:           no-name., OBJECT>
 (object begin)
 Property: <Name:             fmsVer, STRING:    FMS/3,5,7,7009>
 Property: <Name:       capabilities, NUMBER:    31.00>
 Property: <Name:               mode, NUMBER:    1.00>
 (object end)
 Property: <Name:           no-name., OBJECT>
 (object begin)
 Property: <Name:              level, STRING:    status>
 Property: <Name:               code, STRING:
 NetConnection.Connect.Success>
 Property: <Name:        description, STRING:    Connection succeeded.>
 Property: <Name:               data, ECMA_ARRAY>
 (object begin)
 Property: <Name:            version, STRING:    3,5,7,7009>
 (object end)
 Property: <Name:           clientid, NUMBER:    1018124079.00>
 Property: <Name:     objectEncoding, NUMBER:    0.00>
 (object end)
 (object end)
 HandleInvoke, server invoking <_result>
 HandleInvoke, received result for method call <connect>
 Invoking releaseStream
 Invoking FCPublish
 Invoking createStream
 RTMP_ClientPacket, received: invoke 141 bytes
 (object begin)
 Property: <Name:           no-name., STRING:    onFCPublish>
 Property: <Name:           no-name., NUMBER:    0.00>
 Property: NULL
 Property: <Name:           no-name., OBJECT>
 (object begin)
 Property: <Name:              level, STRING:    status>
 Property: <Name:               code, STRING:    NetStream.Publish.Start>
 Property: <Name:        description, STRING:    FCPublish to stream
 barcelona.>
 Property: <Name:           clientid, NUMBER:    1018124079.00>
 (object end)
 (object end)
 HandleInvoke, server invoking <onFCPublish>
 RTMP_ClientPacket, received: invoke 29 bytes
 (object begin)
 Property: <Name:           no-name., STRING:    _result>
 Property: <Name:           no-name., NUMBER:    4.00>
 Property: NULL
 Property: <Name:           no-name., NUMBER:    1.00>
 (object end)
 HandleInvoke, server invoking <_result>
 HandleInvoke, received result for method call <createStream>
 Invoking publish
 HandleCtrl, received ctrl. type: 0, len: 6
 HandleCtrl, Stream Begin 1
 RTMP_ClientPacket, received: invoke 129 bytes
 (object begin)
 Property: <Name:           no-name., STRING:    onStatus>
 Property: <Name:           no-name., NUMBER:    0.00>
 Property: NULL
 Property: <Name:           no-name., OBJECT>
 (object begin)
 Property: <Name:              level, STRING:    status>
 Property: <Name:               code, STRING:    NetStream.Publish.Start>
 Property: <Name:        description, STRING:    Publishing barcelona.>
 Property: <Name:           clientid, NUMBER:    1018124079.00>
 (object end)
 (object end)
 HandleInvoke, server invoking <onStatus>
 HandleInvoke, onStatus: NetStream.Publish.Start
 [graph 0 input from stream 0:0 @ 0000000002341220] w:1920 h:1080
 pixfmt:yuv420p tb:1/12800 fr:25/1 sar:1/1 sws_param:flags=2
 Output #0, flv, to 'rtmp://foo.bar.foo.barserver.net/foo-
 user-4-live01/_definst_/doPublish=abab2de0fe/hello':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf56.26.101
     Stream #0:0(und): Video: flv1 (flv), 1 reference frame ([2][0][0][0] /
 0x0002), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps,
 1k tbn, 25 tbc (default)
     Metadata:
       handler_name    : VideoHandler
       encoder         : Lavc56.29.100 flv
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv))
 Press [q] to stop, [?] for help

 (....... I cut it here but it basically works)
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/5011>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list