rtsp는 현재 브라우저 보안정책 상 바로 띄울수 없다.
그래서 웹으로 rtsp 화면을 송출하려면 중간에 변환을 한 후 띄워야하는데,
그 중 찾은 방법이 https://github.com/mpromonet/webrtc-streamer의 golang으로 rtsp를 webRTC로 변환하여 gin 프레임워크로 웹서버를 실행해 송출하는 방법이다.
1. Go 1.18 설치
- environment : ubuntu 20.04.4 LTS
1.1. go 1.18 패키지 다운로드
$ wget https://golang.org/dl/go1.18.linux-amd64.tar.gz
1.2. 압축 해제
$ sudo tar -xvf go1.18.linux-amd64.tar.gz
1.3. 디렉토리 및 파일 이동
$ sudo mv go /usr/local
1.4. 환경변수 등록
$ sudo vi ~/.profile
# GOROOT - Go 패키지 경로
export GOROOT=/usr/local/go
# GOPATH - Go 워크스페이스
export GOPATH=$HOME/go-workspace
# PATH 설정
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
:wq
# .profile 파일 적용
$ source ~/.profile
1.5. go 버전 확인
$ go version
> go version go1.18 linux/amd64
2. 실행
2.1. git clone
$ git clone https://github.com/deepch/RTSPtoWebRTC
$ cd RTSPtoWebRTC
2.2. rtsp 설정
config.json에서 rtsp를 설정해준다.
$ vi config.json
{
"server": {
"http_port": ":8083",
"ice_servers": ["stun:stun.l.google.com:19302"]
},
"streams": {
"H264_AAC": {
"on_demand": false,
"disable_audio": true,
"url": "rtsp://id:pw@rtsp_address" // 이 부분 설정
}
}
}
2.3. 실행
첫 실행은 필요한 모듈들을 설치한 후에 실행된다.
$ GO111MODULE=on go run *.go
// or
$ go run *.go
localhost:8083으로 접속
실행 결과
다른 방법들
- rtsp ⇒ webRTC (nodejs version)
- rtsp ⇒ ffmpeg
- https://www.npmjs.com/package/node-rtsp-stream
- https://www.wowza.com/
- ffmpeg는 이미지를 계속 갱신하여 비디오처럼 보이게하는건데 느리기도 느리고 무엇보다 ml5js에서 읽어서 스켈레톤을 그리고 동작 인식이 불가능했다.
- rtsp ⇒ obs studio로 가상 카메라 띄우기
- https://github.com/ml5js/ml5-library/issues/833
- rtsp를 읽어오지만 가상 카메라여서 웹캠처럼 로컬에서만 비디오를 읽어올 수 있고 외부에서 접속할 시에는 비디오가 보이지 않는다.
- rtsp ⇒ hls
- rtsp를 웹으로 띄우는 방법 중 하나인 hls는 비디오가 .ts 형태로 ml5js에서 비디오를 읽어올 수 없었다.