我正在使用来自https://curl.haxx.se/libcurl/c/rtsp.html的libcurl编写rtsp代码。
我写了信号处理程序以捕捉Ctrl + C并拆除curl / uri以在播放时关闭会话。
我收到错误消息 - “curl_easy_perform()失败:初始化失败”但我已经初始化了main函数中的curl。
======代码部分========
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <signal.h>
CURL *curl;
char *uri ;
static void rtsp_teardown(CURL *curl, const char *uri)
{
curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_TEARDOWN);
curl_easy_perform(curl);
}
void sighand(int signo){
switch(signo){
case SIGQUIT:
rtsp_teardown(curl,uri);
}
}
void signal(){
struct sigaction actions;
memset(&actions, 0, sizeof(actions));
sigemptyset(&actions.sa_mask);
actions.sa_flags = 0;
actions.sa_handler = sighand;
signal(SIGQUIT, sighand);
}
/*
rtsp option,describe .. could be found from url above.
*/
int main()
{
/*
initial variable could be found from url above
*/
signal();
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl != NULL) {
rtsp_options(curl, uri);
rtsp_describe(curl, uri);
rtsp_setup(curl, uri, transport);
rtsp_play(curl, uri, range);
}
return 0;
}
========================
答案 0 :(得分:0)
这段代码看起来代码应该&#34;通过&#34;可以这么说,在rtsp_play()之后没有任何东西可以等待(除非你在例程中有一些阻止返回的东西)。 在 Ctrl + \ 之后调用 SIGQUIT , Ctrl + C 发送 SIGINT link
除了检查指针是否为NULL之外,它总是一个很好的做法(在这种情况下信号处理器检查它是否仍然是一个有效的指针)。