播放url规则
xiongguangjie edited this page 2024-02-04 18:19:40 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

1、url的组成部分

rtsp://somedomain.com:554/live/0?token=abcdefg&field=value为例,该url分为以下几个部分

  • 协议(scheam) : rtsp协议,默认端口554
  • 虚拟主机(vhost) : somedomain.com,该字段既可以是域名也可以是ip如果是ip则对应的虚拟主机为__defaultVhost__
  • 服务端口号(port) : 554,如果不指定端口号,则使用协议默认端口号
  • 应用名(app) : live
  • 流ID(streamid) : 0
  • 参数(args) : token=abcdefg&field=value

2、ZLMediaKit中的流媒体源

在ZLMediaKit中流媒体源是一种可以被用于直播转发、推流转发等功能的数据对象在本项目中被称作为MediaSource目前支持5种类型的流媒体源分别是RtspMediaSourceRtmpMediaSourceHlsMediaSourceTSMediaSourceFMP4MediaSource

定位一个流媒体源主要通过4个元素(我们后续称其为4元组),分别是:

  • 协议(scheam)
  • 虚拟主机(vhost)
  • 应用名(app)
  • 流ID(streamid)

RtspMediaSource支持 rtsp播放、rtsp推流、webrtc播放、webrtc推流。

RtmpMediaSource支持 rtmp推流/播放、http-flv播放、ws-flv播放。

HlsMediaSource支持 hls播放。

TSMediaSource 支持 http-ts播放、ws-ts播放。

FMP4MediaSource 支持 http-fmp4播放、ws-fmp4播放。

3、流媒体源对应的播放url

假定有一个RtspMediaSource它的4元组分别为 rtsp(RtspMediaSource固定为rtsp)somedomain.comlive0 那么播放这个流媒体源的url对应为:

  • rtsp://somedomain.com/live/0
  • rtsps://somedomain.com/live/0
  • rtsp://127.0.0.1/live/0?vhost=somedomain.com
  • rtsps://127.0.0.1/live/0?vhost=somedomain.com

如果有一个RtmpMediaSource它的4元组分别为 rtmp(RtmpMediaSource固定为rtmp)somedomain.comlive0 那么播放这个流媒体源的url对应为:

  • rtmp://somedomain.com/live/0
  • rtmps://somedomain.com/live/0
  • rtmp://127.0.0.1/live/0?vhost=somedomain.com
  • rtmps://127.0.0.1/live/0?vhost=somedomain.com

rtmp类型的流媒体源也支持http-flvwebsocket直播对应的url如下

注意: 老代码flv直播后缀为.flv,新代码才改成了.live.flv

  • http://somedomain.com/live/0.live.flv
  • https://somedomain.com/live/0.live.flv
  • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
  • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
  • ws://somedomain.com/live/0.live.flv
  • wss://somedomain.com/live/0.live.flv
  • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
  • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

当然ZLMediaKit一般会把rtsp、rtmp流媒体源互相转换也会转换成hls/http-ts/ws-ts/http-fmp4/ws-fmp4播放的url如下

  • HLS(mpegts)

    • http://somedomain.com/live/0/hls.m3u8
    • https://somedomain.com/live/0/hls.m3u8
    • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
    • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
  • HLS(fmp4)

    • http://somedomain.com/live/0/hls.fmp4.m3u8
    • https://somedomain.com/live/0/hls.fmp4.m3u8
    • http://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
    • https://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
  • HTTP-TS/WS-TS(后缀为.live.ts,目的是为了解决与hls的冲突)

    • http://somedomain.com/live/0.live.ts
    • https://somedomain.com/live/0.live.ts
    • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
    • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
    • ws://somedomain.com/live/0.live.ts
    • wss://somedomain.com/live/0.live.ts
    • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
    • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
  • HTTP-fMP4/WS-fMP4(后缀为.live.mp4,目的是为了解决与mp4点播的冲突)

    • http://somedomain.com/live/0.live.mp4
    • https://somedomain.com/live/0.live.mp4
    • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
    • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
    • ws://somedomain.com/live/0.live.mp4
    • wss://somedomain.com/live/0.live.mp4
    • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
    • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

一般而言上述url在ZLMediaKit都有效因为ZLMediaKit默认转换流媒体源。

4、点播url

ZLMediaKit的点播一般通过mp4文件来实现推荐大家使用http mp4点播这样是最简单服务器也无需解复用mp4文件当然ZLMediaKit目前也支持rtsp、rtmp、http-flv、websocket-flv的mp4点播 对应的url跟直播url类似不在赘述这里只介绍区别。

  • ZLMediaKit对点播限制应用名默认为record
  • 假如一个mp4文件放置在http根目录record文件夹(www/record)下,他的相对路径为:www/record/0.mp4,那么点播url则为:
    • rtsp://somedomain.com/record/0.mp4
    • rtmp://somedomain.com/record/0.mp4
    • http://somedomain.com/record/0.mp4(这里是通用的http文件点播服务器不用解复用文件)
    • http://somedomain.com/record/0.mp4.live.flv这里是http-flv直播不是http点播服务器需要解复用文件
    • ws://somedomain.com/record/0.mp4.live.flv
    • http://somedomain.com/record/0.mp4.live.ts这里是http-ts直播不是http点播服务器需要解复用文件
    • ws://somedomain.com/record/0.mp4.live.ts
    • http://somedomain.com/record/0.mp4.live.mp4这里是http-fmp4直播不是http点播服务器需要解复用文件
    • ws://somedomain.com/record/0.mp4.live.mp4
  • 如果开启了虚拟主机,那么点播文件需要放置在 www/somedomain.com/record/0.mp4

5、webrtc推流/播放

webrtc播放跟上述方式不太一样webrtc协议本身不定义信令交互协议用户自己去实现sdp+icecandidate交换逻辑,所以webrtc并没有一个标准的播放器需要自己使用js或native sdk去实现播放。

zlmediakit实现的webrtc sdp+icecandidate交换方式是http post方式,接口名为/index/api/webrtc, 该接口使用post content传递 offer sdp, 同时url query参数传递媒体源4元组中的app steam_id由于http协议本身支持vhost,所以不需要另外指定vhostwebrtczlmediakit中可以认为是rtsp协议的另外表现形式他们推流、播放使用的数据源都相同都是RtspMediaSource

在webrtc推流时交互webrtc sdp+icecandidate的http post接口类似为http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

在webrtc播放时交互webrtc sdp+icecandidate的http post接口类似为http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play

zlmeiakit工程自带webrtc测试播放/推流器用户启动zlmediakit后浏览器访问http://127.0.0.1/webrtc/就可以访问之。

另外zlmediakit也支持使用webrtc播放mp4文件http post接口类似为http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play

webrtc的whip与whep协议,ZLMediakit 也支持, whip(推流)的接口为 http://127.0.0.1/index/api/whip?app=live&stream=test, whep(拉流)的接口为http://127.0.0.1/index/api/whep?app=live&stream=test,其中 url query参数传递媒体源4元组中的app steam_id由于http协议本身支持vhost,所以不需要另外指定vhost

6、url参数

ZLMediaKit会识别url中问号后面的字符串为url参数其格式跟http一致其中参数vhost是ZLMediaKit内置支持的参数支持指定vhost。 url参数主要用于播放、推流鉴权在触发hook api时会把这些参数提交给第三方业务服务器