今天分享一个视频转码的项目。起因是另一个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一样可能就共用的同一个转出流,详细情况还要去看看源码。就写到这里,希望可以帮到大家。

一个优秀活跃的视频转码项目分享相关推荐

  1. 一个优秀的Android应用从建项目开始

    1.项目结构 现在的MVP模式越来越流行.就默认采用了. 如果项目比较小的话: app--Application Activity Fragment Presenter等的顶级父类 config--A ...

  2. 其实你也可以做出一个抖音(文末实战项目分享)

    好久不联系的朋友,我不知道要用什么理由关心你的生活,我不知道要用什么借口让你能听一听我诉的苦水,我怀念当初的日子,即使我知道生活总是往前.或许我很久没有联系你了,不要觉得我无情,不要觉得我喜新,不要觉 ...

  3. 公司(视频 社交)项目分享

    http://blog.csdn.net/u011733020/article/details/46786471 最近公司工作比较轻松,就把以前的项目 拿来整理下.以前公司做视频社交这一块,类似于YY ...

  4. 基于 Amazon Lambda 的无服务器视频转码方案

    在 re:Invent 2020 上,Amazon Lambda推出了大函数支持.Amazon Lambda客户可以设置Amazon Lambda函数的最大内存为 10,240 MB(10GB),与之 ...

  5. SIVE-复杂的 iPod 视频转码东西

    Toy Posted in Apps SIVE (Simple iPod Video Encoder) 是一个复杂的 iPod 视频转码东西,运用它你可以将自身喜爱的电影转换成可供 iPod 播放的格 ...

  6. 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?

    怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 ...

  7. ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!

    原标题:推荐一个强大的音视频处理的开源项目! 1.前景提要 在我们的开发中,经常会用到音视频相关内容,一般我们都会选择FFmpeg,但是其交叉编译对于我们来说是一件很麻烦的事情.所以这里方便日后使用就 ...

  8. android 直播sdk 抖音,从零开始仿写一个抖音App——跨平台视频编辑SDK项目搭建

    不知不觉已经到了2019年,本系列的文章也更新到了8篇.很庆幸笔者能坚持下来,从我司的代码中学习到了很多东西.当然更庆幸的是收获了众多读者的鼓励和支持.从本篇文章开始,我们将接触短视频 app 中比较 ...

  9. 如何做一个优秀的数据分析项目?

    上一篇我们普及了[数据分析项目,是什么?为什么我没做过?].今天我们系统讲解一下:如何做一个优秀的数据分析项目.首先大家要明白,并不是所有的项目,都需要找一个万人大会堂,拉着横幅,董事长总经理轮流上台 ...

  10. 做一个优秀的开源项目,需要注意哪些方面?

    摘要 如果你想发布一个开源库,请确保它有以下特点: 清晰的依赖性和安装说明 至少有一个简要的文档指南 修改日志和仓库中的标签 关于支持的语言.运行时.工具版本的信息和项目的成熟度 一个可以让用户提问和 ...

最新文章

  1. MinkowskiEngine多GPU训练
  2. SaaS加速器 I 商业中心:提供商业助力 共享商业成功
  3. Metasploit advanced命令使用技巧
  4. 反激式开关电源中PC817与TL431的配合电路探讨
  5. python自建包的根目录可以直接import的方法
  6. KVM脚本批量添加删除虚拟机
  7. Servlet 处理多种请求应用
  8. .net webservice studio调用方法传参_springboot整合WebService简单版
  9. matlab电类,985电气研二,有发过考研经验贴 电气电力类的有
  10. 干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!
  11. linux7配置静态地址,Centos7 配置静态 IP 地址的方法
  12. 深入解析Windows操作系统 第4版
  13. Go全栈面试题(3) -微服务面试题
  14. 彻底清理c盘空间,本人亲测有效--WinDirStat
  15. 仿迅雷播放器教程 -- 提取exe资源(12)
  16. 【seo入门教程】零基础新手学seo必备
  17. android后台通过View生成分享图片
  18. java与jasper模板_ireport中使用java进行pdf转化,jasper作为模板
  19. 记一次阿里云ECS实例预约迁移
  20. 百度智能手环方案开源(含源码,原理图,APP,通信协议等)...

热门文章

  1. 由于受到新冠疫情的影响,GDP同比增长率从2019年的6.1%下滑到了2.3%
  2. 加州大学戴维斯分校 计算机科学,UCDavis的Computer Science「加州大学戴维斯分校计算机科学专业」...
  3. “2019年全国职业院校技能大赛”高职组计算机网络应用竞赛竞赛样题C卷(软件定义网络部分答案参考)
  4. 怎么把mp4转换成html,html5-video – VLC:如何从mp4转换为webm
  5. U盘量产工具-缩水盘恢复实际容量
  6. CDD文件——CANdelaStudio
  7. Spider爬虫框架之Spiders模块
  8. 大学语文 · 期末复习知识点汇总
  9. Maven的依赖与最佳配置(转载自Maven实战 作者许晓斌)
  10. 850pro测试软件,三星850Pro ssd可靠性测试 6000次P/E