如何修改Gin代码实现URL参数切换RTSP转WebRTC摄像头
修改方案:将路径参数切换摄像头改为查询参数
以下是针对需求的具体代码修改步骤:
1. 更新路由配置
在serveHTTP函数中,将播放器页面的路由从路径参数形式改为无参数形式:
// 原代码 router.GET("/stream/player/:uuid", HTTPAPIServerStreamPlayer) // 修改后 router.GET("/stream/player", HTTPAPIServerStreamPlayer)
2. 调整首页重定向逻辑
修改HTTPAPIServerIndex函数中的重定向URL,改用查询参数传递默认摄像头ID:
// 原代码 c.Redirect(http.StatusMovedPermanently, "stream/player/"+all[0]) // 修改后 c.Redirect(http.StatusMovedPermanently, "stream/player?camera="+all[0])
3. 修改播放器页面的参数获取逻辑
在HTTPAPIServerStreamPlayer函数中,从URL查询参数中获取摄像头ID,并处理未传参的默认情况:
// 修改后的HTTPAPIServerStreamPlayer函数 func HTTPAPIServerStreamPlayer(c *gin.Context) { _, all := Config.list() sort.Strings(all) // 从查询参数获取camera值,为空则默认取第一个摄像头 cameraID := c.Query("camera") if cameraID == "" && len(all) > 0 { cameraID = all[0] } c.HTML(http.StatusOK, "player.tmpl", gin.H{ "port": Config.Server.HTTPPort, "suuid": cameraID, // 保持模板变量名不变,无需修改前端模板 "suuidMap": all, "version": time.Now().String(), }) }
说明
- 上述修改保持了前端模板
player.tmpl的变量名suuid不变,因此无需修改前端代码即可适配新的参数传递方式。 - 原有接口如
/stream/codec/:uuid、/stream/receiver/:uuid无需修改,因为模板中使用的suuid变量已正确获取摄像头ID,可直接用于路径参数或表单参数传递。
内容的提问来源于stack exchange,提问作者SHILD UNIQE
相关产品推荐
相关产品推荐

