# camera-ffmpeg **Repository Path**: yang_lin_se/camera-ffmpeg ## Basic Information - **Project Name**: camera-ffmpeg - **Description**: java实现RTSP转flv 后端 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-11-14 - **Last Updated**: 2025-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # camera-ffmpeg #### 介绍 Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,低延迟(支持识别h264、aac编码自动转封装)。 ``` //自行打包 mvn clean package -Dmaven.test.skip=true ``` ### 如何运行 ```java java -jar EasyMedia-0.0.1-SNAPSHOT.jar 还可以这样改端口 java -jar -Dserver.port=页面端口 -Dmediaserver.port=媒体端口 EasyMedia-0.0.1-SNAPSHOT.jar ``` #### flv播放 ```java #播放url规则,easymedia启动后,直接将此链接用flv播放器就能放 http://localhost:8866/live?url={您的源地址} ws://localhost:8866/live?url={您的源地址} 例如rtsp: http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102 ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102 本地文件(支持格式参照ffmpeg支持的格式): http://localhost:8866/live?url=d:/flv/testVideo.mp4 ws://localhost:8866/live?url=d:/flv/testVideo.mp4 电脑桌面投影(url改成desktop即可): http://localhost:8866/live?url=desktop ws://localhost:8866/live?url=desktop ``` #### hls播放 ```java #用hls播放器播放,必须要通过页面或者api开启切片后才能放,这功能是最近新增内容,后期会做优化 #注意此处是http端口8888,后期将统一使用媒体端口 http://localhost:8888/hls?url={您的源地址} ``` #### 参数使用 ```java #参数 autoClose=false(无人观看一分钟后自动关闭推流,默认true开启自动关闭,false不关闭) ffmpeg=true (true为强制使用ffmpeg,否则默认使用javacv) #永久播放 http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false #ffmpeg方式推流(遇到不支持的流可以使用此参数,强制使用ffmpeg) http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&ffmpeg=true ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&ffmpeg=true #可以多个参数一起,只需参数前面增加&&& http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false&&&ffmpeg=true ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false&&&ffmpeg=true ``` #### 页面功能 ```java 访问 http://localhost:8888 ``` #### 注意事项 > 有些人的编码不是h264 aac,强烈建议把视频流换成这个,因为可以转封装,延迟低(1s内)、cpu占用低(几乎不怎么占用) 如果是其他编码比如h265 pcm会进行转码,有些流不是标准rtsp视频协议或者的数据不完整,转码的时候会出现异常,转码会消耗cpu、并且延迟在5s内(最新版的特性延迟更低,本人亲测h265的相机即便转码延迟也就2s) > 有时候因为网络异常断开,这种情况怎么处理,由于重连是客户端做的事情,所以可以参考 https://blog.csdn.net/Janix520/article/details/119567408 #### 功能汇总 (不知道怎么使用的可以直接看wiki,简洁明了) - 支持播放 rtsp、rtmp、http、文件等流…… - pc端桌面投影 - 支持永久播放、按需播放(无人观看自动断开) - 自动判断流格式h264、h265,自动转封装 - 支持http、ws协议的flv - 支持hls内存切片(不占用本地磁盘,只占用网络资源) #### 软件架构 - netty负责播放地址解析及视频传输,通过javacv推拉流存到内存里,直接通过输出到前端播放 - 后端:springboot、netty,集成websocket - 前端:vue、html5(简单的管理页面) - 播放器:西瓜播放器 http://h5player.bytedance.com/ (字节跳动家的,不介绍了,抖音视频、西瓜视频都杠杠的,当然只要支持flv的播放器都可以) - 媒体框架:javacv、ffmpeg #### 使用教程 > 流媒体服务会绑定两个端口,分别为 8866(媒体端口)、8888(web端口,后续会做简单的管理页面) 您只需要将 {您的源地址} 替换成您的,然后放播放器里就能看了 - 播放地址(播放器里直接用这个地址播放) ``` http://localhost:8866/live?url={您的源地址} ws://localhost:8866/live?url={您的源地址} ``` #### 疑问解答 - 在vlc、ffplay等播放器测试存在延迟较高是正常的,是因为他们默认的嗅探关键帧的时间比较长,测延迟建议还是用flv.js播放器测试。 - 是否需要ffmpeg推流,不需要,就是为了简化使用,只需运行一个服务即可。 - 很多人想用文件点播,可以参考截图(目前对文件播放未做优化,可以参考)。 #### 源码教程 1. 环境:java8+ 2. 标准的maven项目,sts、eclipse或者idea导入,直接运行main方法 #### 关于LICENSE 有人问这个能否商用,能,本软件采用MIT宽松协议,但是注意软件里面应用了一些其他库javacv、ffmpeg等均是GPL协议,需要遵循此协议,只要不修改javacv、ffmpeg等具有GPL协议的源码,其他都能任意改,也可任意商用,如果改了GPL源码,那么你代码也将受到GPL协议约束。 **最后感谢eguid的javacv文档,https://eguid.blog.csdn.net/**