环境
- ubuntu 18.04 64bit
- ZLMediaKit 20210924
- ffmpeg 3.4.8
流媒体源
当主程序启动后,客户端启动推流(这里以 rtsp
方式为例,rtmp
和 rtp
也类似)
ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
这时,在 MediaServer
主程序的输出中,可以看到类似下图的信息
在 ZLMediaKit
中,有个叫做流媒体源(MediaSource
)的数据对象,它可以被用于直播转发、推流转发等功能,目前支持5种类型的流媒体源,分别是 RtspMediaSource
、RtmpMediaSource
、HlsMediaSource
、TSMediaSource
和 FMP4MediaSource
在 ffmpeg
推流成功后,对应到播放地址分别是
rtsp://192.168.1.140/live/test
rtmp://192.168.1.140/live/test
http://192.168.1.140/live/test/hls.m3u8
http://192.168.1.140/live/test.live.ts
http://192.168.1.140/live/test.live.mp4
这些 url
,使用播放器 ffplay
是可以直接播放的
URL的组成
以 rtsp://somedomain.com:554/live/test?token=abcdefg&field=value
为例,该 url
分为以下几个部分
- 协议(
scheam
) :rtsp
协议 - 虚拟主机(
vhost
) :somedomain.com
,该字段既可以是域名也可以是ip
地址,如果是ip
的话,则对应的虚拟主机为__defaultVhost__
- 服务端口号(
port
) : 554,如果不指定端口号,则使用协议默认端口号。rtsp
默认端口554,rtmp
默认端口1935,http
默认端口80 - 应用名(
app
) : 此例是live
- 流
ID
(streamid
) : 此例是test
- 参数(
args
) :token=abcdefg&field=value
,格式跟http
一致,url
参数主要用于播放、推流鉴权,在触发hook api
时,会把这些参数提交给第三方业务服务器
点播
ZLMediaKit
的点播一般通过 mp4
文件来实现,推荐大家使用 http mp4
点播,这样是最简单,服务器也无需解复用 mp4
文件,当然 ZLMediaKit
目前也支持 rtsp
、rtmp
、http-flv
、websocket-flv
的 mp4
点播, 对应的 url
跟直播 url
类似
要在 ZLMediaKit
中实现点播,只需要将 mp4
文件放到 www/record
下,默认情况下,应用名是 record
,可以在 config.ini
中修改
那么,点播 URL
就是
rtsp://192.168.1.140/record/test.mp4
rtmp://192.168.1.140/record/test.mp4
http://192.168.1.140/record/test.mp4 (通用http点播,推荐)