本文整理汇总了C++中RTMP_LogPrintf函数 的典型用法代码示例。如果您正苦于以下问题:C++ RTMP_LogPrintf函数的具体用法?C++ RTMP_LogPrintf怎么用?C++ RTMP_LogPrintf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RTMP_LogPrintf函数 的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: sigIntHandler
void
sigIntHandler(int sig)
{
RTMP_ctrlC = TRUE;
RTMP_LogPrintf("Caught signal: %d, cleaning up, just a second...\n", sig);
if (rtmpServer)
stopStreaming(rtmpServer);
signal(SIGINT, SIG_DFL);
}
开发者ID:firemyst, 项目名称:rtmpdump, 代码行数:9, 代码来源:rtmpsrv.c
示例2: rtmp_rvod_stop_notify
static void rtmp_rvod_stop_notify(void* ctx)
{
if (!ctx)
{
return;
}
RTMP_LogPrintf("rtmp stopeed\n");
t_rtmp_vod_ctx *c = ctx;
c->stopeed = 1;
}
开发者ID:taolinbg, 项目名称:video_sdk, 代码行数:11, 代码来源:ont_video_rvod.c
示例3: sigIntHandler
void sigIntHandler(int sig)
{
RTMP_ctrlC = TRUE;
RTMP_LogPrintf("Caught signal: %d, cleaning up, just a second...\n", sig);
// ignore all these signals now and let the connection close
signal(SIGINT, SIG_IGN);
signal(SIGTERM, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
}
开发者ID:kulv2012, 项目名称:rtmpdump-librtmp, 代码行数:11, 代码来源:simplertmpdump.c
示例4: controlServerThread
TFTYPE
controlServerThread(void *unused)
{
char ich;
while (1)
{
ich = getchar();
switch (ich)
{
case 'q':
RTMP_LogPrintf("Exiting\n");
stopStreaming(rtmpServer);
exit(0);
break;
default:
RTMP_LogPrintf("Unknown command \'%c\', ignoring\n", ich);
}
}
TFRET();
}
开发者ID:firemyst, 项目名称:rtmpdump, 代码行数:20, 代码来源:rtmpsrv.c
示例5: sigIntHandler
void
sigIntHandler(int sig)
{
//xjzhang, 屏蔽这些signal,设置RTMP_ctrlC为TRUE从而进入正常退出流程;
RTMP_ctrlC = TRUE;
RTMP_LogPrintf("Caught signal: %d, cleaning up, just a second...\n", sig);
// ignore all these signals now and let the connection close
signal(SIGINT, SIG_IGN);
signal(SIGTERM, SIG_IGN);
#ifndef WIN32
signal(SIGHUP, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
#endif
}
开发者ID:minico, 项目名称:rtmpdump, 代码行数:15, 代码来源:rtmpdump.cpp
示例6: rtmp_rvod_pause_notify
static void rtmp_rvod_pause_notify(void* ctx, int paused, double ts)
{
RTMP_LogPrintf("rtmp pause %d ts %lf\n", paused, ts);
if (!ctx)
{
return;
}
t_rtmp_vod_ctx *c = ctx;
c->paused = paused;
if (paused)
{
c->start_timestamp = ts;
}
else
{
c->start_timestamp = ts;
c->epoch = RTMP_GetTime();
}
}
开发者ID:taolinbg, 项目名称:video_sdk, 代码行数:20, 代码来源:ont_video_rvod.c
示例7: main
int
main(int argc, char **argv)
{
int nStatus = RD_SUCCESS;
// http streaming server
char DEFAULT_HTTP_STREAMING_DEVICE[] = "0.0.0.0"; // 0.0.0.0 is any device
char *rtmpStreamingDevice = DEFAULT_HTTP_STREAMING_DEVICE; // streaming device, default 0.0.0.0
int nRtmpStreamingPort = 1935; // port
RTMP_LogPrintf("RTMP Server %s\n", RTMPDUMP_VERSION);
RTMP_LogPrintf("(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL\n\n");
RTMP_debuglevel = RTMP_LOGINFO;
if (argc > 1 && !strcmp(argv[1], "-z"))
RTMP_debuglevel = RTMP_LOGALL;
// init request
memset(&defaultRTMPRequest, 0, sizeof(RTMP_REQUEST));
defaultRTMPRequest.rtmpport = -1;
defaultRTMPRequest.protocol = RTMP_PROTOCOL_UNDEFINED;
defaultRTMPRequest.bLiveStream = FALSE; // is it a live stream? then we can't seek/resume
defaultRTMPRequest.timeout = 300; // timeout connection afte 300 seconds
defaultRTMPRequest.bufferTime = 20 * 1000;
signal(SIGINT, sigIntHandler);
#ifndef WIN32
signal(SIGPIPE, SIG_IGN);
#endif
#ifdef _DEBUG
netstackdump = fopen("netstackdump", "wb");
netstackdump_read = fopen("netstackdump_read", "wb");
#endif
InitSockets();
// start text UI
ThreadCreate(controlServerThread, 0);
// start http streaming
if ((rtmpServer =
startStreaming(rtmpStreamingDevice, nRtmpStreamingPort)) == 0)
{
RTMP_Log(RTMP_LOGERROR, "Failed to start RTMP server, exiting!");
return RD_FAILED;
}
RTMP_LogPrintf("Streaming on rtmp://%s:%d\n", rtmpStreamingDevice,
nRtmpStreamingPort);
while (rtmpServer->state != STREAMING_STOPPED)
{
sleep(1);
}
RTMP_Log(RTMP_LOGDEBUG, "Done, exiting...");
CleanupSockets();
#ifdef _DEBUG
if (netstackdump != 0)
fclose(netstackdump);
if (netstackdump_read != 0)
fclose(netstackdump_read);
#endif
return nStatus;
}
开发者ID:firemyst, 项目名称:rtmpdump, 代码行数:71, 代码来源:rtmpsrv.c
示例8: main
int
main(int argc, char **argv)
{
int nStatus = RD_SUCCESS;
// http streaming server
char DEFAULT_HTTP_STREAMING_DEVICE[] = "0.0.0.0"; // 0.0.0.0 is any device
char *httpStreamingDevice = DEFAULT_HTTP_STREAMING_DEVICE; // streaming device, default 0.0.0.0
int nHttpStreamingPort = 80; // port
int opt;
struct option longopts[] = {
{"help", 0, NULL, 'h'},
{"host", 1, NULL, 'n'},
{"port", 1, NULL, 'c'},
{"socks", 1, NULL, 'S'},
{"protocol", 1, NULL, 'l'},
{"playpath", 1, NULL, 'y'},
{"rtmp", 1, NULL, 'r'},
{"swfUrl", 1, NULL, 's'},
{"tcUrl", 1, NULL, 't'},
{"pageUrl", 1, NULL, 'p'},
{"app", 1, NULL, 'a'},
#ifdef CRYPTO
{"swfhash", 1, NULL, 'w'},
{"swfsize", 1, NULL, 'x'},
{"swfVfy", 1, NULL, 'W'},
{"swfAge", 1, NULL, 'X'},
#endif
{"auth", 1, NULL, 'u'},
{"conn", 1, NULL, 'C'},
{"flashVer", 1, NULL, 'f'},
{"live", 0, NULL, 'v'},
//{"flv", 1, NULL, 'o'},
//{"resume", 0, NULL, 'e'},
{"timeout", 1, NULL, 'm'},
{"buffer", 1, NULL, 'b'},
//{"skip", 1, NULL, 'k'},
{"device", 1, NULL, 'D'},
{"sport", 1, NULL, 'g'},
{"subscribe", 1, NULL, 'd'},
{"start", 1, NULL, 'A'},
{"stop", 1, NULL, 'B'},
{"token", 1, NULL, 'T'},
{"debug", 0, NULL, 'z'},
{"quiet", 0, NULL, 'q'},
{"verbose", 0, NULL, 'V'},
{0, 0, 0, 0}
};
RTMP_LogPrintf("HTTP-RTMP Stream Gateway %s\n", RTMPDUMP_VERSION);
RTMP_LogPrintf("(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL\n\n");
// init request
memset(&defaultRTMPRequest, 0, sizeof(RTMP_REQUEST));
defaultRTMPRequest.rtmpport = -1;
defaultRTMPRequest.protocol = RTMP_PROTOCOL_UNDEFINED;
defaultRTMPRequest.bLiveStream = FALSE; // is it a live stream? then we can't seek/resume
defaultRTMPRequest.timeout = 120; // timeout connection after 120 seconds
defaultRTMPRequest.bufferTime = 20 * 1000;
defaultRTMPRequest.swfAge = 30;
signal(SIGINT, sigIntHandler);
#ifndef WIN32
signal(SIGPIPE, SIG_IGN);
#endif
InitSockets();
while ((opt =
getopt_long(argc, argv,
"hvqVzr:s:t:p:a:f:u:n:c:l:y:m:d:D:A:B:T:g:w:x:W:X:S:", longopts,
NULL)) != -1)
{
switch (opt)
{
case 'h':
RTMP_LogPrintf
("\nThis program serves media content streamed from RTMP onto HTTP.\n\n");
RTMP_LogPrintf("--help|-h Prints this help screen.\n");
RTMP_LogPrintf
("--rtmp|-r url URL (e.g. rtmp://host[:port]/path)\n");
RTMP_LogPrintf
("--host|-n hostname Overrides the hostname in the rtmp url\n");
RTMP_LogPrintf
("--port|-c port Overrides the port in the rtmp url\n");
RTMP_LogPrintf
("--socks|-S host:port Use the specified SOCKS proxy\n");
RTMP_LogPrintf
("--protocol|-l Overrides the protocol in the rtmp url (0 - RTMP, 2 - RTMPE)\n");
RTMP_LogPrintf
("--playpath|-y Overrides the playpath parsed from rtmp url\n");
RTMP_LogPrintf("--swfUrl|-s url URL to player swf file\n");
RTMP_LogPrintf
("--tcUrl|-t url URL to played stream (default: \"rtmp://host[:port]/app\")\n");
RTMP_LogPrintf("--pageUrl|-p url Web URL of played programme\n");
//.........这里部分代码省略.........
开发者ID:bohrasd, 项目名称:windowsrtdev, 代码行数:101, 代码来源:rtmpgw.c
示例9: usage
void usage(char *prog)
{
RTMP_LogPrintf
("\n%s: This program dumps the media content streamed over RTMP.\n\n", prog);
RTMP_LogPrintf("--help|-h Prints this help screen.\n");
RTMP_LogPrintf
("--url|-i url URL with options included (e.g. rtmp://host[:port]/path swfUrl=url tcUrl=url)\n");
RTMP_LogPrintf
("--rtmp|-r url URL (e.g. rtmp://host[:port]/path)\n");
RTMP_LogPrintf
("--live|-v Save a live stream, no --resume (seeking) of live streams possible\n");
RTMP_LogPrintf
("--flv|-o string FLV output file name, if the file name is - print stream to stdout\n");
RTMP_LogPrintf
("--timeout|-m num Timeout connection num seconds (default: %u)\n", DEF_TIMEOUT);
RTMP_LogPrintf
("--quiet|-q Suppresses all command output.\n");
RTMP_LogPrintf("--verbose|-V Verbose command output.\n");
RTMP_LogPrintf
("If you don't pass parameters for swfUrl, pageUrl, or auth these properties will not be included in the connect ");
RTMP_LogPrintf("packet.\n\n");
}
开发者ID:kulv2012, 项目名称:rtmpdump-librtmp, 代码行数:22, 代码来源:simplertmpdump.c
示例10: main
int main(int argc, char* argv[])
{
InitSockets();
double duration = -1;
int nRead;
//is live stream ?
bool bLiveStream = TRUE;
int bufsize = 1024 * 1024 * 10;
char *buf = (char*)malloc(bufsize);
memset(buf, 0, bufsize);
long countbufsize = 0;
FILE *fp = fopen("receive.flv", "wb");
if (!fp)
{
RTMP_LogPrintf("Open File Error.\n");
CleanupSockets();
return -1;
}
/* set log level */
RTMP_LogLevel loglvl = RTMP_LOGDEBUG;
RTMP_LogSetLevel(loglvl);
RTMP *rtmp = RTMP_Alloc();
RTMP_Init(rtmp);
//set connection timeout,default 30s
rtmp->Link.timeout = 10;
char* rtmpFilePath = "d:\\rtmp.raw";
rtmp->m_pRTMPFile = fopen(rtmpFilePath,"rb");
if (!rtmp->m_pRTMPFile)
{
RTMP_LogPrintf("Failed to open File :%s\n", rtmpFilePath);
return FALSE;
}
// HKS's live URL
if(!RTMP_SetupURL(rtmp, "rtmp://live.hkstv.hk.lxdns.com/live/hks"))
{
RTMP_Log(RTMP_LOGERROR, "SetupURL Err\n");
RTMP_Free(rtmp);
CleanupSockets();
return -1;
}
if (bLiveStream)
{
rtmp->Link.lFlags |= RTMP_LF_LIVE;
}
//1hour
RTMP_SetBufferMS(rtmp, 3600 * 1000);
if(!RTMP_Connect(rtmp, NULL))
{
RTMP_Log(RTMP_LOGERROR, "Connect Err\n");
RTMP_Free(rtmp);
CleanupSockets();
return -1;
}
if(!RTMP_ConnectStream(rtmp, 0))
{
RTMP_Log(RTMP_LOGERROR, "ConnectStream Err\n");
RTMP_Close(rtmp);
RTMP_Free(rtmp);
CleanupSockets();
return -1;
}
while(nRead = RTMP_Read(rtmp, buf, bufsize))
{
fwrite(buf, 1, nRead, fp);
countbufsize += nRead;
RTMP_LogPrintf("Receive: %5dByte, Total: %5.2fkB\n", nRead, countbufsize * 1.0 / 1024);
}
if(fp)
fclose(fp);
if(fpPcap)
fclose(fpPcap);
if (rtmp->m_pRTMPFile)
{
fclose(rtmp->m_pRTMPFile);
}
if(buf)
{
free(buf);
}
if(rtmp)
{
RTMP_Close(rtmp);
RTMP_Free(rtmp);
//.........这里部分代码省略.........
开发者ID:minico, 项目名称:rtmpdump, 代码行数:101, 代码来源:simplest_librtmp_receive.cpp
示例11: ParseOption
//.........这里部分代码省略.........
{
int protocol = atoi(arg);
if (protocol < RTMP_PROTOCOL_RTMP || protocol > RTMP_PROTOCOL_RTMPTS)
{
RTMP_Log(RTMP_LOGERROR, "Unknown protocol specified: %d, using default",
protocol);
return FALSE;
}
else
{
req->protocol = protocol;
}
break;
}
case 'y':
STR2AVAL(req->playpath, arg);
break;
case 'r':
{
req->rtmpurl = arg;
if (!RTMP_ParseURL
(req->rtmpurl, &parsedProtocol, &parsedHost, &parsedPort,
&parsedPlaypath, &parsedApp))
{
RTMP_Log(RTMP_LOGWARNING, "Couldn't parse the specified url (%s)!", arg);
}
else
{
if (!req->hostname.av_len)
req->hostname = parsedHost;
if (req->rtmpport == -1)
req->rtmpport = parsedPort;
if (req->playpath.av_len == 0 && parsedPlaypath.av_len)
{
req->playpath = parsedPlaypath;
}
if (req->protocol == RTMP_PROTOCOL_UNDEFINED)
req->protocol = parsedProtocol;
if (req->app.av_len == 0 && parsedApp.av_len)
{
req->app = parsedApp;
}
}
break;
}
case 's':
STR2AVAL(req->swfUrl, arg);
break;
case 't':
STR2AVAL(req->tcUrl, arg);
break;
case 'p':
STR2AVAL(req->pageUrl, arg);
break;
case 'a':
STR2AVAL(req->app, arg);
break;
case 'f':
STR2AVAL(req->flashVer, arg);
break;
case 'u':
STR2AVAL(req->auth, arg);
break;
case 'C':
parseAMF(&req->extras, optarg, &req->edepth);
break;
case 'm':
req->timeout = atoi(arg);
break;
case 'A':
req->dStartOffset = (int)(atof(arg) * 1000.0);
//printf("dStartOffset = %d\n", dStartOffset);
break;
case 'B':
req->dStopOffset = (int)(atof(arg) * 1000.0);
//printf("dStartOffset = %d\n", dStartOffset);
break;
case 'T':
STR2AVAL(req->token, arg);
break;
case 'S':
STR2AVAL(req->sockshost, arg);
case 'q':
RTMP_debuglevel = RTMP_LOGCRIT;
break;
case 'V':
RTMP_debuglevel = RTMP_LOGDEBUG;
break;
case 'z':
RTMP_debuglevel = RTMP_LOGALL;
break;
default:
RTMP_LogPrintf("unknown option: %c, arg: %s\n", opt, arg);
return FALSE;
}
return TRUE;
}
开发者ID:bohrasd, 项目名称:windowsrtdev, 代码行数:101, 代码来源:rtmpgw.c
示例12: usage
void usage(char *prog)
{
RTMP_LogPrintf
("\n%s: This program dumps the media content streamed over RTMP.\n\n", prog);
RTMP_LogPrintf("--help|-h Prints this help screen.\n");
RTMP_LogPrintf
("--url|-i url URL with options included (e.g. rtmp://host[:port]/path swfUrl=url tcUrl=url)\n");
RTMP_LogPrintf
("--rtmp|-r url URL (e.g. rtmp://host[:port]/path)\n");
RTMP_LogPrintf
("--host|-n hostname Overrides the hostname in the rtmp url\n");
RTMP_LogPrintf
("--port|-c port Overrides the port in the rtmp url\n");
RTMP_LogPrintf
("--socks|-S host:port Use the specified SOCKS proxy\n");
RTMP_LogPrintf
("--protocol|-l num Overrides the protocol in the rtmp url (0 - RTMP, 2 - RTMPE)\n");
RTMP_LogPrintf
("--playpath|-y path Overrides the playpath parsed from rtmp url\n");
RTMP_LogPrintf
("--playlist|-Y Set playlist before playing\n");
RTMP_LogPrintf("--swfUrl|-s url URL to player swf file\n");
RTMP_LogPrintf
("--tcUrl|-t url URL to played stream (default: \"rtmp://host[:port]/app\")\n");
RTMP_LogPrintf("--pageUrl|-p url Web URL of played programme\n");
RTMP_LogPrintf("--app|-a app Name of target app on server\n");
#ifdef CRYPTO
RTMP_LogPrintf
("--swfhash|-w hexstring SHA256 hash of the decompressed SWF file (32 bytes)\n");
RTMP_LogPrintf
("--swfsize|-x num Size of the decompressed SWF file, required for SWFVerification\n");
RTMP_LogPrintf
("--swfVfy|-W url URL to player swf file, compute hash/size automatically\n");
RTMP_LogPrintf
("--swfAge|-X days Number of days to use cached SWF hash before refreshing\n");
#endif
RTMP_LogPrintf
("--auth|-u string Authentication string to be appended to the connect string\n");
RTMP_LogPrintf
("--conn|-C type:data Arbitrary AMF data to be appended to the connect string\n");
RTMP_LogPrintf
(" B:boolean(0|1), S:string, N:number, O:object-flag(0|1),\n");
RTMP_LogPrintf
(" Z:(null), NB:name:boolean, NS:name:string, NN:name:number\n");
RTMP_LogPrintf
("--flashVer|-f string Flash version string (default: \"%s\")\n",
RTMP_DefaultFlashVer.av_val);
RTMP_LogPrintf
("--live|-v Save a live stream, no --resume (seeking) of live streams possible\n");
RTMP_LogPrintf
("--subscribe|-d string Stream name to subscribe to (otherwise defaults to playpath if live is specifed)\n");
RTMP_LogPrintf
("--realtime|-R Don't attempt to speed up download via the Pause/Unpause BUFX hack\n");
RTMP_LogPrintf
("--flv|-o string FLV output file name, if the file name is - print stream to stdout\n");
RTMP_LogPrintf
("--resume|-e Resume a partial RTMP download\n");
RTMP_LogPrintf
("--timeout|-m num Timeout connection num seconds (default: %u)\n",
DEF_TIMEOUT);
RTMP_LogPrintf
("--start|-A num Start at num seconds into stream (not valid when using --live)\n");
RTMP_LogPrintf
("--stop|-B num Stop at num seconds into stream\n");
RTMP_LogPrintf
("--token|-T key Key for SecureToken response\n");
RTMP_LogPrintf
("--jtv|-j JSON Authentication token for Justin.tv legacy servers\n");
RTMP_LogPrintf
("--hashes|-# Display progress with hashes, not with the byte counter\n");
RTMP_LogPrintf
("--buffer|-b Buffer time in milliseconds (default: %u)\n",
DEF_BUFTIME);
RTMP_LogPrintf
("--skip|-k num Skip num keyframes when looking for last keyframe to resume from. Useful if resume fails (default: %d)\n\n",
DEF_SKIPFRM);
RTMP_LogPrintf
("--quiet|-q Suppresses all command output.\n");
RTMP_LogPrintf("--verbose|-V Verbose command output.\n");
RTMP_LogPrintf("--debug|-z Debug level command output.\n");
RTMP_LogPrintf
("If you don't pass parameters for swfUrl, pageUrl, or auth these properties will not be included in the connect ");
RTMP_LogPrintf("packet.\n\n");
}
开发者ID:odol0503, 项目名称:rtmpdump_vs2005, 代码行数:84, 代码来源:rtmpdump.cpp
示例13: setError
void QRtmp::run()
{
bool first = true;
int retries = 0;
if(!m_destFile.fileName().isEmpty())
if(!m_destFile.open(QIODevice::WriteOnly))
{
setError(QString("Can't open %1 for writing").arg(m_destFile.fileName()));
return;
}
while(!m_stop)
{
RTMP_Log(RTMP_LOGDEBUG, "Setting buffer time to: %dms", m_bufferTime);
RTMP_SetBufferMS(m_rtmp, m_bufferTime);
if(first)
{
first = false;
RTMP_LogPrintf("Connecting ...\n");
if(!RTMP_Connect(m_rtmp, NULL))
{
setError("RTMP_Connect failed");
break;
}
RTMP_Log(RTMP_LOGINFO, "Connected...");
// User defined seek offset
if(dStartOffset > 0)
{
// Don't need the start offset if resuming an existing file
if(m_bResume)
{
RTMP_Log(RTMP_LOGWARNING, "Can't seek a resumed stream, ignoring --start option");
dStartOffset = 0;
}
else
dSeek = dStartOffset;
}
// Calculate the length of the stream to still play
if(dStopOffset > 0)
{
// Quit if start seek is past required stop offset
if(dStopOffset <= dSeek)
{
RTMP_LogPrintf("Already Completed\n");
break;
}
}
if(!RTMP_ConnectStream(m_rtmp, dSeek))
{
setError("RTMP_ConnectStream failed");
break;
}
}
else
{
if(retries)
{
RTMP_Log(RTMP_LOGERROR, "Failed to resume the stream\n\n");
if(!RTMP_IsTimedout(m_rtmp))
setError("RTMP_IsTimedout failed");
else
setError("RTMP_IsTimedout RD_INCOMPLETE");
break;
}
RTMP_Log(RTMP_LOGINFO, "Connection timed out, trying to resume.\n\n");
/* Did we already try pausing, and it still didn't work? */
if(m_rtmp->m_pausing == 3)
{
/* Only one try at reconnecting... */
retries = 1;
dSeek = m_rtmp->m_pauseStamp;
if(dStopOffset > 0)
{
if(dStopOffset <= dSeek)
{
RTMP_LogPrintf("Already Completed\n");
break;
}
}
if(!RTMP_ReconnectStream(m_rtmp, dSeek))
{
RTMP_Log(RTMP_LOGERROR, "Failed to resume the stream\n\n");
if(!RTMP_IsTimedout(m_rtmp))
setError("RTMP_IsTimedout failed");
else
setError("RTMP_IsTimedout RD_INCOMPLETE");
break;
}
}
else if(!RTMP_ToggleStream(m_rtmp))
{
//.........这里部分代码省略.........
开发者ID:theappgeek, 项目名称:Media-Stream-Downloader, 代码行数:101, 代码来源:qrtmp.cpp
示例14: doServe
void doServe(STREAMING_SERVER * server, // server socket and state (our listening socket)
int sockfd // client connection socket
)
{
server->state = STREAMING_IN_PROGRESS;
RTMP rtmp = { 0 }; /* our session with the real client */
RTMPPacket packet = { 0 };
// timeout for http requests
fd_set fds;
struct timeval tv;
memset(&tv, 0, sizeof(struct timeval));
tv.tv_sec = 5;
FD_ZERO(&fds);
FD_SET(sockfd, &fds);
if (select(sockfd + 1, &fds, NULL, NULL, &tv) <= 0)
{
RTMP_Log(RTMP_LOGERROR, "Request timeout/select failed, ignoring request");
goto quit;
}
else
{
RTMP_Init(&rtmp);
rtmp.m_sb.sb_socket = sockfd;
if (!RTMP_Serve(&rtmp))
{
RTMP_Log(RTMP_LOGERROR, "Handshake failed");
goto cleanup;
}
}
server->arglen = 0;
while (RTMP_IsConnected(&rtmp) && RTMP_ReadPacket(&rtmp, &packet))
{
if (!RTMPPacket_IsReady(&packet))
continue;
ServePacket(server, &rtmp, &packet);
RTMPPacket_Free(&packet);
}
cleanup:
RTMP_LogPrintf("Closing connection... ");
RTMP_Close(&rtmp);
/* Should probably be done by RTMP_Close() ... */
rtmp.Link.playpath.av_val = NULL;
rtmp.Link.tcUrl.av_val = NULL;
rtmp.Link.swfUrl.av_val = NULL;
rtmp.Link.pageUrl.av_val = NULL;
rtmp.Link.app.av_val = NULL;
rtmp.Link.flashVer.av_val = NULL;
RTMP_LogPrintf("done!\n\n");
quit:
if (server->state == STREAMING_IN_PROGRESS)
server->state = STREAMING_ACCEPTING;
return;
}
开发者ID:firemyst, 项目名称:rtmpdump, 代码行数:61, 代码来源:rtmpsrv.c
示例15: main
int main(int argc, char **argv)
{
extern char *optarg;
int nStatus = RD_SUCCESS;
int bStdoutMode = TRUE; // if true print the stream directly to stdout, messages go to stderr
int bLiveStream = TRUE; // is it a live stream? then we can't seek/resume
long int timeout = DEF_TIMEOUT; // timeout connection after 120 seconds
RTMP rtmp = { 0 };
AVal fullUrl = { 0, 0 };
RTMP_debuglevel = RTMP_LOGINFO;
char *flvFile = 0;
signal(SIGINT, sigIntHandler);
signal(SIGTERM, sigIntHandler);
signal(SIGHUP, sigIntHandler);
signal(SIGPIPE, sigIntHandler);
signal(SIGQUIT, sigIntHandler);
RTMP_LogPrintf("RTMPDump %s\n", RTMPDUMP_VERSION);
RTMP_LogPrintf("(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL\n");
int opt;
struct option longopts[] = {
{"help", 0, NULL, 'h'},
{"url", 1, NULL, 'i'},
{"rtmp", 1, NULL, 'r'},
{"live", 0, NULL, 'v'},
{"timeout", 1, NULL, 'm'},
{"hashes", 0, NULL, '#'},
{"quiet", 0, NULL, 'q'},
{"verbose", 0, NULL, 'V'},
{0, 0, 0, 0}
};
while ((opt = getopt_long(argc, argv, "hVvqzRr:s:t:i:p:a:b:f:o:u:C:n:c:l:y:Ym:k:d:A:B:T:w:x:W:X:S:#j:", longopts, NULL)) != -1)
{
switch (opt)
{
case 'h':
usage(argv[0]);
return RD_SUCCESS;
case 'v':
bLiveStream = TRUE; // no seeking or resuming possible!
break;
case 'i':
STR2AVAL(fullUrl, optarg);
break;
case 'o':
flvFile = optarg;
if (strcmp(flvFile, "-"))
bStdoutMode = FALSE;
break;
case 'm':
timeout = atoi(optarg);
break;
case 'q':
RTMP_debuglevel = RTMP_LOGCRIT;
break;
case 'V':
RTMP_debuglevel = RTMP_LOGDEBUG;
break;
case 'z':
RTMP_debuglevel = RTMP_LOGALL;
break;
default:
RTMP_LogPrintf("unknown option: %c\n", opt);
usage(argv[0]);
return RD_FAILED;
break;
}
}
if (flvFile == 0) {
RTMP_Log(RTMP_LOGWARNING, "You haven't specified an output file (-o filename), using stdout");
bStdoutMode = TRUE;
}
if (!file) {
if (bStdoutMode) {
file = stdout;
SET_BINMODE(file);
}
else {
file = fopen(flvFile, "w+b");
if (file == 0) {
RTMP_LogPrintf("Failed to open file! %s\n", flvFile);
return RD_FAILED;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
RTMP_Init(&rtmp);//初始化RTMP参数
//指定了-i 参数,直接设置URL
if (RTMP_SetupURL(&rtmp, fullUrl.av_val) == FALSE) {
//.........这里部分代码省略.........
开发者ID:kulv2012, 项目名称:rtmpdump-librtmp, 代码行数:101, 代码来源:simplertmpdump.c
示例16: start_sample_rtmp_server
int
start_sample_rtmp_server(int argc, char **argv)
{
int nStatus = RD_SUCCESS;
int i;
// http streaming server
char DEFAULT_HTTP_STREAMING_DEVICE[] = "0.0.0.0"; // 0.0.0.0 is any device
char *rtmpStreamingDevice = DEFAULT_HTTP_STREAMING_DEVICE; // streaming device, default 0.0.0.0
int nRtmpStreamingPort = 1935; // port
char *cert = NULL, *key = NULL;
RTMP_LogPrintf("RTMP Server %s\n", "AVRemoteControl Build 1.0");
RTMP_LogPrintf("(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL\n\n");
RTMP_debuglevel = RTMP_LOGINFO;
for (i = 1; i < argc; i++)
{
if (!strcmp(argv[i], "-z"))
RTMP_debuglevel = RTMP_LOGALL;
else if (!strcmp(argv[i], "-c") && i + 1 < argc)
cert = argv[++i];
else if (!strcmp(argv[i], "-k") && i + 1 < argc)
key = argv[++i];
}
if (cert && key)
sslCtx = RTMP_TLS_AllocServerContext(cert, key);
// init request
memset(&defaultRTMPRequest, 0, sizeof(RTMP_REQUEST));
defaultRTMPRequest.rtmpport = -1;
defaultRTMPRequest.protocol = RTMP_PROTOCOL_UNDEFINED;
defaultRTMPRequest.bLiveStream = true; // is it a live stream? then we can't seek/resume
defaultRTMPRequest.timeout = 500; // timeout connection after 300 seconds
defaultRTMPRequest.bufferTime = 20 * 1000;
signal(SIGINT, sigIntHandler);
#ifndef WIN32
signal(SIGPIPE, SIG_IGN);
#endif
#ifdef _DEBUG
netstackdump = fopen("netstackdump", "wb");
netstackdump_read = fopen("netstackdump_read", "wb");
#endif
InitSockets();
// start text UI
//ThreadCreate(controlServerThread, 0);
std::thread theThread(controlServerThread);
// start http streaming
if ((rtmpServer =
startStreaming(rtmpStreamingDevice, nRtmpStreamingPort)) == 0)
{
RTMP_Log(RTMP_LOGERROR, "Failed to start RTMP server, exiting!");
return RD_FAILED;
}
RTMP_LogPrintf("Streaming on rtmp://%s:%d\n", rtmpStreamingDevice,
nRtmpStreamingPort);
while (rtmpServer->state != STREAMING_STOPPED)
{
sleep(1);
}
RTMP_Log(RTMP_LOGDEBUG, "Done, exiting...");
if (sslCtx)
RTMP_TLS_FreeServerContext(sslCtx);
CleanupSockets();
#ifdef _DEBUG
if (netstackdump != 0)
fclose(netstackdump);
if (netstackdump_read != 0)
fclose(netstackdump_read);
#endif
return nStatus;
}
开发者ID:373137461, 项目名称:AVRemoteControl, 代码行数:87, 代码来源:rtmpsrv.cpp
示例17: do_rtmp
int
do_rtmp(int port,int protocol,char* playpath_arg,char* host,char* swfVfy_arg,char* tcUrl_arg,char* app_arg,char* pageUrl_arg,char* flashVer_arg,char* conn,char* outfile)
{
int nStatus = RD_SUCCESS;
double percent = 0;
double duration = 0.0;
int nSkipKeyFrames = DEF_SKIPFRM; // skip this number of keyframes when resuming
int bOverrideBufferTime = FALSE; // if the user specifies a buffer time override this is true
int bResume = FALSE; // true in resume mode
uint32_t dSeek = 0; // seek position in resume mode, 0 otherwise
uint32_t bufferTime = DEF_BUFTIME;
// meta header and initial frame for the resume mode (they are read from the file and compared with
// the stream we are trying to continue
char *metaHeader = 0;
uint32_t nMetaHeaderSize = 0;
// video keyframe for matching
char *initialFrame = 0;
uint32_t nInitialFrameSize = 0;
int initialFrameType = 0; // tye: audio or video
AVal hostname = { 0, 0 };
AVal playpath = { 0, 0 };
AVal subscribepath = { 0, 0 };
AVal usherToken = { 0, 0 }; //Justin.tv auth token
int retries = 0;
int bLiveStream = FALSE; // is it a live stream? then we can't seek/resume
int bHashes = FALSE; // display byte counters not hashes by default
long int timeout = DEF_TIMEOUT; // timeout connection after 120 seconds
uint32_t dStopOffset = 0;
RTMP rtmp;
AVal swfUrl = { 0, 0 };
AVal tcUrl = { 0, 0 };
AVal pageUrl = { 0, 0 };
AVal app = { 0, 0 };
AVal auth = { 0, 0 };
AVal swfHash = { 0, 0 };
uint32_t swfSize = 0;
AVal flashVer = { 0, 0 };
AVal sockshost = { 0, 0 };
#ifdef CRYPTO
int swfAge = 30; /* 30 days for SWF cache by default */
int swfVfy = 0;
unsigned char hash[RTMP_SWF_HASHLEN];
#endif
char *flvFile = 0;
signal(SIGINT, sigIntHandler);
signal(SIGTERM, sigIntHandler);
signal(SIGHUP, sigIntHandler);
signal(SIGPIPE, sigIntHandler);
signal(SIGQUIT, sigIntHandler);
RTMP_debuglevel = RTMP_LOGINFO;
RTMP_Init(&rtmp);
STR2AVAL(&swfUrl,swfVfy_arg);
swfVfy = 1;
if (host) { STR2AVAL(&hostname, host); }
if (playpath_arg) { STR2AVAL(&playpath, playpath_arg); }
if (tcUrl_arg) { STR2AVAL(&tcUrl, tcUrl_arg); }
if (pageUrl_arg) { STR2AVAL(&pageUrl, pageUrl_arg); }
if (app_arg) { STR2AVAL(&app, app_arg); }
if (flashVer_arg) { STR2AVAL(&flashVer, flashVer_arg); }
if (conn) {
AVal av;
STR2AVAL(&av, conn);
if (!RTMP_SetOpt(&rtmp, &av_conn, &av))
{
RTMP_Log(RTMP_LOGERROR, "Invalid AMF parameter: %s", conn);
return RD_FAILED;
}
}
flvFile = outfile;
file = fopen(flvFile, "w+b");
if (file == 0)
{
RTMP_LogPrintf("Failed to open file! %s\n", flvFile);
return RD_FAILED;
}
if (port == 0)
{
if (protocol & RTMP_FEATURE_SSL)
port = 443;
else if (protocol & RTMP_FEATURE_HTTP)
port = 80;
//.........这里部分代码省略.........
开发者ID:linuxstb, 项目名称:catchup, 代码行数:101, 代码来源:rtmpdump.c
示例18: Download
int Download(RTMP * rtmp, FILE * file, int bStdoutMode, int bLiveStream)
{
int32_t now, lastUpdate;
int bufferSize = 64 * 1024;
char *buffer;
int nRead = 0;
off_t size = ftello(file);
rtmp->m_read.timestamp = 0;
if (rtmp->m_read.timestamp) {
RTMP_Log(RTMP_LOGDEBUG, "Continuing at TS: %d ms\n", rtmp->m_read.timestamp);
}
if (bLiveStream) {
RTMP_LogPrintf("Starting Live Stream\n");
}
else {
RTMP_LogPrintf("Starting download at: %.3f kB\n", (double) size / 1024.0);
}
rtmp->m_read.initialFrameType = 0;
rtmp->m_read.nResumeTS = 0;
rtmp->m_read.metaHeader = 0;
rtmp->m_read.initialFrame = 0;
rtmp->m_read.nMetaHeaderSize = 0;
rtmp->m_read.nInitialFrameSize = 0;
buffer = (char *) malloc(bufferSize);
unsigned long lasttimestamp = 0 ;
unsigned long streamlasttimestamp = 0 ;
now = RTMP_GetTime();
lastUpdate = now - 1000;
do
{
nRead = RTMP_Read(rtmp, buffer, bufferSize);
//RTMP_LogPrintf("nRead: %d\n", nRead);
if (nRead > 0) {
if (fwrite(buffer, sizeof(unsigned char), nRead, file) != (size_t) nRead) {
RTMP_Log(RTMP_LOGERROR, "%s: Failed writing, exiting!", __FUNCTION__);
free(buffer);
return RD_FAILED;
}
size += nRead;
///////log
struct timeval tnow ;
gettimeofday(&tnow, NULL);
unsigned long t2_ms = tnow.tv_sec * 1000 + tnow.tv_usec/1000;
if( lasttimestamp == 0 ) {
streamlasttimestamp = rtmp->m_read.timestamp ;//这个是音频流里面的时间戳。这个算出来的就是音频的码率
lasttimestamp = t2_ms ; //这个是我们收到数据的时间戳,这个算出来的是音频的实际接收码率
continue ;
}
float tmprate = (double)8*nRead/1024/( (double)(t2_ms-lasttimestamp)/1000) ;
float streamtmprate = (double)8*nRead/1024/( (double)(rtmp->m_read.timestamp - streamlasttimestamp)/1000) ;
KULV_LOG("RTMP_Read,ms,nread:%d\trecv timediff:%dms,receive rate:%.2fkbps\tstream timediff:%dms,stream rate:%.1fkbps.",
nRead, t2_ms-lasttimestamp, tmprate, rtmp->m_read.timestamp - streamlasttimestamp, streamtmprate );
lasttimestamp = t2_ms ;
streamlasttimestamp = rtmp->m_read.timestamp ;
now = RTMP_GetTime();
if (abs(now - lastUpdate) > 200) {
RTMP_LogStatus("\r%.3f kB / %.2f sec. recv speed:%.2f kbps. stream rate:%.2f kbps.", (double) size / 1024.0, (double) (rtmp->m_read.timestamp) / 1000.0, tmprate, streamtmprate);
lastUpdate = now;
}
}
else {
RTMP_Log(RTMP_LOGDEBUG, "zero read!");
if (rtmp->m_read.status == RTMP_READ_EOF)
break;
}
}
while (!RTMP_ctrlC && nRead > -1 && RTMP_IsConnected(rtmp) && !RTMP_IsTimedout(rtmp));
free(buffer);
if (nRead < 0)
nRead = rtmp->m_read.status;
RTMP_Log(RTMP_LOGDEBUG, "RTMP_Read returned: %d", nRead);
if (nRead == -3)
return RD_SUCCESS;
if ( RTMP_ctrlC || nRead < 0 || RTMP_IsTimedout(rtmp)) {
return RD_INCOMPLETE;
}
return RD_SUCCESS;
}
开发者ID:kulv2012, 项目名称:rtmpdump-librtmp, 代码行数:93, 代码来源:simplertmpdump.c
示例19: Download
int
Download(RTMP * rtmp, // connected RTMP object
FILE * file, uint32_t dSeek, uint32_t dStopOffset, double duration, int bResume, char *metaHeader, uint32_t nMetaHeaderSize, char *initialFrame, int initialFrameType, uint32_t nInitialFrameSize, int nSkipKeyFrames, int bStdoutMode, int bLiveStream, int bRealtimeStream, int bHashes, int bOverrideBufferTime, uint32_t bufferTime, double *percent) // percentage downloaded [out]
{
int32_t now, lastUpdate;
int bufferSize = 64 * 1024;
char *buffer = (char *) malloc(bufferSize);
int nRead = 0;
off_t size = ftello(file);
unsigned long lastPercent = 0;
rtmp->m_read.timestamp = dSeek;
*percent = 0.0;
if (rtmp->m_read.timestamp)
{
RTMP_Log(RTMP_LOGDEBUG, "Continuing at TS: %d ms\n", rtmp->m_read.timestamp);
}
if (bLiveStream)
{
RTMP_LogPrintf("Starting Live Stream\n");
}
else
{
// print initial status
// Workaround to exit with 0 if the file is fully (> 99.9%) downloaded
if (duration > 0)
{
if ((double) rtmp->m_read.timestamp >= (double) duration * 999.0)
{
RTMP_LogPrintf("Already Completed at: %.3f sec Duration=%.3f sec\n",
(double) rtmp->m_read.timestamp / 1000.0,
(double) duration / 1000.0);
return RD_SUCCESS;
}
else
{
*percent = ((double) rtmp->m_read.timestamp) / (duration * 1000.0) * 100.0;
*percent = ((double) (int) (*percent * 10.0)) / 10.0;
RTMP_LogPrintf("%s download at: %.3f kB / %.3f sec (%.1f%%)\n",
bResume ? "Resuming" : "Starting",
(double) size / 1024.0, (double) rtmp->m_read.timestamp / 1000.0,
*percent);
}
}
else
{
RTMP_LogPrintf("%s download at: %.3f kB\n",
bResume ? "Resuming" : "Starting",
(double) size / 1024.0);
}
if (bRealtimeStream)
RTMP_LogPrintf(" in approximately realtime (disabled BUFX speedup hack)\n");
}
if (dStopOffset > 0)
RTMP_LogPrintf("For duration: %.3f sec\n", (double) (dStopOffset - dSeek) / 1000.0);
if (bResume && nInitialFrameSize > 0)
rtmp->m_read.flags |= RTMP_READ_RESUME;
rtmp->m_read.initialFrameType = initialFrameType;
rtmp->m_read.nResumeTS = dSeek;
rtmp->m_read.metaHeader = metaHeader;
rtmp->m_read.initialFrame = initialFrame;
rtmp->m_read.nMetaHeaderSize = nMetaHeaderSize;
rtmp->m_read.nInitialFrameSize = nInitialFrameSize;
buffer = (char *) malloc(bufferSize);
now = RTMP_GetTime();
lastUpdate = now - 1000;
do
{
nRead = RTMP_Read(rtmp, buffer, bufferSize);
//RTMP_LogPrintf("nRead: %d\n", nRead);
if (nRead > 0)
{
if (fwrite(buffer, sizeof(unsigned char), nRead, file) !=
(size_t) nRead)
{
RTMP_Log(RTMP_LOGERROR, "%s: Failed writing, exiting!", __FUNCTION__);
free(buffer);
return RD_FAILED;
}
size += nRead;
//RTMP_LogPrintf("write %dbytes (%.1f kB)\n", nRead, nRead/1024.0);
if (duration <= 0) // if duration unknown try to get it from the stream (onMetaData)
duration = RTMP_GetDuration(rtmp);
if (duration > 0)
{
// make sure we claim to have enough buffer time!
if (!bOverrideBufferTime && bufferTime < (duration * 1000.0))
{
bufferTime = (uint32_t) (duration * 1000.0) + 5000; // extra 5sec to make sure we've got enough
RTMP_Log(RTMP_LOGDEBUG,
//.........这里部分代码省略.........
开发者ID:odol0503, 项目名称:rtmpdump_vs2005, 代码行数:101, 代码来源:rtmpdump.cpp
示例20: publish_using_write
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:18162| 2023-10-27
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9638| 2022-11-06
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8162| 2022-11-06
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8539| 2022-11-06
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8442| 2022-11-06
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9361| 2022-11-06
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8412| 2022-11-06
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7849| 2022-11-06
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8395| 2022-11-06
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7388| 2022-11-06
请发表评论