Code: Alles auswählen
-- Załadowanie biblioteki lua-socket
local socket = require("socket")
-- Określenie adresu IP kamery oraz portu RTSP
local camera_ip = "192.168.1.100"
local rtsp_port = 554
-- Wysłanie żądania DESCRIBE, aby uzyskać informacje o strumieniu
local describe_request = "DESCRIBE rtsp://" .. camera_ip .. ":" .. rtsp_port .. "/stream RTSP/1.0\r\n" ..
"CSeq: 1\r\n" ..
"Accept: application/sdp\r\n\r\n"
local describe_socket = assert(socket.connect(camera_ip, rtsp_port))
describe_socket:send(describe_request)
-- Odczytanie odpowiedzi od kamery
local describe_response = ""
while true do
local chunk, status, partial = describe_socket:receive("*a")
describe_response = describe_response .. (chunk or partial)
if status == "closed" then
break
end
end
-- Wyodrębnienie adresu strumienia z odpowiedzi DESCRIBE
local stream_address = string.match(describe_response, "m=video%s+(.-)%s+")
-- Wysłanie żądania SETUP, aby nawiązać połączenie z kamery
local setup_request = "SETUP rtsp://" .. camera_ip .. ":" .. rtsp_port .. "/" .. stream_address .. " RTSP/1.0\r\n" ..
"CSeq: 2\r\n" ..
"Transport: RTP/AVP;unicast;client_port=5000-5001\r\n\r\n"
local setup_socket = assert(socket.connect(camera_ip, rtsp_port))
setup_socket:send(setup_request)
-- Odczytanie odpowiedzi od kamery
local setup_response = ""
while true do
local chunk, status, partial = setup_socket:receive("*a")
setup_response = setup_response .. (chunk or partial)
if status == "closed" then
break
end
end
-- Wysłanie żądania PLAY, aby rozpocząć odtwarzanie strumienia
local play_request = "PLAY rtsp://" .. camera_ip .. ":" .. rtsp_port .. "/" .. stream_address .. " RTSP/1.0\r\n" ..
"CSeq: 3\r\n" ..
"Range: npt=0.000-\r\n\r\n"
local play_socket = assert(socket.connect(camera_ip, rtsp_port))
play_socket:send(play_request)
-- Odczytanie odpowiedzi od kamery
local play_response = ""
while true do
local chunk, status, partial = play_socket:receive("*a")
play_response = play_response .. (chunk or partial)
if status == "closed" then
break
end
end
-- Otworzenie gniazda UDP do odbierania pakietów RTP
local udp_socket = assert(socket.udp())
udp_socket:setsockname("*", 5000)
-- Odbieranie i przetwarzanie pakietów RTP
while true do
local data, ip, port = udp_socket:receivefrom()
-- Tutaj można umieścić kod przetwarzający pakiet RTP
end