用 Java 做含有实时流媒体通信功能的服务端有哪些方式?

2020-10-09 15:25:33 +08:00
 tctc4869

有两个客户端,一个客户端用于实时采集声音,并编码成 aac 格式,然后把采集编码后的音频流推流到输服务器,然后另外一个客户端,连接服务器,进行拉流监听采集端的声音。当然权限都申请了。

推流与拉流的话,感觉用什么传输协议都可以,哪怕是 tcp 与 udp 都行,也可以用 WebSocket,按照我的 猜想,应该是在服务端,用 byte[]接收,然后把 byte[]送到拉流的客户端就可以。

不过如果实时性要求高一些,有博客建议用 RTMP,RTSP 这两个传输协议,如果是用这 2 个协议话,java 的服务端适合用什么框架么?有人能指点一下么?

用 java 做含有实时通信功能的流媒体服务端有哪些方式?

3193 次点击
所在节点    Java
16 条回复
qwerthhusn
2020-10-09 15:29:58 +08:00
买个阿里云的直播服务就行了啊
如果客户端数量比较少,阿里云的费用也很少的
如果客户端数据较多,你认为你自己(没有相关流媒体的经验)写的能 hold 住?
chinvo
2020-10-09 15:31:33 +08:00
正确做法是业务系统只做鉴权和记录,流的转发工作交给专门的流服务器
tctc4869
2020-10-09 15:40:50 +08:00
谢谢指点,我知道 java 做这个可能有点困难,但是有哪些第三方的开源免费可用的流服务器么?
@chinvo
tctc4869
2020-10-09 15:42:29 +08:00
@qwerthhusn 其实这样的话,我觉得不如直接去用音视频方面的第三方的 sdk 工具
chinvo
2020-10-09 15:44:32 +08:00
@tctc4869 nginx rtmp module
manhere
2020-10-09 16:01:02 +08:00
@tctc4869 ZLMediaKit
hugedata
2020-10-09 16:12:05 +08:00
我补上一个 nginx hls module 。
另外,你可以了解一下 srs 已经发布到 3.0 了。比较稳定。
tctc4869
2020-10-09 16:15:43 +08:00
@manhere 谢谢
jiobanma
2020-10-09 16:19:21 +08:00
我有一个开源的流媒体服务,不过没有做音频的处理。使用的是 javacv 这个框架,封装的是 ffmpeg 。服务主要是通过 rtsp 转 rtmp 可以参考一下希望可以帮助到你。https://github.com/banmajio/RTSPtoRTMP
tctc4869
2020-10-09 16:31:12 +08:00
ffmpeg 的开源是基于 GPL 协议,只是基于这个开发应用的话,不改变扩展 ffmpeg 的代码,不需要项目开源把?
tctc4869
2020-10-09 16:57:56 +08:00
@manhere
@hugedata
@chinvo
@jiobanma

问一下,android 的话,有哪些推流软件呢,便于测试
twoconk
2020-10-09 17:53:18 +08:00
andriod 的话,可以考虑 anyrtc 开源的跨平台客户端( https://github.com/anyrtcIO-Community/anyRTC-RTMP-OpenSource ) 或者 LaiFeng ( https://github.com/LaiFeng-Android/SopCastComponent) 都方便定制修改
tctc4869
2020-10-10 10:06:54 +08:00
谢谢
@twoconk
tctc4869
2020-10-10 10:26:16 +08:00
@chinvo
@hugedata

nginx 1.7.11.3 Gryphon 也可以
tctc4869
2020-10-10 14:29:09 +08:00
@chinvo 问一下鉴权问题,如果业务系统(带有用户系统以及鉴权功能)和流媒体服务都是分成两个服务器各自负责的,那鉴权流程一般是怎么弄的,
开源的流媒体服务器,直接启动运行,实时观看,比如那些可以直接输入 rtmp 的 url 就可以进行采集并实时推流的软件和拉流的播放器软件,进行鉴权杜绝非法拉流或非法推流的情况,这个鉴权怎么做比较合适?

我只想到音视频流经过业务系统转发到流媒体服务器,转发之前进行鉴权,但这样做确定延迟不会很大么?
chinvo
2020-10-10 18:59:06 +08:00
@tctc4869 #15 前面说的这些流媒体服务器都有相关解决方案

比如 nginx rtmp module 有 before_push before_play 等设置项, 可以设置 shell 或 URL 去处理推送和播放事件来决定是否放行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX