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

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

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

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

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

相关文章

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

  1. 买个阿里云的直播服务就行了啊
    如果客户端数量比较少,阿里云的费用也很少的
    如果客户端数据较多,你认为你自己(没有相关流媒体的经验)写的能 hold 住?

  2. 谢谢指点,我知道 java 做这个可能有点困难,但是有哪些第三方的开源免费可用的流服务器么?
    @chinvo

  3. 我补上一个 nginx hls module 。
    另外,你可以了解一下 srs 已经发布到 3.0 了。比较稳定。

  4. 我有一个开源的流媒体服务,不过没有做音频的处理。使用的是 javacv 这个框架,封装的是 ffmpeg 。服务主要是通过 rtsp 转 rtmp 可以参考一下希望可以帮助到你。https://github.com/banmajio/RTSPtoRTMP

  5. ffmpeg 的开源是基于 GPL 协议,只是基于这个开发应用的话,不改变扩展 ffmpeg 的代码,不需要项目开源把?

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

    我只想到音视频流经过业务系统转发到流媒体服务器,转发之前进行鉴权,但这样做确定延迟不会很大么?

  7. @tctc4869 #15 前面说的这些流媒体服务器都有相关解决方案

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注