Skip to content

v3.12.0-alpha.1,个别频道是不是服务器不支持 Range: clock参数 #413

@tubepm

Description

@tubepm

从日志分析,这是一个通过HTTP转RTSP协议进行电视回看(catchup)的请求过程,但最终在PLAY阶段失败,服务器返回 455 Method Not Valid in this State。以下是详细分析:

一、流程概述
客户端请求

客户端 192.168.1.235 请求 URL:/本地频道/CCTV16/超高清/catchup?playseek=20260317004643-20260317010310

携带 playseek 参数,表示回看的时间范围:2026-03-17 00:46:43 到 2026-03-17 01:03:10。

RTSP 代理转换

程序将 HTTP 请求映射到 RTSP 源,基础 URL 为 rtsp://*****:554/...,并追加 playseek 参数。

多次重定向(302)

经过三次重定向,最终到达实际媒体服务器:

第一次重定向到 125.*:554

第二次重定向到 125.*:554

第三次重定向到 125*:1554(或 .117,交替出现)

每次重定向都会更新 URL 中的参数(如 iptvsessionid、crypt 等),但保留了 playseek 语义。

RTSP 交互

OPTIONS:成功,服务器支持 DESCRIBE, SETUP, TEARDOWN, PLAY, ...(最后一台服务器支持完整方法集)。

DESCRIBE:成功,返回 SDP,包含媒体信息:

视频轨道:MP2T/90000,control:trackID=2

关键属性:

text
a=x-ZMSSTimeShiftLift:0 // 时移能力为 0(可能不支持时移)
a=x-ZMSSCCStartTime:20251104T034012 // 节目开始时间
a=slicetime:1800 // 切片时长 1800 秒(30分钟)
SETUP:成功,选择 UDP 传输,分配客户端端口,服务器确认。

PLAY:发送 Range: clock=20260317T004643Z-,服务器返回 455 Method Not Valid in this State。

从日志中提取的关键错误信息如下:

RTSP 错误代码 455

错误描述:Method Not Valid in this State(方法在当前状态下无效)

发生位置:每次 PLAY 请求后,服务器返回该错误。

示例日志行:

text
09:03:20 ERROR [Worker 0] RTSP: Server returned error code 455
09:03:20 DEBUG [Worker 0] RTSP: Received complete header:
RTSP/1.0 455 Method Not Valid in this State
Server: ZMSS_ChinaTelcom2.2
CSeq: 10
Session:
重定向过程成功但最终播放失败

客户端依次经历了三次重定向(从 125..x → 1251.x → 125.8.x → 125..x 或 125.x),最终连接到时移服务器(ZMSS_ChinaTelcom2.2)。

SETUP 阶段成功建立 UDP 传输通道,但 PLAY 请求携带的 Range: clock=20260317T004643Z- 时移参数被服务器拒绝。

可能的原因

请求的时移时间范围无效(例如超出可回溯时长)。

服务器不支持基于 clock 的 Range 参数,或该频道未开启时移功能。

会话状态异常(SETUP 成功但 PLAY 时状态不匹配)。

客户端行为

在收到 455 错误后,客户端自动清理会话并重试,但连续四次均以相同错误失败(对应四个不同端口号:53348~53351)。

总结:核心报错是 RTSP 455 Method Not Valid in this State,表明服务器拒绝执行时移播放请求。需要检查时移参数格式、频道时移权限或服务器端配置。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions