Why was duplicate <span style="font-family:courier new,monospace" class="k">if</span><span style="font-family:courier new,monospace"> </span><span style="font-family:courier new,monospace" class="p">(</span><span style="font-family:courier new,monospace" class="n">r</span><span style="font-family:courier new,monospace" class="o">-></span><span style="font-family:courier new,monospace" class="n">Link</span><span style="font-family:courier new,monospace" class="p">.</span><span style="font-family:courier new,monospace" class="n">extras</span><span style="font-family:courier new,monospace" class="p">.</span><span style="font-family:courier new,monospace" class="n">o_num</span><span class="p"><span style="font-family:courier new,monospace">){...}</span> code added?</span><br>
<br>Plus, checking if an application name contains 'live' is <i>not</i> an okay way to check if a stream is live.<br><br><div class="gmail_quote">On Fri, Jun 1, 2012 at 6:41 PM, Steven Penny <span dir="ltr"><<a href="mailto:svnpenn@gmail.com" target="_blank">svnpenn@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Currently rtmpsrv does not add the "--live" parameter even when reading a live<br>
stream. This ultimately causes rtmpdump to fail. Current workarounds involve<br>
adding "--live" to the printed command and re-running rtmpdump. I pulled this<br>
code from KSV repo<br>
<br>
<a href="http://github.com/K-S-V/Scripts/downloads" target="_blank">http://github.com/K-S-V/Scripts/downloads</a><br>
<br>
Change has been tested to work with<br>
<br>
<a href="http://www.ar.aljazeerasport.tv" target="_blank">http://www.ar.aljazeerasport.tv</a><br>
<br>
but any live stream should also be affected.<br>
---<br>
 rtmpsrv.c |   42 ++++++++++++++++++++++++++++++++++++++++++<br>
 1 files changed, 42 insertions(+), 0 deletions(-)<br>
<br>
diff --git a/rtmpsrv.c b/rtmpsrv.c<br>
index 9aa62f3..13d3e94 100644<br>
--- a/rtmpsrv.c<br>
+++ b/rtmpsrv.c<br>
@@ -96,6 +96,7 @@ STREAMING_SERVER *rtmpServer = 0;     // server structure pointer<br>
 STREAMING_SERVER *startStreaming(const char *address, int port);<br>
 void stopStreaming(STREAMING_SERVER * server);<br>
 void AVreplace(AVal *src, const AVal *orig, const AVal *repl);<br>
+AVal AVcopy(AVal src);<br>
<br>
 static const AVal av_dquote = AVC("\"");<br>
 static const AVal av_escdquote = AVC("\\\"");<br>
@@ -599,6 +600,17 @@ ServeInvoke(STREAMING_SERVER *server, RTMP * r, RTMPPacket *packet, unsigned int<br>
       if (obj.o_num > 5)<br>
        r->Link.length = AMFProp_GetNumber(AMF_GetProp(&obj, NULL, 5));<br>
       */<br>
+      double StartFlag = 0;<br>
+      AMFObjectProperty *Start = AMF_GetProp(&obj, NULL, 4);<br>
+      if (!(Start->p_type == AMF_INVALID))<br>
+        StartFlag = AMFProp_GetNumber(Start);<br>
+      r->Link.app = AVcopy(r->Link.app);<br>
+      if (StartFlag == -1000 || (r->Link.app.av_val && strstr(r->Link.app.av_val, "live")))<br>
+        {<br>
+          StartFlag = -1000;<br>
+          server->arglen += 7;<br>
+          server->argc += 1;<br>
+        }<br>
       if (r->Link.tcUrl.av_len)<br>
        {<br>
          len = server->arglen + r->Link.playpath.av_len + 4 +<br>
@@ -666,6 +678,17 @@ ServeInvoke(STREAMING_SERVER *server, RTMP * r, RTMPPacket *packet, unsigned int<br>
            ptr = dumpAMF(&r->Link.extras, ptr, argv, &argc);<br>
            AMF_Reset(&r->Link.extras);<br>
          }<br>
+          if (StartFlag == -1000)<br>
+            {<br>
+              argv[argc].av_val = ptr + 1;<br>
+              argv[argc++].av_len = 6;<br>
+              ptr += sprintf(ptr, " --live");<br>
+            }<br>
+          if (r->Link.extras.o_num)<br>
+            {<br>
+              ptr = dumpAMF(&r->Link.extras, ptr, argv, &argc);<br>
+              AMF_Reset(&r->Link.extras);<br>
+            }<br>
          argv[argc].av_val = ptr + 1;<br>
          argv[argc++].av_len = 2;<br>
          argv[argc].av_val = ptr + 5;<br>
@@ -1178,3 +1201,22 @@ AVreplace(AVal *src, const AVal *orig, const AVal *repl)<br>
   src->av_val = dest;<br>
   src->av_len = dptr - dest;<br>
 }<br>
+<br>
+AVal<br>
+AVcopy(AVal src)<br>
+{<br>
+  AVal dst;<br>
+  if (src.av_len)<br>
+    {<br>
+      dst.av_val = malloc(src.av_len + 1);<br>
+      memcpy(dst.av_val, src.av_val, src.av_len);<br>
+      dst.av_val[src.av_len] = '\0';<br>
+      dst.av_len = src.av_len;<br>
+    }<br>
+  else<br>
+    {<br>
+      dst.av_val = NULL;<br>
+      dst.av_len = 0;<br>
+    }<br>
+  return dst;<br>
+}<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.9<br>
<br>
_______________________________________________<br>
rtmpdump mailing list<br>
<a href="mailto:rtmpdump@mplayerhq.hu">rtmpdump@mplayerhq.hu</a><br>
<a href="https://lists.mplayerhq.hu/mailman/listinfo/rtmpdump" target="_blank">https://lists.mplayerhq.hu/mailman/listinfo/rtmpdump</a><br>
</font></span></blockquote></div><br>