aboutsummaryrefslogtreecommitdiffstats
path: root/docs/examples/rtsp.c
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/rtsp.c')
-rw-r--r--docs/examples/rtsp.c75
1 files changed, 43 insertions, 32 deletions
diff --git a/docs/examples/rtsp.c b/docs/examples/rtsp.c
index fed343df..63c46e15 100644
--- a/docs/examples/rtsp.c
+++ b/docs/examples/rtsp.c
@@ -27,6 +27,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+/* <DESC>
+ * A basic RTSP transfer
+ * </DESC>
+ */
#include <stdio.h>
#include <stdlib.h>
@@ -42,12 +46,12 @@ static int _getch(void)
{
struct termios oldt, newt;
int ch;
- tcgetattr( STDIN_FILENO, &oldt );
+ tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
- newt.c_lflag &= ~( ICANON | ECHO );
- tcsetattr( STDIN_FILENO, TCSANOW, &newt );
+ newt.c_lflag &= ~( ICANON | ECHO);
+ tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
- tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
+ tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
#endif
@@ -58,12 +62,12 @@ static int _getch(void)
/* error handling macros */
#define my_curl_easy_setopt(A, B, C) \
- if ((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \
+ if((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \
fprintf(stderr, "curl_easy_setopt(%s, %s, %s) failed: %d\n", \
#A, #B, #C, res);
#define my_curl_easy_perform(A) \
- if ((res = curl_easy_perform((A))) != CURLE_OK) \
+ if((res = curl_easy_perform((A))) != CURLE_OK) \
fprintf(stderr, "curl_easy_perform(%s) failed: %d\n", #A, res);
@@ -83,9 +87,9 @@ static void rtsp_describe(CURL *curl, const char *uri,
const char *sdp_filename)
{
CURLcode res = CURLE_OK;
- FILE *sdp_fp = fopen(sdp_filename, "wt");
+ FILE *sdp_fp = fopen(sdp_filename, "wb");
printf("\nRTSP: DESCRIBE %s\n", uri);
- if (sdp_fp == NULL) {
+ if(sdp_fp == NULL) {
fprintf(stderr, "Could not open '%s' for writing\n", sdp_filename);
sdp_fp = stdout;
}
@@ -96,7 +100,7 @@ static void rtsp_describe(CURL *curl, const char *uri,
my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_DESCRIBE);
my_curl_easy_perform(curl);
my_curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
- if (sdp_fp != stdout) {
+ if(sdp_fp != stdout) {
fclose(sdp_fp);
}
}
@@ -137,14 +141,15 @@ static void rtsp_teardown(CURL *curl, const char *uri)
/* convert url into an sdp filename */
-static void get_sdp_filename(const char *url, char *sdp_filename)
+static void get_sdp_filename(const char *url, char *sdp_filename,
+ size_t namelen)
{
const char *s = strrchr(url, '/');
strcpy(sdp_filename, "video.sdp");
- if (s != NULL) {
+ if(s != NULL) {
s++;
- if (s[0] != '\0') {
- sprintf(sdp_filename, "%s.sdp", s);
+ if(s[0] != '\0') {
+ snprintf(sdp_filename, namelen, "%s.sdp", s);
}
}
}
@@ -156,10 +161,10 @@ static void get_media_control_attribute(const char *sdp_filename,
{
int max_len = 256;
char *s = malloc(max_len);
- FILE *sdp_fp = fopen(sdp_filename, "rt");
+ FILE *sdp_fp = fopen(sdp_filename, "rb");
control[0] = '\0';
- if (sdp_fp != NULL) {
- while (fgets(s, max_len - 2, sdp_fp) != NULL) {
+ if(sdp_fp != NULL) {
+ while(fgets(s, max_len - 2, sdp_fp) != NULL) {
sscanf(s, " a = control: %s", control);
}
fclose(sdp_fp);
@@ -174,7 +179,8 @@ int main(int argc, char * const argv[])
#if 1
const char *transport = "RTP/AVP;unicast;client_port=1234-1235"; /* UDP */
#else
- const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235"; /* TCP */
+ /* TCP */
+ const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235";
#endif
const char *range = "0.000-";
int rc = EXIT_SUCCESS;
@@ -185,50 +191,53 @@ int main(int argc, char * const argv[])
printf(" Requires cURL V7.20 or greater\n\n");
/* check command line */
- if ((argc != 2) && (argc != 3)) {
+ if((argc != 2) && (argc != 3)) {
base_name = strrchr(argv[0], '/');
- if (base_name == NULL) {
+ if(base_name == NULL) {
base_name = strrchr(argv[0], '\\');
}
- if (base_name == NULL) {
+ if(base_name == NULL) {
base_name = argv[0];
- } else {
+ }
+ else {
base_name++;
}
printf("Usage: %s url [transport]\n", base_name);
printf(" url of video server\n");
- printf(" transport (optional) specifier for media stream protocol\n");
+ printf(" transport (optional) specifier for media stream"
+ " protocol\n");
printf(" default transport: %s\n", transport);
printf("Example: %s rtsp://192.168.0.2/media/video1\n\n", base_name);
rc = EXIT_FAILURE;
- } else {
+ }
+ else {
const char *url = argv[1];
char *uri = malloc(strlen(url) + 32);
char *sdp_filename = malloc(strlen(url) + 32);
char *control = malloc(strlen(url) + 32);
CURLcode res;
- get_sdp_filename(url, sdp_filename);
- if (argc == 3) {
+ get_sdp_filename(url, sdp_filename, strlen(url) + 32);
+ if(argc == 3) {
transport = argv[2];
}
/* initialize curl */
res = curl_global_init(CURL_GLOBAL_ALL);
- if (res == CURLE_OK) {
+ if(res == CURLE_OK) {
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
CURL *curl;
fprintf(stderr, " cURL V%s loaded\n", data->version);
/* initialize this curl session */
curl = curl_easy_init();
- if (curl != NULL) {
+ if(curl != NULL) {
my_curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
my_curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
my_curl_easy_setopt(curl, CURLOPT_HEADERDATA, stdout);
my_curl_easy_setopt(curl, CURLOPT_URL, url);
/* request server options */
- sprintf(uri, "%s", url);
+ snprintf(uri, strlen(url) + 32, "%s", url);
rtsp_options(curl, uri);
/* request session description and write response to sdp file */
@@ -238,11 +247,11 @@ int main(int argc, char * const argv[])
get_media_control_attribute(sdp_filename, control);
/* setup media stream */
- sprintf(uri, "%s/%s", url, control);
+ snprintf(uri, strlen(url) + 32, "%s/%s", url, control);
rtsp_setup(curl, uri, transport);
/* start playing media stream */
- sprintf(uri, "%s/", url);
+ snprintf(uri, strlen(url) + 32, "%s/", url);
rtsp_play(curl, uri, range);
printf("Playing video, press any key to stop ...");
_getch();
@@ -254,11 +263,13 @@ int main(int argc, char * const argv[])
/* cleanup */
curl_easy_cleanup(curl);
curl = NULL;
- } else {
+ }
+ else {
fprintf(stderr, "curl_easy_init() failed\n");
}
curl_global_cleanup();
- } else {
+ }
+ else {
fprintf(stderr, "curl_global_init(%s) failed: %d\n",
"CURL_GLOBAL_ALL", res);
}