代码拉取完成,页面将自动刷新
同步操作将从 夏楚/ZLMediaKit 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
RTSP
rtp over udp
rtp over tcp
rtp over http
rtp组播
四种RTP传输方式rtp over udp
rtp over tcp
方式)RTMP
HLS
HTTP[S]
目录索引生成
,文件下载
,表单提交请求
文件下载器(支持断点续传)
,接口请求器
,文件上传器
GB28181
点播
其他
转协议:
功能/编码格式 | H264 | H265 | AAC | other |
---|---|---|---|---|
RTSP[S] --> RTMP/HTTP[S]-FLV/FLV | Y | N | Y | N |
RTMP --> RTSP[S] | Y | N | Y | N |
RTSP[S] --> HLS | Y | Y | Y | N |
RTMP --> HLS | Y | N | Y | N |
RTSP[S] --> MP4 | Y | Y | Y | N |
RTMP --> MP4 | Y | N | Y | N |
MP4 --> RTSP[S] | Y | N | Y | N |
MP4 --> RTMP | Y | N | Y | N |
流生成:
功能/编码格式 | H264 | H265 | AAC | other |
---|---|---|---|---|
RTSP[S]推流 | Y | Y | Y | Y |
RTSP拉流代理 | Y | Y | Y | Y |
RTMP推流 | Y | Y | Y | Y |
RTMP拉流代理 | Y | Y | Y | Y |
RTP传输方式:
功能/RTP传输方式 | tcp | udp | http | udp_multicast |
---|---|---|---|---|
RTSP[S] Play Server | Y | Y | Y | Y |
RTSP[S] Push Server | Y | Y | N | N |
RTSP Player | Y | Y | N | Y |
RTSP Pusher | Y | Y | N | N |
支持的服务器类型列表
服务类型 | Y/N |
---|---|
RTSP[S] Play Server | Y |
RTSP[S] Push Server | Y |
RTMP | Y |
HTTP[S]/WebSocket[S] | Y |
支持的客户端类型
客户端类型 | Y/N |
---|---|
RTSP Player | Y |
RTSP Pusher | Y |
RTMP Player | Y |
RTMP Pusher | Y |
HTTP[S] | Y |
WebSocket[S] | Y |
请参考wiki:快速开始
你可以从Docker Hub下载已经编译好的镜像并启动它:
docker run -id -p 1935:1935 -p 8080:80 gemfield/zlmediakit
你要可以在Ubuntu 16.04下根据Dockerfile编译镜像:
cd docker
docker build -t zlmediakit .
作为服务器:
TcpServer::Ptr rtspSrv(new TcpServer());
TcpServer::Ptr rtmpSrv(new TcpServer());
TcpServer::Ptr httpSrv(new TcpServer());
TcpServer::Ptr httpsSrv(new TcpServer());
rtspSrv->start<RtspSession>(mINI::Instance()[Config::Rtsp::kPort]);
rtmpSrv->start<RtmpSession>(mINI::Instance()[Config::Rtmp::kPort]);
httpSrv->start<HttpSession>(mINI::Instance()[Config::Http::kPort]);
httpsSrv->start<HttpsSession>(mINI::Instance()[Config::Http::kSSLPort]);
作为播放器:
MediaPlayer::Ptr player(new MediaPlayer());
weak_ptr<MediaPlayer> weakPlayer = player;
player->setOnPlayResult([weakPlayer](const SockException &ex) {
InfoL << "OnPlayResult:" << ex.what();
auto strongPlayer = weakPlayer.lock();
if (ex || !strongPlayer) {
return;
}
auto viedoTrack = strongPlayer->getTrack(TrackVideo);
if (!viedoTrack) {
WarnL << "没有视频Track!";
return;
}
viedoTrack->addDelegate(std::make_shared<FrameWriterInterfaceHelper>([](const Frame::Ptr &frame) {
//此处解码并播放
}));
});
player->setOnShutdown([](const SockException &ex) {
ErrorL << "OnShutdown:" << ex.what();
});
//支持rtmp、rtsp
(*player)[Client::kRtpType] = Rtsp::RTP_TCP;
player->play("rtsp://admin:jzan123456@192.168.0.122/");
作为代理服务器:
//support rtmp and rtsp url
//just support H264+AAC
auto urlList = {"rtmp://live.hkstv.hk.lxdns.com/live/hks",
"rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov"};
map<string , PlayerProxy::Ptr> proxyMap;
int i=0;
for(auto url : urlList){
//PlayerProxy构造函数前两个参数分别为应用名(app),流id(streamId)
//比如说应用为live,流id为0,那么直播地址为:
//http://127.0.0.1/live/0/hls.m3u8
//rtsp://127.0.0.1/live/0
//rtmp://127.0.0.1/live/0
//录像地址为:
//http://127.0.0.1/record/live/0/2017-04-11/11-09-38.mp4
//rtsp://127.0.0.1/record/live/0/2017-04-11/11-09-38.mp4
//rtmp://127.0.0.1/record/live/0/2017-04-11/11-09-38.mp4
PlayerProxy::Ptr player(new PlayerProxy("live",to_string(i++).data()));
player->play(url);
proxyMap.emplace(string(url),player);
}
作为推流客户端器:
PlayerProxy::Ptr player(new PlayerProxy("app","stream"));
//拉一个流,生成一个RtmpMediaSource,源的名称是"app/stream"
//你也可以以其他方式生成RtmpMediaSource,比如说MP4文件(请研读MediaReader代码)
player->play("rtmp://live.hkstv.hk.lxdns.com/live/hks");
RtmpPusher::Ptr pusher;
//监听RtmpMediaSource注册事件,在PlayerProxy播放成功后触发。
NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastRtmpSrcRegisted,
[&pusher](BroadcastRtmpSrcRegistedArgs){
//媒体源"app/stream"已经注册,这时方可新建一个RtmpPusher对象并绑定该媒体源
const_cast<RtmpPusher::Ptr &>(pusher).reset(new RtmpPusher(app,stream));
//推流地址,请改成你自己的服务器。
//这个范例地址(也是基于mediakit)是可用的,但是带宽只有1mb,访问可能很卡顿。
pusher->publish("rtmp://jizan.iok.la/live/test");
});
本项目自有代码使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项项目及开发者无关,请自行承担法律风险。
如果要对项目有相关疑问,建议您这么做:
感谢以下各位对本项目包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后:
老陈 Gemfield 南冠彤 凹凸慢 chenxiaolei 史前小虫 清涩绿茶 3503207480 DroidChow 阿塞 火宣 γ瑞γミ linkingvision 茄子 好心情
欢迎捐赠以便更好的推动项目的发展,谢谢您的支持!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。