how to store that bitstream as video  file .if i want to display that
bitstream  as video what are the ways you can  suggest ?




On Fri, 14 Feb 2020 at 15:50, <curl-library-requ...@cool.haxx.se> wrote:

> Send curl-library mailing list submissions to
>         curl-library@cool.haxx.se
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://cool.haxx.se/cgi-bin/mailman/listinfo/curl-library
> or, via email, send a message with subject or body 'help' to
>         curl-library-requ...@cool.haxx.se
>
> You can reach the person managing the list at
>         curl-library-ow...@cool.haxx.se
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of curl-library digest..."
>
>
> Today's Topics:
>
>    1. rtsp curl code not playing video (Nishad DESHMUKH)
>    2. Re: rtsp curl code not playing video (Dan Fandrich)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Fri, 14 Feb 2020 14:39:16 +0530
> From: Nishad DESHMUKH <nishaddeshmuk...@gmail.com>
> To: curl-library@cool.haxx.se
> Subject: rtsp curl code not playing video
> Message-ID:
>         <CANU4-RTOr6oqk7h3KbsMwiwFHcc057=
> zmtpczhbkft+gjuw...@mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> after compilation and run the link video not played . my input was
>
> INPUT TO PROGRAM:
> ./a.out rtsp://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/
>
> OUTPUT :
>
> RTSP request V1.0
>     Project web site: https://github.com/BackupGGCode/rtsprequest
>     Requires curl V7.20 or greater
>
>     curl V7.54.0 loaded
>
> RTSP: OPTIONS rtsp://
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/
> RTSP/1.0
> <http://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/RTSP/1.0>
> 200 OK
> Server: Wowza Media Server 3.1.1 build1479
> Cache-Control: no-cache
> Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD,
> GET_PARAMETER
> Cseq: 1
> Supported: play.basic, con.persistent
>
>
> RTSP: DESCRIBE rtsp://
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/
> Writing SDP to 'video.sdp'
> RTSP/1.0 200 OK
> Server: Wowza Media Server 3.1.1 build1479
> Cache-Control: no-cache
> Expires: Fri, 14 Feb 2020 09:57:51 CET
> Cseq: 2
> Content-Length: 812
> Content-Base: rtsp://
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/
> Date: Fri, 14 Feb 2020 09:57:51 CET
> Content-Type: application/sdp
> Session: 1675774146;timeout=60
>
>
> RTSP: SETUP rtsp://
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//trackID=2
>       TRANSPORT RTP/AVP;unicast;client_port=1234-1235
> RTSP/1.0 200 OK
> Server: Wowza Media Server 3.1.1 build1479
> Cache-Control: no-cache
> Expires: Fri, 14 Feb 2020 09:57:51 CET
> Cseq: 3
> Transport: RTP/AVP;unicast;client_port=1234-1235;source=freja.hiof.no
> ;server_port=7174-7175;ssrc=6CC88579
> Date: Fri, 14 Feb 2020 09:57:51 CET
> Session: 1675774146;timeout=60
>
>
> RTSP: PLAY rtsp://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//
> RTSP/1.0
> <http://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//RTSP/1.0>
> 200 OK
> RTP-Info: url=trackID=1;seq=1;rtptime=3861933024,url=rtsp://
>
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//trackID=2;seq=1;rtptime=1335544388
> Server: Wowza Media Server 3.1.1 build1479
> Cache-Control: no-cache
> Cseq: 4
> Range: npt=now-
> Session: 1675774146;timeout=60
>
> Playing video, press any key to stop ...
>
> RTSP: TEARDOWN rtsp://
> freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//
> RTSP/1.0 403 Forbidden
> Server: Wowza Media Server 3.1.1 build1479
> Cseq: 5
>
> SOURCE CODE :
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> #if defined (WIN32)
> #  include <conio.h>  /* _getch() */
> #else
> #  include <termios.h>
> #  include <unistd.h>
>
> static int _getch(void)
> {
>   struct termios oldt, newt;
>   int ch;
>   tcgetattr(STDIN_FILENO, &oldt);
>   newt = oldt;
>   newt.c_lflag &= ~( ICANON | ECHO);
>   tcsetattr(STDIN_FILENO, TCSANOW, &newt);
>   ch = getchar();
>   tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
>   return ch;
> }
> #endif
>
> #include <curl/curl.h>
>
> #define VERSION_STR  "V1.0"
>
> /* error handling macros */
> #define my_curl_easy_setopt(A, B, C)                             \
>   res = curl_easy_setopt((A), (B), (C));                         \
>   if(res != CURLE_OK)                                            \
>     fprintf(stderr, "curl_easy_setopt(%s, %s, %s) failed: %d\n", \
>             #A, #B, #C, res);
>
> #define my_curl_easy_perform(A)                                     \
>   res = curl_easy_perform(A);                                       \
>   if(res != CURLE_OK)                                               \
>     fprintf(stderr, "curl_easy_perform(%s) failed: %d\n", #A, res);
>
>
> /* send RTSP OPTIONS request */
> static void rtsp_options(CURL *curl, const char *uri)
> {
>   CURLcode res = CURLE_OK;
>   printf("\nRTSP: OPTIONS %s\n", uri);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
> (long)CURL_RTSPREQ_OPTIONS);
>   my_curl_easy_perform(curl);
> }
>
>
> /* send RTSP DESCRIBE request and write sdp response to a file */
> static void rtsp_describe(CURL *curl, const char *uri,
>                           const char *sdp_filename)
> {
>   CURLcode res = CURLE_OK;
>   FILE *sdp_fp = fopen(sdp_filename, "wb");
>   printf("\nRTSP: DESCRIBE %s\n", uri);
>   if(sdp_fp == NULL) {
>     fprintf(stderr, "Could not open '%s' for writing\n", sdp_filename);
>     sdp_fp = stdout;
>   }
>   else {
>     printf("Writing SDP to '%s'\n", sdp_filename);
>   }
>   my_curl_easy_setopt(curl, CURLOPT_WRITEDATA, sdp_fp);
>   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) {
>     fclose(sdp_fp);
>   }
> }
>
> /* send RTSP SETUP request */
> static void rtsp_setup(CURL *curl, const char *uri, const char *transport)
> {
>   CURLcode res = CURLE_OK;
>   printf("\nRTSP: SETUP %s\n", uri);
>   printf("      TRANSPORT %s\n", transport);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT, transport);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
> (long)CURL_RTSPREQ_SETUP);
>   my_curl_easy_perform(curl);
> }
>
>
> /* send RTSP PLAY request */
> static void rtsp_play(CURL *curl, const char *uri, const char *range)
> {
>   CURLcode res = CURLE_OK;
>   printf("\nRTSP: PLAY %s\n", uri);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
>   my_curl_easy_setopt(curl, CURLOPT_RANGE, range);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_PLAY);
>   my_curl_easy_perform(curl);
>
>   /* switch off using range again */
>   my_curl_easy_setopt(curl, CURLOPT_RANGE, NULL);
> }
>
>
> /* send RTSP TEARDOWN request */
> static void rtsp_teardown(CURL *curl, const char *uri)
> {
>   CURLcode res = CURLE_OK;
>   printf("\nRTSP: TEARDOWN %s\n", uri);
>   my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
> (long)CURL_RTSPREQ_TEARDOWN);
>   my_curl_easy_perform(curl);
> }
>
>
> /* convert url into an 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) {
>     s++;
>     if(s[0] != '\0') {
>       snprintf(sdp_filename, namelen, "%s.sdp", s);
>     }
>   }
> }
>
>
> /* scan sdp file for media control attribute */
> static void get_media_control_attribute(const char *sdp_filename,
>                                         char *control)
> {
>   int max_len = 256;
>   char *s = malloc(max_len);
>   FILE *sdp_fp = fopen(sdp_filename, "rb");
>   control[0] = '\0';
>   if(sdp_fp != NULL) {
>     while(fgets(s, max_len - 2, sdp_fp) != NULL) {
>       sscanf(s, " a = control: %s", control);
>     }
>     fclose(sdp_fp);
>   }
>   free(s);
> }
>
>
> /* main app */
> int main(int argc, char * const argv[])
> {
> #if 1
>   const char *transport = "RTP/AVP;unicast;client_port=1234-1235";  /* UDP
> */
> #else
>   /* TCP */
>   const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235";
> #endif
>   const char *range = "0.000-";
>   int rc = EXIT_SUCCESS;
>   char *base_name = NULL;
>
>   printf("\nRTSP request %s\n", VERSION_STR);
>   printf("    Project web site: "
>     "https://github.com/BackupGGCode/rtsprequest\n";);
>   printf("    Requires curl V7.20 or greater\n\n");
>
>   /* check command line */
>   if((argc != 2) && (argc != 3)) {
>     base_name = strrchr(argv[0], '/');
>     if(base_name == NULL) {
>       base_name = strrchr(argv[0], '\\');
>     }
>     if(base_name == NULL) {
>       base_name = argv[0];
>     }
>     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("         default transport: %s\n", transport);
>     printf("Example: %s rtsp://192.168.0.2/media/video1\n\n
> <http://192.168.0.2/media/video1%5Cn%5Cn>", base_name);
>     rc = EXIT_FAILURE;
>   }
>   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, strlen(url) + 32);
>     if(argc == 3) {
>       transport = argv[2];
>     }
>
>     /* initialize curl */
>     res = curl_global_init(CURL_GLOBAL_ALL);
>     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) {
>         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 */
>         snprintf(uri, strlen(url) + 32, "%s", url);
>         rtsp_options(curl, uri);
>
>         /* request session description and write response to sdp file */
>         rtsp_describe(curl, uri, sdp_filename);
>
>         /* get media control attribute from sdp file */
>         get_media_control_attribute(sdp_filename, control);
>
>         /* setup media stream */
>         snprintf(uri, strlen(url) + 32, "%s/%s", url, control);
>         rtsp_setup(curl, uri, transport);
>
>         /* start playing media stream */
>         snprintf(uri, strlen(url) + 32, "%s/", url);
>         rtsp_play(curl, uri, range);
>         printf("Playing video, press any key to stop ...");
>         _getch();
>         printf("\n");
>
>         /* teardown session */
>         rtsp_teardown(curl, uri);
>
>         /* cleanup */
>         curl_easy_cleanup(curl);
>         curl = NULL;
>       }
>       else {
>         fprintf(stderr, "curl_easy_init() failed\n");
>       }
>       curl_global_cleanup();
>     }
>     else {
>       fprintf(stderr, "curl_global_init(%s) failed: %d\n",
>               "CURL_GLOBAL_ALL", res);
>     }
>     free(control);
>     free(sdp_filename);
>     free(uri);
>   }
>
>   return rc;
> }
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://cool.haxx.se/pipermail/curl-library/attachments/20200214/2b395073/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 2
> Date: Fri, 14 Feb 2020 11:14:48 +0100
> From: Dan Fandrich <d...@coneharvesters.com>
> To: curl-library@cool.haxx.se
> Subject: Re: rtsp curl code not playing video
> Message-ID: <20200214101448.ga6...@coneharvesters.com>
> Content-Type: text/plain; charset=iso-8859-1
>
> On Fri, Feb 14, 2020 at 02:39:16PM +0530, Nishad DESHMUKH via curl-library
> wrote:
> > after compilation and run the link video not played . my input was
>
> libcurl doesn't play video. It will happily download a bitstream containing
> video content and supply it to your application, but what that application
> does
> with that bitstream is up to it. If you want to show a video stream on an
> X11
> display, you probably want to look at something like gstreamer or another
> video
> decoding framework.
>
> Dan
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> curl-library mailing list
> curl-library@cool.haxx.se
> https://cool.haxx.se/cgi-bin/mailman/listinfo/curl-library
>
>
> ------------------------------
>
> End of curl-library Digest, Vol 174, Issue 10
> *********************************************
>
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to