# j-media-server2 **Repository Path**: 75270093/j-media-server2 ## Basic Information - **Project Name**: j-media-server2 - **Description**: 安全性:使用了WSS(WebSocket Secure)协议确保通信安全 兼容性:支持现代浏览器的WebRTC功能 信令机制:通过WebSocket进行信令交换,确保连接建立 媒体传输:使用STUN服务器进行NAT穿透,实现P2P连接 您的流媒体服务器现在支持完整的WebRTC功能,包括: 基于WebSocket的信令交换 视频通话功能 现有的WebRTC拉流功能 安全域名配置 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-06 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 😁项目简介 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器 本项目可以作为[ZLM4J](https://gitee.com/aizuda/zlm4j)使用示例代码。 本项目接口风格部分兼容ZLMediaKit REST API # ubanto: * linux:加载so 文件 - nohup java -Djava.library.path=/usr/local/ffmpeg/lib -jar j-media-server.jar -Xms128m -Xmx1024m j-media-server.jar /dev/null 2>&1 & - nohup java -Djava.library.path=/usr/local/zlmwebrtc/natives/ -jar j-media-server.jar -Xms128m -Xmx1024m j-media-server.jar /dev/null 2>&1 & # centos7不支持javavc高版本,要用docker 启动: 构建 Docker 镜像 docker build -t j-media-server:1.0.0 . # 运行容器并挂载本地 natives 目录 docker run -id --restart=always --network host -p 1935:1935 -p 8180:80 -p 8899:8899 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp --name mediakit j-media-server2:1.0.0 * # 创建本地目录存放 native 文件(确保 libjniavutil.so 等存在) mkdir -p ./natives # 将 Windows 上 Maven 中提取出的 .so 文件拷贝到此目录 cp ffmpeg-6.1.1-1.5.10-linux-x86_64-gpl/libjniavutil.so ./natives/ cp ffmpeg-6.1.1-1.5.10-linux-x86_64-gpl/libjniavcodec.so ./natives/ cp ffmpeg-6.1.1-1.5.10-linux-x86_64-gpl/libjniavformat.so ./natives/ ... # 启动容器 详情见启动方法注释 docker run -d \ --name jmedia \ -v $(pwd)/natives:/opt/natives \ -p 8899:8899 \ j-media-server # 升级功能 拉流代理自动删除流程: 创建拉流代理时,系统会记录流ID与代理Key的映射关系 当无人观看该流时,MKNoReaderCallBack会被触发 系统检测到是拉流代理创建的流(originType=4)且无人观看时,会自动调用删除接口关闭该拉流代理 同时,定时任务也会定期检查超时的拉流代理流并清理 录像自动停止流程: 开始录像时,系统会记录录像开始时间 系统安排一个5分钟后的定时任务来自动停止录像 5分钟后,定时任务会调用停止录像接口来结束录像 这些修改确保了系统能够自动管理拉流代理和录像资源,避免资源浪费,并满足您的业务需求 安全性:使用了WSS(WebSocket Secure)协议确保通信安全 兼容性:支持现代浏览器的WebRTC功能 信令机制:通过WebSocket进行信令交换,确保连接建立 媒体传输:使用STUN服务器进行NAT穿透,实现P2P连接 您的流媒体服务器现在支持完整的WebRTC功能,包括: 基于WebSocket的信令交换 视频通话功能 现有的WebRTC拉流功能 安全域名配置 ## 😁项目功能 - **接口**(可以使用knife4j): - 拉流代理接口:/index/api/addStreamProxy - 关闭拉流代理接口:/index/api/delStreamProxy - 推流代理接口:/index/api/addStreamPusherProxy - 关闭推流代理接口:/index/api/delStreamPusherProxy - 关闭流接口:/index/api/close_stream&/index/api/close_streams - 在线流列表接口:/index/api/getMediaList - 流详情:/index/api/getMediaInfo - 流是否在线:/index/api/isMediaOnline - 开始录像接口:/index/api/startRecord - 停止录像接口:/index/api/stopRecord - 获取录像状态接口:/index/api/isRecording - 获取内存资源信息:/index/api/getStatistic - 获取服务器配置:/index/api/getServerConfig - 设置服务器配置:/index/api/setServerConfig - 开启rtp服务:/index/api/openRtpServer - 关闭rtp服务:/index/api/closeRtpServer - 获取rtp服务列表:/index/api/listRtpServer - 截图:/index/api/getSnap - 转码(beta) :/index/api/transcode - 开始拼接屏任务(beta) :/index/api/stack/start - 重设拼接屏任务(beta) :/index/api/stack/rest - 停止拼接屏任务(beta) :/index/api/stack/stop - 开发中:😁 - **回调实现**: - MKHttpAccessCallBack:http鉴权回调 - MKHttpBeforeAccessCallBack:http前置鉴权回调 - MKHttpFlowReportCallBack:码流数据统计回调 - MKHttpRequestCallBack:http请求回调 - MKLogCallBack:日志回调 - MKNoFoundCallBack:未找到流回调 - MKNoReaderCallBack:无人观看回调 - MKPlayCallBack:播放回调 - MKProxyPlayCloseCallBack:流代理关闭回调 - MKPublishCallBack:推流回调 - MKRecordMp4CallBack:录制回调 - MKSourceFindCallBack:找不到流回调 - MKStreamChangeCallBack:流上下回调 - **流相关(注意rtmp_port、rtsp_port、http_port(非Spring Mvc端口)等参见application.yml,流APP、流名称可自定义)**: - RTMP推流:rtmp://ip:rtmp_port/流APP/流名称 - FLV拉流:http://ip:http_port/流APP/流名称.live.flv - WS-FLV拉流:ws://ip:http_port/流APP/流名称.live.flv - HLS拉流:http://ip:http_port/流APP/流名称/hls.m3u8 - RTMP拉流:rtmp://ip:rtmp_port/流APP/流名称 - RTSP拉流:rtsp://ip:rtsp_port/流APP/流名称 ## 😁项目组成 1. 本项目基于Spring Boot 2.7.12版本,使用undertow作为web容器,使用knife4j作为接口文档, 2. 本项目基于最新ZLM4J开发完成 ## 😁拼接屏使用说明 ### 参数说明 ``` 以row:4 col:4 拼接16宫格为例 视频被分为下面的块 | ----1--- | -----2---- | ----3--- | ----4---- | | ----5--- | -----6---- | ----7--- | ----8---- | | ----9--- | ----10---- | ----11---| ----12----| | ----13---| ----14---- | ----15---| ----16----| ``` ``` { "app": "live", //生成流的app "id": "test", //生成流的stream 也是任务id "pushUrl":"rtmp://127.0.0.1/live/test11",//如果填了这个上面的流不会在系统生效,直接推这个地址 "height": 1920, //生成视频的宽 "width": 1080, //生成视频的高 "row": 4, //生成多少列 "col": 4, //生成多少行 "fillColor": "00ff00", //空块填充颜色 RGB hex字符串 "fillImgUrl": "" //空块填充的图片 如果设置这个填充图片 则上面的fillColor失效, 需要图片像素格式为BGR格式的png或者jpg如果不是则默认填充颜色 "gridLineEnable": true, //是否开启分割线 "gridLineColor": "000000", //分割线颜色 RGB hex字符串 "gridLineWidth": 1, //分割线宽度 "windowList": [ //块配置数组,可为空 { "imgUrl": "", //块内填充的图片地址 需要图片像素格式为BGR格式的png或者jpg如果不是则默认填充颜色 "span": [1,2,5,6], //块所占的位置 多个则合并单元格 1 2 5 6 则代表占用 1 2 5 6四个单元格组成一个单元格 "videoUrl": "rtsp://admin:Hk@123456@192.168.1.64/streaming/tracks/101", //块内填充的视频地址 如果设置这个地址 则块内填充的图片地址imageUrl失效 "fillColor: "FF0000" //块内填充颜色 优先级最低 }, { "imgUrl": "http://127.0.0.1/upload/test.jpg", //块内填充的图片地址 需要图片像素格式为BGR格式的png或者jpg如果不是则默认填充颜色 "span": [13], //块所占的位置 多个则合并单元格 1 意思就是这个占用编号为13 的单元格 对应上面表 "videoUrl": "", //块内填充的视频地址 如果设置这个地址 则块内填充的图片地址imageUrl失效 "fillColor: "FF0000" //块内填充颜色 优先级最低 } ] } ``` ## 😁常见问题 1. 参见[ZLM4J常见问题 ](https://ux5phie02ut.feishu.cn/wiki/SzIAwyxnpilVMlkccS4cfJFGn1g) ## 😁学习探讨

zlm4j-qun