改进: discover_video_params 硬编码 mid 值遍历 (webrtc.rs:314) #11
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
位置
src/webrtc.rs:314-316严重性
🟢 低
问题描述
discover_video_params固定遍历["0", "1", "2", "3"]四个 mid 值来查找视频媒体。虽然 str0m 通常分配小整数 mid,但并非承诺行为——若未来版本或特定场景下 mid 为"4"或其他值,视频编码参数将无法被发现,导致后续write_h264_frame因video_mid/video_pt为None而静默跳过所有帧发送。建议修复
查阅 str0m 0.20 是否提供
rtc.media_ids()或类似迭代器来遍历所有媒体。如无此 API,至少应扩大范围并添加未找到时的 warning 日志:修复方案
根因:
discover_video_params硬编码遍历["0","1","2","3"]来查找 video media,但 str0m 的Mid是 SDP 协商决定的字符串标识符(如"aud"、"video"),不是数字索引。若实际 mid 不在范围内,video 帧会被静默跳过。修复:
Event::MediaAdded中直接捕获 video mid(str0m 事件提供准确的mid和kind),并加direction().is_sending()方向校验discover_video_params发现 H.264 payload typediscover_video_params移除硬编码遍历,改为幂等调用(先video_pt = None清除旧值)Event::Connected中的调用保留为兜底(幂等)改动文件:
src/webrtc.rs(2 处)提交:
1beaea8fix(webrtc): use MediaAdded event to discover video mid instead of hardcoded iteration