Play a SDP file with VLC?

16,490

When you receive the SDP from the server during a RTSP request, it is customized by the server to tell you where it's going to send the stream it's starting. Without the RTSP control channel to tell the server you want an RTP stream, it will not stream out.

Direct SDP playback is useful essentially only if you have a broadcast/multicast RTP stream, or a continuous "push" RTP stream, not if you have a VOD stream that would otherwise be issued by RTSP.

Share:
16,490
Stéphane Gourichon
Author by

Stéphane Gourichon

Software professional. All missions dealing with software source code, with a strong bias towards very high quality: evaluating your existing software (audit), enhancing/extending your existing software, defining together then writing for you production-grade software, even from scratch, including for industrial and other highly demanding situations. Many topics covered: signal processing (e.g. video/audio), artificial intelligence (perceive the real world and act upon it), graphical user interface, including networked architecture, web API, driving your dedicated hardware, you name it. Project size: from one embedded system through dozens of networked PC, to software systems deployed to millions. The bottom line: if you have a software project, need high quality, something that just works, we can work together. Contact us.

Updated on September 16, 2022

Comments

  • Stéphane Gourichon
    Stéphane Gourichon almost 2 years

    Goal

    Confirming that VLC can play a stream from a locally given SDP file.

    This appears to be possible based on testimonies:

    Experiment

    So I looked for a publicly available case and found Mobile Streaming, RTSP/RTP, Wowza Streaming Engine | Wowza Media Systems.

    This works, plays color video with sound:

    vlc rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov
    

    I managed to extract SDP file using trick from networking - How can I capture network traffic of a single process? - Ask Ubuntu

    strace -f -e trace=network -s 10000 mplayer rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov 2>&1 | grep a=
    

    ... then reformatted the file and saved to bbb.sdp

    File looks like (actual line don't start with whitespace, and finish with Windows-style line ending):

    o=- 785981631 785981631 IN IP4 184.72.239.149
    s=BigBuckBunny_115k.mov
    c=IN IP4 184.72.239.149
    t=0 0
    a=sdplang:en
    a=range:npt=0- 596.48
    a=control:*
    m=audio 0 RTP/AVP 96
    a=rtpmap:96 mpeg4-generic/12000/2
    a=fmtp:96 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1490
    a=control:trackID=1
    m=video 0 RTP/AVP 97
    a=rtpmap:97 H264/90000
    a=fmtp:97 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
    a=cliprect:0,0,160,240
    a=framesize:97 240-160
    a=framerate:24.0
    a=control:trackID=2
    

    Then:

    vlc bbb.sdp 
    

    shows an entry in playlist with correct duration (09:56, the information is in the SDP) but no video appears.

    Trace network calls

    VLC media player 2.1.6 Rincewind (revision 2.1.6-0-gea01d28)
    Process 15739 attached
    [0xf19118] [http] lua interface: Lua HTTP interface
    Process 15740 attached
    [pid 15739] bind(7, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
    [pid 15739] bind(7, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EADDRINUSE (Address already in use)
    [0xf19118] [http] main interface error: socket bind error (Permission denied)
    [pid 15739] bind(7, {sa_family=AF_INET6, sin6_port=htons(8080), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 EADDRINUSE (Address already in use)
    [0xf19118] [http] main interface error: socket bind error (Permission denied)
    [0xf19118] [http] main interface error: cannot create socket(s) for HTTP host
    [0xf19118] [http] lua interface error: Error loading script /usr/lib/vlc/lua/intf/http.luac: lua/intf/http.lua:328: Failed to create HTTP host
    [pid 15739] +++ exited with 0 +++
    Process 15741 attached
    Process 15742 attached
    Process 15743 attached
    Process 15744 attached
    [0xf3f9a8] dummy interface: using the dummy interface module...
    Process 15745 attached
    [pid 15745] bind(16, {sa_family=AF_INET, sin_port=htons(15947), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15743] bind(17, {sa_family=AF_INET, sin_port=htons(15947), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EADDRINUSE (Address already in use)
    [pid 15745] bind(14, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15745] bind(16, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15745] bind(18, {sa_family=AF_INET, sin_port=htons(49463), sin_addr=inet_addr("0.0.0.0")}, 16Unable to determine our source address: ) = 0
    This computer has an invalid IP address: 0.0.0.0
    [pid 15745] bind(17, {sa_family=AF_INET, sin_port=htons(15947), sin_addr=inet_addr("0.0.0.0")}, 16 <unfinished ...>
    [pid 15743] bind(15, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16 <unfinished ...>
    [pid 15745] <... bind resumed> )        = 0
    [pid 15743] <... bind resumed> )        = 0
    [pid 15743] bind(19, {sa_family=AF_INET, sin_port=htons(55667), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15743] bind(20, {sa_family=AF_INET, sin_port=htons(15947), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15743] bind(17, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15743] bind(20, {sa_family=AF_INET, sin_port=htons(45441), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15745] bind(14, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    [pid 15745] bind(22, {sa_family=AF_INET, sin_port=htons(55005), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
    Process 15746 attached
    [pid 15743] +++ exited with 0 +++
    Process 15747 attached
    Process 15748 attached
    Process 15749 attached
    Process 15750 attached
    Process 15751 attached
    [0x7f2f80c01838] live555 demux error: no data received in 10s, aborting
    [pid 15746] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_TKILL, si_pid=15738, si_uid=1000} ---
    [pid 15746] +++ exited with 0 +++
    [pid 15751] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_TKILL, si_pid=15738, si_uid=1000} ---
    [pid 15751] +++ exited with 0 +++
    [pid 15747] +++ exited with 0 +++
    [pid 15748] +++ exited with 0 +++
    [pid 15749] +++ exited with 0 +++
    [pid 15750] +++ exited with 0 +++
    [pid 15745] +++ exited with 0 +++
    

    It appears that VLC does not even try to connect to IP 184.72.239.149 .

    I'm clueless. Is this a bug?

    Questions

    • Why would playing directly from RTSP URL work, and not playing a locally saved SDP file?
    • What to do?