]> git.feebdaed.xyz Git - gomehub.git/commitdiff
testing on cloud
authorseantywork <seantywork@gmail.com>
Thu, 20 Jun 2024 01:30:06 +0000 (10:30 +0900)
committerseantywork <seantywork@gmail.com>
Thu, 20 Jun 2024 01:30:06 +0000 (10:30 +0900)
config.yaml
config.yaml.run [new file with mode: 0644]
ctl/config.go
ctl/ctl.go
main.go
pkg/stream/stream_cctv.go
pkg/stream/stream_cctv_local.go
pkg/stream/stream_peers.go
pkg/stream/stream_peers_signal.go
public/js/cctv.js

index 8a46238552c8b40ca9897361ba31e8532a1eddf1..6dbebad2d10ce56db630c45258f88449ad26652b 100644 (file)
@@ -1,7 +1,7 @@
 debug: true
 externalUrl: "localhost"
 serveAddr: "0.0.0.0"
-servePort: "8000"
+servePort: 8000
 maxFileSize: 838860800
 stream:
   turnServerAddr: "stun:stun.l.google.com:19302"
@@ -10,7 +10,9 @@ stream:
   extAllowList:
     - "mp4"
   udpBufferByteSize: 300000 
-  signalPort: "8002"
-  rtpReceivePort: "8004"
+  signalPort: 8002
+  signalPortExternal: 8002
+  rtpReceivePort: 8004
+  rtpReceivePortExternal: 8004
 utils:
   useCompress: false
diff --git a/config.yaml.run b/config.yaml.run
new file mode 100644 (file)
index 0000000..b6e1512
--- /dev/null
@@ -0,0 +1,18 @@
+debug: false
+externalUrl: "webrtc.feebdaed.xyz"
+serveAddr: "0.0.0.0"
+servePort: 8000
+maxFileSize: 838860800
+stream:
+  turnServerAddr: "stun:stun.l.google.com:19302"
+  rtcpPLIInterval: 3
+  uploadDest: "./upload/"
+  extAllowList:
+    - "mp4"
+  udpBufferByteSize: 300000 
+  signalPort: 8002
+  signalPortExternal: 8022
+  rtpReceivePort: 8004
+  rtpReceivePortExternal: 8024
+utils:
+  useCompress: false
index e9bb33090dd1233ceb0f8d07f0d0252f71ad895c..e1037093c05fb9ad56c4078d18a9a62750659e05 100644 (file)
@@ -10,16 +10,18 @@ type SOLIAGAIN_CONFIG struct {
        Debug       bool   `yaml:"debug"`
        ExternalUrl string `yaml:"externalUrl"`
        ServeAddr   string `yaml:"serveAddr"`
-       ServePort   string `yaml:"servePort"`
+       ServePort   int    `yaml:"servePort"`
        MaxFileSize int64  `yaml:"maxFileSize"`
        Stream      struct {
-               TurnServerAddr    string   `yaml:"turnServerAddr"`
-               RtcpPLIInterval   int      `yaml:"rtcpPLIInterval"`
-               UploadDest        string   `yaml:"uploadDest"`
-               ExtAllowList      []string `yaml:"extAllowList"`
-               UdpBufferByteSize int      `yaml:"udpBufferByteSize"`
-               SignalPort        string   `yaml:"signalPort"`
-               RtpReceivePort    string   `yaml:"rtpReceivePort"`
+               TurnServerAddr         string   `yaml:"turnServerAddr"`
+               RtcpPLIInterval        int      `yaml:"rtcpPLIInterval"`
+               UploadDest             string   `yaml:"uploadDest"`
+               ExtAllowList           []string `yaml:"extAllowList"`
+               UdpBufferByteSize      int      `yaml:"udpBufferByteSize"`
+               SignalPort             int      `yaml:"signalPort"`
+               SignalPortExternal     int      `yaml:"signalPortExternal"`
+               RtpReceivePort         int      `yaml:"rtpReceivePort"`
+               RtpReceivePortExternal int      `yaml:"rtpReceivePortExternal"`
        } `yaml:"stream"`
        Utils struct {
                UseCompress bool `yaml:"useCompress"`
index 16ac6620fb8afffa6b84d0161a705e21209e4c67..2480b963fd245cfd5bc2f1e042810fa6b216d8d2 100644 (file)
@@ -1,6 +1,7 @@
 package controller
 
 import (
+       "fmt"
        "time"
 
        "github.com/gin-gonic/contrib/sessions"
@@ -42,10 +43,12 @@ func ConfigureRuntime(e *gin.Engine) {
        pkgstream.UDP_BUFFER_BYTE_SIZE = CONF.Stream.UdpBufferByteSize
 
        pkgstream.SIGNAL_ADDR = CONF.ServeAddr
-       pkgstream.SIGNAL_PORT = CONF.Stream.SignalPort
+       pkgstream.SIGNAL_PORT = fmt.Sprintf("%d", CONF.Stream.SignalPort)
+       pkgstream.SIGNAL_PORT_EXTERNAL = fmt.Sprintf("%d", CONF.Stream.SignalPortExternal)
 
        pkgstream.RTP_RECEIVE_ADDR = CONF.ServeAddr
-       pkgstream.RTP_RECEIVE_PORT = CONF.Stream.RtpReceivePort
+       pkgstream.RTP_RECEIVE_PORT = fmt.Sprintf("%d", CONF.Stream.RtpReceivePort)
+       pkgstream.RTP_RECEIVE_PORT_EXTERNAL = fmt.Sprintf("%d", CONF.Stream.RtpReceivePortExternal)
 
        pkgutils.USE_COMPRESS = CONF.Utils.UseCompress
 
@@ -75,6 +78,8 @@ func RegisterRoutes(e *gin.Engine) {
 
        e.GET("/cctv", pkgstream.GetCCTVIndex)
 
+       e.GET("/api/cctv/turn/address", pkgstream.GetCCTVTurnServeAddr)
+
        e.POST("/api/cctv/create", pkgstream.PostCCTVCreate)
 
        e.POST("/api/cctv/delete", pkgstream.PostCCTVDelete)
diff --git a/main.go b/main.go
index e22445bd09ad63a525d13c18d9bc921e743360a6..59332af5bab02d69b6009b86e1a41d25d933642a 100644 (file)
--- a/main.go
+++ b/main.go
@@ -19,6 +19,6 @@ func main() {
 
        server := solictl.CreateServer()
 
-       server.Run(solictl.CONF.ServeAddr + ":" + solictl.CONF.ServePort)
+       server.Run(solictl.CONF.ServeAddr + ":" + fmt.Sprintf("%d", solictl.CONF.ServePort))
 
 }
index e2c0e61357c4f8d4c919d31e2f760e571ede0d33..9109a13586e4292bfa4f3005bfd55e3a875df978 100644 (file)
@@ -8,6 +8,7 @@ import (
        "io"
        "log"
        "net"
+       "net/http"
        "time"
 
        "github.com/gin-gonic/gin"
@@ -23,6 +24,8 @@ var RTP_RECEIVE_ADDR string
 
 var RTP_RECEIVE_PORT string
 
+var RTP_RECEIVE_PORT_EXTERNAL string
+
 var RTP_CONSUMERS = make(map[string]RTMPWebRTCPeer)
 
 const RTP_HEADER_LENGTH_FIELD = 4
@@ -48,15 +51,37 @@ func GetCCTVIndex(c *gin.Context) {
 
 }
 
+func GetCCTVTurnServeAddr(c *gin.Context) {
+
+       c.JSON(http.StatusOK, SERVER_RE{Status: "success", Reply: TURN_SERVER_ADDR})
+
+}
+
 func PostCCTVCreate(c *gin.Context) {
 
        log.Println("Incoming HTTP Request")
 
-       peerConnection, err := webrtc.NewPeerConnection(webrtc.Configuration{})
+       peerConnection, err := webrtc.NewPeerConnection(webrtc.Configuration{
+               //              ICEServers: []webrtc.ICEServer{
+               //                      {
+               //                              URLs: []string{TURN_SERVER_ADDR},
+               //                      },
+               //              },
+       })
        if err != nil {
                panic(err)
        }
+       /*
+               peerConnection.OnICEConnectionStateChange(func(connectionState webrtc.ICEConnectionState) {
+                       fmt.Printf("Connection State has changed %s \n", connectionState.String())
 
+                       if connectionState == webrtc.ICEConnectionStateFailed {
+                               if closeErr := peerConnection.Close(); closeErr != nil {
+                                       panic(closeErr)
+                               }
+                       }
+               })
+       */
        videoTrack, err := webrtc.NewTrackLocalStaticSample(webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeH264}, "video", "pion")
        if err != nil {
                panic(err)
index 3ecd71274570a29ed3115e55b279d9c12481fdb0..e79fbb8aa79e793038b6a43c6b0dedf3f8f57cfd 100644 (file)
@@ -23,12 +23,6 @@ func GetCCTVLocalIndex(c *gin.Context) {
        })
 }
 
-func GetCCTVLocalTurnServeAddr(c *gin.Context) {
-
-       c.JSON(http.StatusOK, SERVER_RE{Status: "success", Reply: TURN_SERVER_ADDR})
-
-}
-
 func PostCCTVLocalOffer(c *gin.Context) {
 
        if RECV_STARTED == 1 {
index cf6460371e364485e65b6ef5e5db7ac456abd544..f75889861fb6aeb7ed44ca48e271f27c24f701a0 100644 (file)
@@ -18,7 +18,7 @@ func GetPeersIndex(c *gin.Context) {
 
 func GetPeersSignalAddress(c *gin.Context) {
 
-       s_addr := EXTERNAL_URL + ":" + SIGNAL_PORT + PEERS_SIGNAL_PATH
+       s_addr := EXTERNAL_URL + ":" + SIGNAL_PORT_EXTERNAL + PEERS_SIGNAL_PATH
 
        c.JSON(http.StatusOK, SERVER_RE{Status: "success", Reply: s_addr})
 
index da13b66b9d4e14e3bda95ca58a4de3fba8552fff..415c95c7818fa8d42b71f5c130546a2a158a83a8 100644 (file)
@@ -17,6 +17,8 @@ var SIGNAL_ADDR string
 
 var SIGNAL_PORT string
 
+var SIGNAL_PORT_EXTERNAL string
+
 var USER_SIGNAL = make(map[string]*websocket.Conn)
 
 var UPGRADER = websocket.Upgrader{}
index e4d486fdd2cdab2fa7932fe15baf1fc56d9fb144..e070d17d1793021b6cdaa4950bf68b60206ef20b 100644 (file)
@@ -1,11 +1,66 @@
 pc = {}
 
+TURN_SERVER_ADDRESS = ""
+
+
+CLIENT_REQ = {
+    "data":""
+}
+
 
 
 async function initCCTV(){
 
-    pc = new RTCPeerConnection()
+    let result = await axios.get("/api/cctv/turn/address")
+
+    if(result.data.status != "success"){
+
+        alert("failed to get turn server address")
+
+        return
+    }
+
+    TURN_SERVER_ADDRESS = result.data.reply
+
+    pc = new RTCPeerConnection({
+        iceServers: [
+            {
+                urls: TURN_SERVER_ADDRESS
+            }
+        ]
+    })
+
+    pc.oniceconnectionstatechange = function(e) {console.log(pc.iceConnectionState)}
+
+    pc.onicecandidate = async function(event){
+
+        if (event.candidate === null){
+
+
+            let req = {
+                data: JSON.stringify(pc.localDescription)
+            }
+
+            let resp = await axios.post("/api/cctv/create", req)
+
+            if (result.data.status != "success") {
+
+                alert("failed to start cctv offer")
+            }
+            try {
+                console.log(resp.data)
+                pc.setRemoteDescription(new RTCSessionDescription(resp.data))
+            } catch (e){
+                alert(e)
+            }
+
+        }
+
+
+    }
+
     pc.ontrack = function (event) {
+
         var el = document.createElement(event.track.kind)
         el.srcObject = event.streams[0]
         el.autoplay = true
@@ -21,16 +76,6 @@ async function initCCTV(){
 
     pc.setLocalDescription(offer)
 
-    console.log(offer)
-
-    let req = {
-        data: JSON.stringify(offer)
-    }
-
-    let resp = await axios.post("/api/cctv/create", req)
-
-    pc.setRemoteDescription(resp.data)
-
     console.log("init success")
 
 }
@@ -41,3 +86,5 @@ function closeCCTV(){
 
 
 }
+
+