mirror of
https://github.com/cnotch/ipchub.git
synced 2025-09-26 19:41:18 +08:00
Change ws URL segment "ws" to "streams"
This commit is contained in:
@@ -8,12 +8,12 @@
|
|||||||
<body>
|
<body>
|
||||||
<div id="sourcesNode"></div>
|
<div id="sourcesNode"></div>
|
||||||
<div>
|
<div>
|
||||||
<input id="stream_url" value= "ws://localhost:1554/ws/test/live1" size="36">
|
<input id="stream_url" value= "ws://localhost:1554/streams/test/live1" size="36">
|
||||||
<button id="load_url">load</button>
|
<button id="load_url">load</button>
|
||||||
<button id="unload_url">unload</button>
|
<button id="unload_url">unload</button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p style="color:#808080">Enter your ws link to the stream, for example: "ws://localhost:1554/ws/test/live1"</p>
|
<p style="color:#808080">Enter your ws link to the stream, for example: "ws://localhost:1554/streams/test/live1"</p>
|
||||||
</div>
|
</div>
|
||||||
<video id="test_video" controls autoplay>
|
<video id="test_video" controls autoplay>
|
||||||
<source src="rtsp://placehold" type="application/x-rtsp">
|
<source src="rtsp://placehold" type="application/x-rtsp">
|
||||||
|
@@ -235,7 +235,7 @@ To activate key, please, use the activation application that is placed:
|
|||||||
}
|
}
|
||||||
|
|
||||||
var playerOptions = {
|
var playerOptions = {
|
||||||
socket: "ws://localhost:8088/ws/",
|
socket: "ws://localhost:8088/streams/",
|
||||||
redirectNativeMediaErrors : true,
|
redirectNativeMediaErrors : true,
|
||||||
bufferDuration: 30,
|
bufferDuration: 30,
|
||||||
errorHandler: errHandler,
|
errorHandler: errHandler,
|
||||||
@@ -354,7 +354,7 @@ To activate key, please, use the activation application that is placed:
|
|||||||
html5Player.src = newSource;
|
html5Player.src = newSource;
|
||||||
// 修改原例子 begn =======>
|
// 修改原例子 begn =======>
|
||||||
// 我们直接使用ws来决定播放的路径,
|
// 我们直接使用ws来决定播放的路径,
|
||||||
// 比如:ws://192.168.1.100:1554/ws/test/live1
|
// 比如:ws://192.168.1.100:1554/streams/test/live1
|
||||||
// 表示要播放服务器上路径为/test/live1
|
// 表示要播放服务器上路径为/test/live1
|
||||||
// 如果播放失败,可能是以下情况(1和2发生在升级websocket阶段,3发生在rtsp通讯阶段)
|
// 如果播放失败,可能是以下情况(1和2发生在升级websocket阶段,3发生在rtsp通讯阶段)
|
||||||
// 1. 如果服务器rtsp的验证模式不为NONE,则需要登录后获取到token才能访问;像这样ws://.../test/live1?token=...
|
// 1. 如果服务器rtsp的验证模式不为NONE,则需要登录后获取到token才能访问;像这样ws://.../test/live1?token=...
|
||||||
@@ -363,12 +363,13 @@ To activate key, please, use the activation application that is placed:
|
|||||||
//
|
//
|
||||||
// 如果不是使用例子,我们可以这样
|
// 如果不是使用例子,我们可以这样
|
||||||
// html5Player.src = "rtsp://placehold"
|
// html5Player.src = "rtsp://placehold"
|
||||||
// playerOptions.socket ="ws://localhost:1554/ws/test/live1"
|
// playerOptions.socket ="ws://localhost:1554/streams/test/live1"
|
||||||
// 知道ws主机后,实际上只需要提供流媒体path即可,这也更好
|
// 知道ws主机后,实际上只需要提供流媒体path即可,这也更好
|
||||||
//
|
//
|
||||||
let rtspUrl = new URL(newSource)
|
let rtspUrl = new URL(newSource)
|
||||||
rtspUrl.protocol = "ws"
|
rtspUrl.protocol = "ws"
|
||||||
rtspUrl.pathname = "/ws"+rtspUrl.pathname
|
rtspUrl.pathname = "/streams"+rtspUrl.pathname
|
||||||
|
|
||||||
playerOptions.socket = rtspUrl.href
|
playerOptions.socket = rtspUrl.href
|
||||||
// <========= end
|
// <========= end
|
||||||
|
|
||||||
|
@@ -215,7 +215,7 @@ http://.../api/v1/streams/rtsp/room/door?token=your_access_token
|
|||||||
+ http-flv
|
+ http-flv
|
||||||
http://.../streams/room/door.flv?token=your_access_token
|
http://.../streams/room/door.flv?token=your_access_token
|
||||||
+ websocket-flv
|
+ websocket-flv
|
||||||
ws://.../ws/room/door.flv?token=your_access_token
|
ws://.../streams/room/door.flv?token=your_access_token
|
||||||
+ http-flv
|
+ http-flv
|
||||||
http://.../steams/room/door.m3u8?token=your_access_token
|
http://.../steams/room/door.m3u8?token=your_access_token
|
||||||
|
|
||||||
|
@@ -60,7 +60,7 @@ rtsp://localhost:1554/hr/door/video1 请求在服务器内自动变成去拉取r
|
|||||||
### 3.3 使用websocket-rtsp
|
### 3.3 使用websocket-rtsp
|
||||||
打开demo地址:http://localhost:1554/demos/rtsp
|
打开demo地址:http://localhost:1554/demos/rtsp
|
||||||
|
|
||||||
输入:ws://localhost:1554/ws/group/door 即可访问。
|
输入:ws://localhost:1554/streams/group/door 即可访问。
|
||||||
|
|
||||||
### 3.4 使用http-flv访问
|
### 3.4 使用http-flv访问
|
||||||
打开demo地址:http://localhost:1554/demos/flv
|
打开demo地址:http://localhost:1554/demos/flv
|
||||||
@@ -72,19 +72,19 @@ rtsp://localhost:1554/hr/door/video1 请求在服务器内自动变成去拉取r
|
|||||||
### 3.5 使用 websocket-flv访问
|
### 3.5 使用 websocket-flv访问
|
||||||
打开demo地址:http://localhost:1554/demos/flv
|
打开demo地址:http://localhost:1554/demos/flv
|
||||||
|
|
||||||
输入:ws://locaolhost:1554/ws/group/door.flv 即可访问。
|
输入:ws://locaolhost:1554/streams/group/door.flv 即可访问。
|
||||||
|
|
||||||
### 3.6 使用 http-hls访问
|
### 3.6 使用 http-hls访问
|
||||||
由于 iOS的Safari不支持上述任何http访问模式,请使用 http-hls
|
由于 iOS的Safari不支持上述任何http访问模式,请使用 http-hls
|
||||||
|
|
||||||
在浏览器输入: http://localhost:1554/streams/group/door.m3m8 即可访问。
|
在浏览器输入: http://localhost:1554/streams/group/door.m3u8 即可访问。
|
||||||
|
|
||||||
**注意:** 由于http-hls的段文件默认被放在内存中,占用大量的内存;如系统内存不足,请配置存储路径。
|
**注意:** 由于http-hls的段文件默认被放在内存中,占用大量的内存;如系统内存不足,请配置存储路径。
|
||||||
|
|
||||||
### 3.7 访问 h265 flv
|
### 3.7 访问 h265 flv
|
||||||
打开demo地址:http://localhost:1554/demos/flv265
|
打开demo地址:http://localhost:1554/demos/flv265
|
||||||
|
|
||||||
输入:http://locaolhost:1554/streams/group/door.flv 即可访问。
|
输入:http://locaolhost:1554/streams/group/door.flv 或 ws://locaolhost:1554/streams/group/door.flv即可访问。
|
||||||
|
|
||||||
## 4. 需要授权的情况
|
## 4. 需要授权的情况
|
||||||
除rtsp外,其他使用token进行访问。
|
除rtsp外,其他使用token进行访问。
|
||||||
|
@@ -7,6 +7,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/cnotch/ipchub/config"
|
"github.com/cnotch/ipchub/config"
|
||||||
"github.com/cnotch/ipchub/network/websocket"
|
"github.com/cnotch/ipchub/network/websocket"
|
||||||
@@ -20,7 +21,7 @@ import (
|
|||||||
|
|
||||||
// 初始化流式访问
|
// 初始化流式访问
|
||||||
func (s *Service) initHTTPStreams(mux *http.ServeMux) {
|
func (s *Service) initHTTPStreams(mux *http.ServeMux) {
|
||||||
mux.Handle("/ws/", apirouter.WrapHandler(http.HandlerFunc(s.onWebSocketRequest), apirouter.PreInterceptor(s.streamInterceptor)))
|
// mux.Handle("/ws/", apirouter.WrapHandler(http.HandlerFunc(s.onWebSocketRequest), apirouter.PreInterceptor(s.streamInterceptor)))
|
||||||
mux.Handle("/streams/", apirouter.WrapHandler(http.HandlerFunc(s.onStreamsRequest), apirouter.PreInterceptor(s.streamInterceptor)))
|
mux.Handle("/streams/", apirouter.WrapHandler(http.HandlerFunc(s.onStreamsRequest), apirouter.PreInterceptor(s.streamInterceptor)))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,8 +55,16 @@ func (s *Service) onWebSocketRequest(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// streams 请求处理(flv,mu38,ts)
|
// streams 请求处理(websocket connect,flv,mu38,ts)
|
||||||
func (s *Service) onStreamsRequest(w http.ResponseWriter, r *http.Request) {
|
func (s *Service) onStreamsRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// 检测 websocket 请求
|
||||||
|
if r.Method == "GET" &&
|
||||||
|
strings.ToLower(r.Header.Get("Connection")) == "upgrade" &&
|
||||||
|
strings.ToLower(r.Header.Get("Upgrade")) == "websocket" {
|
||||||
|
s.onWebSocketRequest(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 获取文件后缀和流路径
|
// 获取文件后缀和流路径
|
||||||
streamPath, ext := extractStreamPathAndExt(r.URL.Path)
|
streamPath, ext := extractStreamPathAndExt(r.URL.Path)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user