Sergey Krashevich 95de3a1f3e Update openapi.yaml 1 year ago
..
README.md b9b7bb5489 Adds README for API 1 year ago
openapi.yaml 95de3a1f3e Update openapi.yaml 1 year ago

README.md

API

Fill free to make any API design proposals.

HTTP API

Interactive OpenAPI.

www/stream.html - universal viewer with support params in URL:

  • multiple streams on page src=camera1&src=camera2...
  • stream technology autoselection mode=webrtc,webrtc/tcp,mse,hls,mp4,mjpeg
  • stream technology comparison src=camera1&mode=webrtc&mode=mse&mode=mp4
  • player width setting in pixels width=320px or percents width=50%

www/webrtc.html - WebRTC viewer with support two way audio and params in URL:

  • media=video+audio - simple viewer
  • media=video+audio+microphone - two way audio from camera
  • media=camera+microphone - stream from browser
  • media=display+speaker - stream from desktop

JavaScript API

  • You can write your viewer from the scratch
  • You can extend the built-in viewer - www/video-rtc.js
  • Check example - www/video-stream.js
  • Check example - https://github.com/AlexxIT/WebRTC

video-rtc.js features:

  • support technologies:
    • WebRTC over UDP or TCP
    • MSE or HLS or MP4 or MJPEG over WebSocket
  • automatic selection best technology according on:
    • codecs inside your stream
    • current browser capabilities
    • current network configuration
  • automatic stop stream while browser or page not active
  • automatic stop stream while player not inside page viewport
  • automatic reconnection

Technology selection based on priorities:

  1. Video and Audio better than just Video
  2. H265 better than H264
  3. WebRTC better than MSE, than HLS, than MJPEG

WebSocket API

Endpoint: /api/ws

Query parameters:

  • src (required) - Stream name

WebRTC

Request SDP:

{"type":"webrtc/offer","value":"v=0\r\n..."}

Response SDP:

{"type":"webrtc/answer","value":"v=0\r\n..."}

Request/response candidate:

  • empty value also allowed and optional
{"type":"webrtc/candidate","value":"candidate:3277516026 1 udp 2130706431 192.168.1.123 54321 typ host"}

MSE

Request:

  • codecs list optional
{"type":"mse","value":"avc1.640029,avc1.64002A,avc1.640033,hvc1.1.6.L153.B0,mp4a.40.2,mp4a.40.5,flac,opus"}

Response:

{"type":"mse","value":"video/mp4; codecs=\"avc1.64001F,mp4a.40.2\""}

HLS

Request:

{"type":"hls","value":"avc1.640029,avc1.64002A,avc1.640033,hvc1.1.6.L153.B0,mp4a.40.2,mp4a.40.5,flac"}

Response:

  • you MUST rewrite full HTTP path to http://192.168.1.123:1984/api/hls/playlist.m3u8
{"type":"hls","value":"#EXTM3U\n#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS=\"avc1.64001F,mp4a.40.2\"\nhls/playlist.m3u8?id=DvmHdd9w"}

MJPEG

Request/response:

{"type":"mjpeg"}