V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Java

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

  •  
  •   tctc4869 · 2020-10-09 15:25:33 +08:00 · 3434 次点击
    这是一个创建于 1542 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    问一下,android 的话,有哪些推流软件呢,便于测试
    twoconk
        12
    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
        13
    tctc4869  
    OP
       2020-10-10 10:06:54 +08:00
    谢谢
    @twoconk
    tctc4869
        14
    tctc4869  
    OP
       2020-10-10 10:26:16 +08:00
    @chinvo
    @hugedata

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

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

    比如 nginx rtmp module 有 before_push before_play 等设置项, 可以设置 shell 或 URL 去处理推送和播放事件来决定是否放行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.