Всем привет! Я чайник, но тут постараюсь делится опытом и наработками.
Есть необходимость создать двухстороннюю видео связь чтоб объединить людей и сделать мир счастливее.
Использовать USB WEB камеру не надёжно, сложная повторяемость конфигурации и в целом лучше всего и дешевле будет китайская IP камера, я взял в магазине (год назад) за 1000р. Digma DiVizion 100.
После вкуривания ссылки на просмотр видео из VLC плеер, был перехвачен через снифер SmartShiff синтаксис и тут есть вопросы.
Ссылка для VLC плеера: rtsp://192.168.43.138:10554/tcp/av0_0
Интересно то, что логина и пароля не надо было вообще, просмотр идёт без проблем.
Обратите внимание на символ 20 - "¶", я пробовал воссоздать в точности такой пакет, но ничего не вышло, как оказалось вот синтаксис для команды:
command="OPTIONS rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0"+#CRLF$ command+"CSeq: 2" +#CRLF$ command+"User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)"+#CRLF$ command+#CRLF$ SendNetworkString(rtsp,command , #PB_UTF8)
Тестовая программа простая:
Код:If InitNetwork() = 0 MessageRequester("ОШИБКА", "Нет сети" ,0) End EndIf Port = 10554 command.s="" rtsp = OpenNetworkConnection("192.168.43.138", Port, #PB_Network_TCP) If rtsp command="" command="OPTIONS rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0"+#CRLF$ command+"CSeq: 2" +#CRLF$ command+"User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)"+#CRLF$ command+#CRLF$ Debug "==================== ОТПРАВКА ДАННЫХ =======================" Debug ">"+command+"<" Debug "==================== ПРИЁМ ДАННЫХ =======================" SendNetworkString(rtsp,command , #PB_UTF8) *Buffer=AllocateMemory(10000) quit=0 tm=0 Delay(100) Repeat SEvent = NetworkClientEvent(rtsp) ;======== Проверка событий по TCPIP Select SEvent Case #PB_NetworkEvent_Connect MessageRequester("PureBasic - Server", "A new client has connected !", 0) Case #PB_NetworkEvent_Data ;MessageRequester("PureBasic - Server", "Client "+Str(rtsp)+" has send a packet !", 0) ReceiveNetworkData(rtsp, *Buffer, 10000) Debug ">"+PeekS(*Buffer, -1, #PB_UTF8)+"<" tm=tm+1 Debug tm Select tm Case 1 command="" command+"DESCRIBE rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0"+#CR$+#LF$ command+"CSeq: 3" +#CRLF$ command+"User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)" +#CR$+#LF$ command+"Accept: application/sdp" +#CR$+#LF$ command+#CRLF$+#CRLF$ Debug "==================== ОТПРАВКА ДАННЫХ =======================" Debug ">"+command+"<" Debug "==================== ПРИЁМ ДАННЫХ =======================" SendNetworkString(rtsp,command , #PB_UTF8) Delay(100) Case 2 Quit = 1 EndSelect Case #PB_NetworkEvent_Disconnect MessageRequester("Соединение закрыто ","Ответ сервера:" +Str(rtsp), 0) Quit = 1 EndSelect Until Quit = 1 CloseNetworkConnection(rtsp) Else MessageRequester("ОШИБКА", "Нет соединения", 0) EndIf End
Ответ от программы:
На всякий случай общение VCL плеера до момента передачи кучи инфомрации:
Код:OPTIONS rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0 CSeq: 2 User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28) RTSP/1.0 200 OK Cseq: 2 Date: Sat, Oct 10 2020 21:13:43 GMT Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER DESCRIBE rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0 CSeq: 3 User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28) Accept: application/sdp RTSP/1.0 200 OK Cseq: 3 Date: Sat, Oct 10 2020 21:13:43 GMT Content-Type: application/sdp Content-Length: 261 v=0 o=- 1602364423 1602364424 IN IP4 192.168.43.138 s=streamed by the RTSP server t=0 0 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=control:track0 a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA== SETUP rtsp://192.168.43.138:10554/tcp/av0_0/track0 RTSP/1.0 CSeq: 4 User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28) Transport: RTP/AVP;unicast;client_port=52724-52725 RTSP/1.0 200 OK Cseq: 4 Date: Sat, Oct 10 2020 21:13:43 GMT Session: 3035090777854325971 Transport: RTP/AVP;unicast;client_port=52724-52725;server_port=59752-59753 PLAY rtsp://192.168.43.138:10554/tcp/av0_0 RTSP/1.0 CSeq: 5 User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28) Session: 3035090777854325971 Range: npt=0.000- RTSP/1.0 200 OK Cseq: 5 Date: Sat, Oct 10 2020 21:13:43 GMT Session: 3035090777854325971 .(.!.`.!9..|.dx'gB......n..........x..(...`."9..|.dx'h.<..71 Range: npt=0.000- .-52725 .TSP server t=0 0 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=control:track0 a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA== .............................................................................................................................................. ...p.....w............. Cseq: 5 Date: Sat, Oct 10 2020 21:13:43 GMT Session: 3035090777854325971 .(.!.`.!9..|.dx'gB......n..........x..(...`."9..|.dx'h.<..71 Range: npt=0.000- .-52725 .TSP server t=0 0 .............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................(...`.&9..|.dx'|.."B.KQ.y...GX}.{.............0y:..RT{.B,Ns..x...............W..4[.Q...$KBv.......,.....%_.A.*.....Oik..wn..!.....a..{.....FP..F....O.i...j..vNC.u.. .;.....D>6.....'h..i..[)7...7......`L..!Pbu.L..?Qs..M.Q....z&. .*.....]....77x8...7.........*....N..........N...u.>*.D.O........e.>......B..<.^:......n.rQ.._.K.k..K.<...............:......|.P._.....b_k.~.e].....< ..X..'TTV...2v.....{j2j .?.FZ-DYW........f...'%...6t..Zn.h......KP.....g`m.vx....:.....*E.?...."....W...T.....|.. &...r.S.......<.B.u=9.%........ ....w`#Y.!(.q."R.g..18~1..>..x_.#...\.......Z5.".p...!..(=.Ld.i...>..........T...%:)..5..'..<._.c.= ............L....\T.x/_+P[.~c..B'.bF..qd.C.M.A.n...8j.....'..K...%P..r|....\.... ~...e;...m.=w.2~C.1@p.v..3T.D.`...';W.r...;<......}
Сейчас цель получить много раз хотя-бы картинку, так как поверхностно курнув H.264 меня убило в хлам
Методы протокола:
describe — запрос описания содержимого, например, в формате SDP;
options — запрос поддерживаемых методов;
play — запрос начала вещания содержимого;
pause — запрос временной остановки вещания;
record — запрос на записывание содержимого сервером;
redirect — перенаправление на другое содержимое;
setup — запрос установки транспортного механизма для содержимого;
announce — обновление данных описания содержимого;
get_parameter — запрос указанных параметров у сервера;
set_parameter — установка параметров сервера;
teardown — остановка потока и освобождение ресурсов.