top | item 41171620

(no title)

iod | 1 year ago

I used the demo streaming.html code linked above as-is and host it statically on Nginx alongside Janus on a cloud VPS. As far as config, there is just the one file: /etc/janus/janus.plugin.streaming.jcfg , but you can leave it blank and just use the html api¹ if you don't want to mess with that file as the API has an option:

  "permanent":true
that automatically generates/updates the config for you. You can substitute srtp (secure) for regular rtp for testing, but I prefer to use the secure variant since it goes out to a public VPS and doesn't really incur any overhead for my source devices.

¹ https://janus.conf.meetecho.com/docs/streaming#streamapi

I wrote a little helper shell code using wget, openssl, dd, jq, and jo to make it easy to talk JSON to the API, for the one-off configs I do. Here is an example of what I use which demonstrates simulcast and srtp ingestion for both h264 and vp8 video streams as well as opus audio. Just fill in the [ ]'s with your specifics. I then use ffmpeg to generate all the streams and pipe to the appropriate ports for each simulcast level and target. If you use gstreamer beware srtp key format is different.

  #!/bin/sh
  server="https://[YOUR_JANUS_SERVER_HOST]/janus"
  token(){ dd if=/dev/urandom bs=6 count=1 status=none|openssl base64;}
  post_jo(){ first="$1";shift;wget --quiet --output-document - --post-data "$(jo -- "$@")" "$server$first";}
  tx(){ post_jo "$@" transaction="$(token)";}
  data_id(){ jq ".data.id//(null|halt_error(1))";}
  message()( set -e
    id="$(tx / janus=create|data_id)" # create janus session and store id
    hn="$(tx "/$id" janus=attach plugin=janus.plugin.streaming|data_id)" # create plugin session and store id
    tx "/$id/$hn" janus=message body="$(jo -- "$@")"
    tx "/$id" janus=destroy >/dev/null
  )

  # example usage:

  # list all streams
  message request=list|jq .plugindata.data.list

  # remove stream with id 666
  message request=destroy id=666 secret=adminpwd permanent=true|jq 

  # create new stream
  message request=create id=666 secret=adminpwd permanent=true name=[YOUR_STREAM_NAME] type=rtp media=["$(
    jo type=video mid=v1 codec=h264 pt=96 simulcast=true svc=false port=5010 port2=5020 port3=5030 \
      fmtp=level-asymmetry-allowed=1\;packetization-mode=1\;profile-level-id=42c01f
    )","$(
    jo type=video mid=v2 codec=vp8 pt=96 simulcast=true svc=false port=5012 port2=5022 port3=5032
    )","$(
    jo type=audio mid=a codec=opus pt=97 port=5000
    )"] srtpsuite=80 srtpcrypto=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz|jq # your srtp token needs to match your source

  # show new stream info to verify configuration
  message request=info id=666 secret=adminpwd|jq

  # on streaming source device
  ffmpeg [YOUR_INPUT_CONFIG HERE] -f rtp -srtp_out_suite SRTP_AES128_CM_HMAC_SHA1_80 -srtp_out_params zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz srtp://[YOUR_JANUS_SERVER_HOST]/:[PORT]

  # for gstreamer, showing alternative key format
  gst-launch-1.0 [YOUR_INPUT_CONFIG HERE] ! rtpav1pay ! srtpenc key=cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3cf3 ! udpsink host=[YOUR_JANUS_SERVER_HOST] port=[PORT]

discuss

order

No comments yet.