rtsp - RTSP 直播推流#

示例

-- RTSP推流示例
local rtsp = rtsp.create("rtsp://example.com:554/stream")
rtsp:setCallback(function(state, ...)
    if state == rtsp.STATE_CONNECTED then
        print("已连接到推流服务器")
    elseif state == rtsp.STATE_PLAYING then
        print("已开始推流")
    elseif state == rtsp.STATE_ERROR then
        print("出错:", ...)
    end
end)
rtsp:connect()

-- 开始处理
rtsp:start()

-- 30秒后停止
sys.wait(30000)
rtsp:stop()

-- 断开连接
rtsp:disconnect()
rtsp:destroy()

rtsp.create(url)#

创建RTSP推流上下文

参数

传入值类型

解释

string

url RTSP服务器地址, 格式: rtsp://host:port/stream

返回值

返回值类型

解释

userdata

RTSP上下文对象

例子

local rtsp = rtsp.create("rtsp://example.com:554/stream")

rtsp:setCallback(func)#

设置RTSP状态回调函数

参数

传入值类型

解释

function

func 回调函数, 参数为 (state, …)

返回值

返回值类型

解释

nil

无返回值

例子

rtsp:setCallback(function(state, ...)
    if state == rtsp.STATE_IDLE then
        print("空闲状态")
    elseif state == rtsp.STATE_CONNECTING then
        print("正在连接")
    elseif state == rtsp.STATE_OPTIONS then
        print("发送OPTIONS")
    elseif state == rtsp.STATE_DESCRIBE then
        print("发送DESCRIBE")
    elseif state == rtsp.STATE_SETUP then
        print("发送SETUP")
    elseif state == rtsp.STATE_PLAY then
        print("发送PLAY请求")
    elseif state == rtsp.STATE_PLAYING then
        print("正在推流")
    elseif state == rtsp.STATE_DISCONNECTING then
        print("正在断开")
    elseif state == rtsp.STATE_ERROR then
        print("错误:", ...)
    end
end)

rtsp:connect()#

连接到RTSP服务器

参数

返回值

返回值类型

解释

boolean

成功返回true, 失败返回false

例子

local ok = rtsp:connect()
if ok then
    print("连接请求已发送")
else
    print("连接失败")
end

rtsp:disconnect()#

断开RTSP连接

参数

返回值

返回值类型

解释

boolean

成功返回true, 失败返回false

例子

rtsp:disconnect()

rtsp:start()#

处理RTSP事件

参数

返回值

返回值类型

解释

nil

无返回值

例子

rtsp:start()

rtsp:stop()#

停止处理RTSP事件

参数

返回值

返回值类型

解释

nil

无返回值

例子

rtsp:stop()

rtsp:getState()#

获取RTSP连接状态

参数

返回值

返回值类型

解释

int

当前状态值

例子

local state = rtsp:getState()
if state == rtsp.STATE_CONNECTED then
    print("已连接")
elseif state == rtsp.STATE_PLAYING then
    print("正在推流")
end

rtsp:setSPS(sps_data)#

设置H.264 SPS参数

参数

传入值类型

解释

string

sps_data 或

userdata

sps_data H.264序列参数集数据

返回值

返回值类型

解释

boolean

成功返回true, 失败返回false

例子

local sps = string.fromBinary("\x67\x42...") -- H.264 SPS数据
rtsp:setSPS(sps)

rtsp:setPPS(pps_data)#

设置H.264 PPS参数

参数

传入值类型

解释

string

pps_data 或

userdata

pps_data H.264图像参数集数据

返回值

返回值类型

解释

boolean

成功返回true, 失败返回false

例子

local pps = string.fromBinary("\x68\xCB...") -- H.264 PPS数据
rtsp:setPPS(pps)

rtsp:pushFrame(frame_data, timestamp)#

推送H.264视频帧

参数

传入值类型

解释

string

frame_data 或

userdata

frame_data H.264编码的视频帧数据

int

timestamp 时间戳(毫秒), 可选,为0则使用内部时间戳

返回值

返回值类型

解释

int

成功时返回已发送或已入队的字节数, 失败返回负数

例子

-- 持续推送H.264帧
local frame_data = ... -- 获取H.264帧数据
local timestamp = sys.now() % 0x100000000
local ret = rtsp:pushFrame(frame_data, timestamp)
if ret >= 0 then
    print("已发送", ret, "字节")
else
    print("发送失败:", ret)
end

rtsp:getStats()#

获取RTSP统计信息

参数

返回值

返回值类型

解释

table

统计信息表

例子

local stats = rtsp:getStats()
print("已发送字节数:", stats.bytes_sent)
print("已发送视频帧数:", stats.video_frames_sent)
print("已发送RTP包数:", stats.rtp_packets_sent)

rtsp:setTransportMode(mode)#

设置RTP传输模式

参数

传入值类型

解释

string

mode 传输模式: “udp”, “tcp”, “udp_fec”

返回值

返回值类型

解释

boolean

成功返回true,失败返回false

例子

-- 使用TCP传输模式(适合外网)
rtsp:setTransportMode("tcp")
-- 使用UDP传输模式(适合局域网,默认)
rtsp:setTransportMode("udp")
-- 使用UDP+FEC传输模式(平衡方案)
rtsp:setTransportMode("udp_fec")

rtsp:getNetworkStats()#

获取网络质量统计信息

参数

返回值

返回值类型

解释

table

网络统计信息,包含:

例子


rtsp:setNetworkStatsCallback(func)#

设置网络统计回调函数

参数

传入值类型

解释

function

func 回调函数,参数为统计信息table

返回值

返回值类型

解释

boolean

成功返回true,失败返回false

例子

rtsp:setNetworkStatsCallback(function(stats)
    print("丢包率:", stats.packet_loss_rate)
    print("延迟:", stats.rtt_ms)
end)

rtsp:setFECParam(param, value)#

设置FEC参数

参数

传入值类型

解释

string

param 参数名称: “redundancy”

number

value 参数值 (redundancy: 0-100)

返回值

返回值类型

解释

boolean

成功返回true,失败返回false

例子

-- 设置FEC冗余度为30%
rtsp:setFECParam("redundancy", 30)

rtsp:destroy()#

销毁RTSP上下文,释放所有资源

参数

返回值

返回值类型

解释

nil

无返回值

例子

rtsp:destroy()