一个优秀活跃的视频转码项目分享
序
今天分享一个视频转码的项目。起因是另一个team渝澳了摄像头视频流的播放问题,自从浏览器放弃flash支持后,好多视频格式都不能播放了,于是视频转码就必不可少了。然而很多公司并没有精力、资金去对这块过多的投入,一时间无论是前端播放器插件、还是后端转码项目,都特别火。今天主要是分享下发现的后端转码项目-EasyMedia,这其实也是另一个team哥们发现的,我这里研究下作为技术储备。
一、项目说明
这个项目是开源的,而且作者说可以任意商用,当然这是暂时的。但是,里面引入了javacv、ffmpeg,这2块的LICENSE是GPL协议,所以只要不对这2块坐修改,商用是ok的。
项目的活跃度还很高,最近一次代码提交时1个月前。更新了部分依赖,引入了数据库H2,当然这块我们要用肯定是要坐二开的。
Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,延迟大部分在1-5秒内(已经支持转复用,h264的流自动转封装,超低延迟。PS:当然还有种更低延迟的不用flv方案没时间写了,但是主要是flv比较大众,这个一般也够用了)。
二、项目技术架构
软件架构
- netty负责播放地址解析及视频传输,通过javacv推拉流存到内存里,直接通过输出到前端播放
- 后端:springboot、netty,集成websocket
- 前端:vue、html5(简单的管理页面)
- 播放器:西瓜播放器
http://h5player.bytedance.com/
(字节跳动家的,不介绍了,抖音视频、西瓜视频都杠杠的,当然只要支持flv的播放器都可以) - 媒体框架:javacv、ffmpeg
功能汇总 - 支持播放 rtsp、rtmp、http、文件等流……
- pc端桌面投影
- 支持永久播放、按需播放(无人观看自动断开)
- 自动判断流格式h264、h265,自动转封装
- 支持http、ws协议的flv
- 支持hls内存切片(不占用本地磁盘,只占用网络资源)
- 重连功能
- 支持javacv、ffmpeg方式切换
三、代码下载升级与亲测
下载地址我就不贴了,博友可以自己搜索。
代码下载后基本没有什么错误,调整下JDK版本、maven编译环境就ok了,唯一就是代码格式有点凌乱,注释偏少。但是总体来说还是写的很清楚的,个人认为1年+经验的秒看懂。
依赖升级内容:(我本人习惯整新)
1、spring-boot升级2.5.4
2、javacv升级1.5.6
3、ffmpeg-platform升级4.4-1.5.6,与javacv对应
4、hutool-all升级5.7.10
5、netty-all升级4.1.67.Final
整体pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zj</groupId><artifactId>EasyMedia</artifactId><version>1.2.0</version><name>EasyMedia</name><description>一款简单的流媒体服务</description><properties><java.version>1.8</java.version><skipTests>true</skipTests></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!-- 全量引入 ,包含ffmpeg、opencv等 --><!-- <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId><version>1.5.5</version> </dependency> --><!-- 媒体只用到以下两个 --><dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.6</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ffmpeg-platform</artifactId><version>4.4-1.5.6</version></dependency><!-- 工具包 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.10</version></dependency><!-- netty --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.67.Final</version></dependency><!-- h2驱动 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- jpa --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- mybatisplus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.2</version></dependency><!-- 云台控制sdk需要 --><dependency><groupId>com.jna</groupId><artifactId>jna</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/sdk/jna.jar</systemPath></dependency><dependency><groupId>com.examples</groupId><artifactId>examples</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/sdk/examples.jar</systemPath></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.4</version><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build></project>
注意首次编译跳过test,这里我增加了跳过配置:true
四、运行效果
console:
界面效果
Flv拉流播放效果
如果可以看到这个界面,那就说明没有问题了。但是注意前提是在流配置界面配置的流地址本生就是可播放的哦(可以用vlc播放器打开网络串流验证)。
按照示例直接拼的地址如:
http://172.16.2.39:8866/live?url=rtsp://admin:密码@xx.xx.xx.xx:30410/Streaming/Channels/101
可以直接在360浏览器打开,目前360浏览器直接打开这种流地址,是可以直接播放的。
五、总结
这个验证没有问题就可以集成到自己的项目了,集成方式2种:
1、直接搭建使用,修改数据库的使用就ok了。
2、只要能力,不要业务。比如就只提供要转码的url,出参为可播放的url,然后地址怎么用就看业务了
最后,说下,这样我们就不用自己搭建ffmpeg转码服务,专注业务就可以了。不过这种转码是比较吃资源的,然后设备的原流地址可能多了就推不动,不过这里面好像有复用逻辑,也就是说转码url一样可能就共用的同一个转出流,详细情况还要去看看源码。就写到这里,希望可以帮到大家。
一个优秀活跃的视频转码项目分享相关推荐
- 一个优秀的Android应用从建项目开始
1.项目结构 现在的MVP模式越来越流行.就默认采用了. 如果项目比较小的话: app--Application Activity Fragment Presenter等的顶级父类 config--A ...
- 其实你也可以做出一个抖音(文末实战项目分享)
好久不联系的朋友,我不知道要用什么理由关心你的生活,我不知道要用什么借口让你能听一听我诉的苦水,我怀念当初的日子,即使我知道生活总是往前.或许我很久没有联系你了,不要觉得我无情,不要觉得我喜新,不要觉 ...
- 公司(视频 社交)项目分享
http://blog.csdn.net/u011733020/article/details/46786471 最近公司工作比较轻松,就把以前的项目 拿来整理下.以前公司做视频社交这一块,类似于YY ...
- 基于 Amazon Lambda 的无服务器视频转码方案
在 re:Invent 2020 上,Amazon Lambda推出了大函数支持.Amazon Lambda客户可以设置Amazon Lambda函数的最大内存为 10,240 MB(10GB),与之 ...
- SIVE-复杂的 iPod 视频转码东西
Toy Posted in Apps SIVE (Simple iPod Video Encoder) 是一个复杂的 iPod 视频转码东西,运用它你可以将自身喜爱的电影转换成可供 iPod 播放的格 ...
- 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?
怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 ...
- ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!
原标题:推荐一个强大的音视频处理的开源项目! 1.前景提要 在我们的开发中,经常会用到音视频相关内容,一般我们都会选择FFmpeg,但是其交叉编译对于我们来说是一件很麻烦的事情.所以这里方便日后使用就 ...
- android 直播sdk 抖音,从零开始仿写一个抖音App——跨平台视频编辑SDK项目搭建
不知不觉已经到了2019年,本系列的文章也更新到了8篇.很庆幸笔者能坚持下来,从我司的代码中学习到了很多东西.当然更庆幸的是收获了众多读者的鼓励和支持.从本篇文章开始,我们将接触短视频 app 中比较 ...
- 如何做一个优秀的数据分析项目?
上一篇我们普及了[数据分析项目,是什么?为什么我没做过?].今天我们系统讲解一下:如何做一个优秀的数据分析项目.首先大家要明白,并不是所有的项目,都需要找一个万人大会堂,拉着横幅,董事长总经理轮流上台 ...
- 做一个优秀的开源项目,需要注意哪些方面?
摘要 如果你想发布一个开源库,请确保它有以下特点: 清晰的依赖性和安装说明 至少有一个简要的文档指南 修改日志和仓库中的标签 关于支持的语言.运行时.工具版本的信息和项目的成熟度 一个可以让用户提问和 ...
最新文章
- MinkowskiEngine多GPU训练
- SaaS加速器 I 商业中心:提供商业助力 共享商业成功
- Metasploit advanced命令使用技巧
- 反激式开关电源中PC817与TL431的配合电路探讨
- python自建包的根目录可以直接import的方法
- KVM脚本批量添加删除虚拟机
- Servlet 处理多种请求应用
- .net webservice studio调用方法传参_springboot整合WebService简单版
- matlab电类,985电气研二,有发过考研经验贴 电气电力类的有
- 干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!
- linux7配置静态地址,Centos7 配置静态 IP 地址的方法
- 深入解析Windows操作系统 第4版
- Go全栈面试题(3) -微服务面试题
- 彻底清理c盘空间,本人亲测有效--WinDirStat
- 仿迅雷播放器教程 -- 提取exe资源(12)
- 【seo入门教程】零基础新手学seo必备
- android后台通过View生成分享图片
- java与jasper模板_ireport中使用java进行pdf转化,jasper作为模板
- 记一次阿里云ECS实例预约迁移
- 百度智能手环方案开源(含源码,原理图,APP,通信协议等)...
热门文章
- 由于受到新冠疫情的影响,GDP同比增长率从2019年的6.1%下滑到了2.3%
- 加州大学戴维斯分校 计算机科学,UCDavis的Computer Science「加州大学戴维斯分校计算机科学专业」...
- “2019年全国职业院校技能大赛”高职组计算机网络应用竞赛竞赛样题C卷(软件定义网络部分答案参考)
- 怎么把mp4转换成html,html5-video – VLC:如何从mp4转换为webm
- U盘量产工具-缩水盘恢复实际容量
- CDD文件——CANdelaStudio
- Spider爬虫框架之Spiders模块
- 大学语文 · 期末复习知识点汇总
- Maven的依赖与最佳配置(转载自Maven实战 作者许晓斌)
- 850pro测试软件,三星850Pro ssd可靠性测试 6000次P/E