public class Test {
public static ZLMApi ZLM_API = Native.load("D:\\ZLMediaKit\\source\\release\\windows\\Debug\\mk_api.dll", ZLMApi.class);
public static void main(String[] args) throws InterruptedException {
MK_INI mkIni = ZLM_API.mk_ini_default();
ZLM_API.mk_ini_set_option_int(mkIni, "protocol.auto_close", 1);
ZLM_API.mk_ini_set_option_int(mkIni, "protocol.enable_fmp4", 0);
ZLM_API.mk_ini_set_option_int(mkIni, "protocol.enable_hls", 0);
ZLM_API.mk_ini_set_option_int(mkIni, "protocol.enable_ts", 0);
MK_EVENTS mkEvents = new MK_EVENTS();
mkEvents.on_mk_media_changed = (regist, sender) -> {
System.out.println("这里是流改变回调通知:" + regist);
mkEvents.on_mk_media_no_reader = sender -> {
System.out.println("这里是无人观看回调通知");
ZLM_API.mk_media_source_close(sender, 1);
mkEvents.on_mk_media_play = (url_info, invoker, sender) -> {
ZLM_API.mk_auth_invoker_do(invoker, "");
mkEvents.on_mk_media_publish = (url_info, invoker, sender) -> {
ZLM_API.mk_publish_auth_invoker_do(invoker, "", 0, 0);
ZLM_API.mk_events_listen(mkEvents);
ZLM_API.mk_env_init1(1, 1, 1, null, 0, 0, null, 0, null, null);
short http_server_port = ZLM_API.mk_http_server_start((short) 7788, 0);
short rtsp_server_port = ZLM_API.mk_rtsp_server_start((short) 554, 0);
short rtmp_server_port = ZLM_API.mk_rtmp_server_start((short) 1935, 0);
MK_PROXY_PLAYER mk_proxy = ZLM_API.mk_proxy_player_create("__defaultVhost__", "live", "test", 0, 0);
IMKProxyPlayCloseCallBack imkProxyPlayCloseCallBack = new IMKProxyPlayCloseCallBack() {
@Override
public void invoke(Pointer pUser, int err, String what, int sys_err) {
ZLM_API.mk_proxy_player_release(new MK_PROXY_PLAYER(pUser));
ZLM_API.mk_proxy_player_play(mk_proxy, "rtsp://admin:admin@172.16.6.236/h264/ch1/main/av_stream");
ZLM_API.mk_proxy_player_set_on_close(mk_proxy, imkProxyPlayCloseCallBack, mk_proxy.getPointer());
Thread.sleep(60000L);
ZLM_API.mk_stop_all_server();
还有其他回调及结构体代码就不一一放出,放在项目j_zlm_sdk 中,并基于j_zlm_sdk用SpringBoot构建了一个java版本的ZLMediaKit项目代码参见 j_media_server,此项目可作为二次开发参考。j_zlm_sdk项目已被ZLMediaKit收录到wiki中。
上面就是全部移植流程,有问题可以wx联系我:L746101210 一起研究。
目前市面上的流媒体服务程序大多以C/C++等编写的,而是用java编写的功能完善的流媒体服务几乎没有。对于有流媒体需求的java项目而言只能采用单独部署的方式并采用http及hook来进行业务交互,一定程度上增加了运维及开发的成本,所以开发或者移植一款功能齐全的流媒体服务势在必行。总共分为三步,第一步编译并构建ZLMediaKit C Api的动态链接库,第二步根据ZLMediaKit C Api的头文件封装Java代码中形成 ZLMApi,第三步使用ZLMApi构建自己的流媒体服务。
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。我将带领大家一起来学习:ZLMediakit配置安装与直播推流拉流、ubuntu18,centos7,windows10。。具体内容包括:1.Ubuntu18安装配置ZLMediaKit。2.Windows10编译运行ZLMediaKit。3.Centos7编译运行ZLMediaKit。 音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。
如何构建java web 的流媒体服务。网上的这一方面的资料太少,有没有已经做好了。拿出来共享一下。我的QQ 374034723
一下是流媒体的网址的测试地址和输入用户名和密码便可以看到远程录像的实时采集。
以下是带有云台的网络摄像,一网页的形式进行数据采集的。
http://cam11666.topipcam.org:92
用户名:admin 密码:123456
4. 编译完成后,在ZLMediaKit目录下会生成release目录,其中包含了主要的目标文件:
- MediaServer:位于ZLMediaKit/release/linux/Debug目录下,可通过-h参数查看启动参数,以守护进程模式启动可使用命令./MediaServer -d &。
- SDK (c语言):头文件位于ZLMediaKit/api/include目录下,库文件位于ZLMediaKit/release/linux/Debug目录下的libmk_api.so。
- 测试程序:位于ZLMediaKit/release/linux/Debug目录下。