Воспроизвести файл SDP с VLC?

Цель

Подтверждение того, что VLC может воспроизводить поток из локально заданного файла SDP.

Это кажется возможным на основании свидетельств:

Эксперимент

Итак, я поискал общедоступный случай и нашел Mobile Streaming, RTSP / RTP, Wowza Streaming Engine | Wowza Media Systems.

Это работает, воспроизводит цветное видео со звуком:

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

Мне удалось извлечь файл SDP с помощью трюка из сетей - Как Могу ли я захватить сетевой трафик одного процесса? - Спросите Ubuntu

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

... затем отформатировал файл и сохранил в bbb.sdp

Файл выглядит так (фактическая строка не начинается с пробела, а заканчивается окончанием строки в стиле Windows):

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

Потом:

vlc bbb.sdp 

показывает запись в плейлисте с правильной продолжительностью (09:56, информация в SDP), но видео не появляется.

Отслеживание сетевых вызовов

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 +++

Похоже, что VLC даже не пытается подключиться к IP 184.72.239.149.

Я невежественен. Это ошибка?

Вопросы

  • Почему будет работать воспроизведение непосредственно с URL-адреса RTSP, а не воспроизведение локально сохраненного файла SDP?
  • Что делать?

person Stéphane Gourichon    schedule 25.01.2016    source источник
comment
Другие показания с использованием VLCJ: java - Как использовать SDP-файл с VLCJ - qaru   -  person Stéphane Gourichon    schedule 25.01.2016
comment
Эта команда time strace -f -s 10000 vlc bbb.sdp 2>&1 | grep 184.72.239.149 показывает некоторую связь с портами 36557 и 59451 (не всегда одинаковыми?), Но tcpdump показывает, что это всего лишь несколько пакетов ... Что происходит?   -  person Stéphane Gourichon    schedule 25.01.2016


Ответы (1)


Когда вы получаете SDP от сервера во время запроса RTSP, он настраивается сервером, чтобы сообщить вам, куда он собирается отправить поток, который он запускает. Без канала управления RTSP, сообщающего серверу, что вам нужен поток RTP, он не будет выводиться.

Прямое воспроизведение SDP полезно только в том случае, если у вас есть широковещательный / многоадресный поток RTP или непрерывный «проталкивающий» поток RTP, но не если у вас есть поток VOD, который в противном случае был бы выдан RTSP.

person Diego Elio Pettenò    schedule 25.01.2016