Audio/video stream recording forums (http://stream-recorder.com/forum/index.php)
-   rtmpdump (http://stream-recorder.com/forum/forumdisplay.php?f=54)
-   -  

librtmp url parsing

(http://stream-recorder.com/forum/showthread.php?t=12891)

pythoneer 06-23-2012 03:11 AM

librtmp url parsing


 
Hi, i'm totally new to rtmpdump/librtmp and rtmp also. And it seams that this is my first post so i want to greet everybody :)

I'm trying to build a program for dumping rtmp streamed videos.

The url for such a stream is something like this:
Code:

rtmp://cp125301.edgefcs.net/ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4
if i am trying to dump this with rtmpdump all seams to be fine
Code:

./rtmpdump.linux -r rtmp://cp125301.edgefcs.net/ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4 -V -o zdf2.mp4
and in verbose mode its showing me the following extra infos:
Code:

DEBUG: Hostname : cp125301.edgefcs.net
DEBUG: Port    : 1935
DEBUG: Playpath : mp4:zdf/12/06/120621_1808_hko_vh.mp4
DEBUG: tcUrl    : rtmp://cp125301.edgefcs.net:1935/ondemand
DEBUG: app      : ondemand


but if i'm using librtmp its seams that the parser is doing some thing different here:

Code:

#include "rtmp.h"

#include <stdio.h>

int main()
{
  int retVal = 0;

  RTMP* r = RTMP_Alloc();

  retVal = RTMP_SetupURL(r, "rtmp://cp125301.edgefcs.net/ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4");
  printf("\n\nhost: %s  \nplaypath: %s \ntcUrl: %s \napp: %s\n\n", r->Link.hostname.av_val, r->Link.playpath.av_val,r->Link.tcUrl.av_val, r->Link.app.av_val);

  retVal = RTMP_Connect(r, NULL);
  printf("connect r: %i\n", retVal);

  return 0;
}

output is :
Code:

host: cp125301.edgefcs.net/ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4 
playpath: mp4:zdf/12/06/120621_1808_hko_vh.mp4
tcUrl: rtmp://cp125301.edgefcs.net/ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4
app: ondemand/mp4:zdf/12/06/120621_1808_hko_vh.mp4

ERROR: WriteN, RTMP send error 104 (1 bytes)
connect r: 0
ERROR: RTMP_Connect1, handshake failed.

which differs from the values from rtmpdump and might be wrong?

i was trying to correct this by manually set the values in the RTMP record by hand as they appear in rtmpdump.. but maybe i missed something

Code:

  //manual set hostname
  AVal hostname;
  hostname.av_val = "cp125301.edgefcs.net";
  hostname.av_len = sizeof("cp125301.edgefcs.net");
  r->Link.hostname = hostname;

  //manual set playpath
  AVal playpath;
  playpath.av_val = "mp4:zdf/12/06/120621_1808_hko_vh.mp4";
  playpath.av_len = sizeof("mp4:zdf/12/06/120621_1808_hko_vh.mp4");
  r->Link.playpath = playpath;
//  r->Link.playpath0 = playpath;
//
  //manual tcUrl
  AVal tcUrl;
  tcUrl.av_val = "rtmp://cp125301.edgefcs.net:1935/ondemand";
  tcUrl.av_len = sizeof("rtmp://cp125301.edgefcs.net:1935/ondemand");
  r->Link.tcUrl = tcUrl;

  //manuel app
  AVal app;
  app.av_val = "ondemand";
  app.av_len = sizeof("ondemand");
  r->Link.app = app;

after all this seams to be not working and i get an error messages:
Code:

ERROR: WriteN, RTMP send error 104 (1 bytes)
ERROR: RTMP_Connect1, handshake failed.

someone any suggestions?

regards pythonner

KSV 06-23-2012 11:14 AM

Re: librtmp url parsing


 
have you even read the librtmp help. you need to pass the url in proper format.

Code:

"rtmp://cp125301.edgefcs.net/ondemand app=ondemand playpath=mp4:zdf/12/06/120621_1808_hko_vh.mp4"
also you are missing RTMP_Init(). you also need to initialize Winsock.

pythoneer 06-23-2012 12:28 PM

Re: librtmp url parsing


 
Thx,

Yes i read it, but im not fully into this weird rtmp uri thing. i missed the RTMP_Init() when i pasted my messy code, but its existing.

regarding winsocks - im developing under linux and also aiming for android. where is the point the sockets come in to play?

after modifying the url as u suggested the program stucks at RTMP_SetupURL with debugger :
Code:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Single stepping until exit from function RTMP_SetupURL,
which has no line number information.
Quit


KSV 06-23-2012 01:15 PM

Re: librtmp url parsing


 
Quote:

Originally Posted by pythoneer (Post 48093)
regarding winsocks - im developing under linux and also aiming for android. where is the point the sockets come in to play?

Winsock initialization is only required for windows. are you sure you are using latest version of librtmp because it seems that server is dropping the connection after handshake failure which shouldn't be the case if you are using latest librtmp. Error 104 occurs when connection is closed by remote end.

pythoneer 06-23-2012 02:27 PM

Re: librtmp url parsing


 
Quote:

Originally Posted by KSV (Post 48099)
Winsock initialization is only required for windows.

ok thx
Quote:

Originally Posted by KSV (Post 48099)
are you sure you are using latest version of librtmp

yes i cloned it from here git://git.ffmpeg.org/rtmpdump

but after i used the correct version of the url from you i get a segmentation fault
Code:

#0  0x00007f55fa627071 in RTMP_SetupURL () from /usr/lib/x86_64-linux-gnu/librtmp.so.0
am i messed something up with the 32/64 bit stuff?


All times are GMT -6. The time now is 05:12 PM.