利用mediamtx搭建rtsp流媒体server

14 篇文章 0 订阅
12 篇文章 0 订阅

嵌入式AI识别处理完码流后,需要发布到一个码流服务器,这个服务器如果包含在嵌入式平台本身,最好。这个服务不涉及太多的运算,发布源直接放置在AI解算环境是可以的。

1.安装mediamtx

我的部署平台是嵌入式瑞芯微RK3588s平台,需要选arm7。

下载位置在这里:GitHub - bluenviron/mediamtx: Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams.

它不需要外部署nginx之类的web服务器。

1.1 如果你只需要rtmp流

值得提一句的是,nginx有一个处理rtmp的扩展模块。rtmp的服务器搭建也很容易随着nginx的部署实现。网上有详尽的帖子。这里不再说明这种处理方法。

2.发出rtsp流

大部分ai训练是使用python,opencv作为辅助工具实现的。此时看看这种模式的rtsp流(已经经过AI识别,叠加了指示信息)如何输出:

此时mediamtx需要OpenCV 通过GSteamer,作为RTSP client先上传码流。我们的工作,一般在厂商提供的开发环境中进行,可以先查看各个组件是否存在:

python3 -c 'import cv2; print(cv2.getBuildInformation())'

你应该能看到:

 

注意那个 GStreamer :YES字样。

核心的代码这里:

2.1 写入rtsp头

out = cv2.VideoWriter('appsrc ! videoconvert' + \
    ' ! video/x-raw,format=I420' + \
    ' ! x264enc speed-preset=ultrafast bitrate=600 key-int-max=' + str(fps * 2) + \
    ' ! video/x-h264,profile=baseline' + \
    ' ! rtspclientsink location=rtsp://localhost:8554/mystream',
    cv2.CAP_GSTREAMER, 0, fps, (width, height), True)
if not out.isOpened():
    raise Exception("can't open video writer")

它把测试的一个自行生成的视频流发布到了: rtsp://localhost:8554/mystream这个地方。

2.2 循环压入视频帧(自行生成的frame.)

while True:
    frame = np.zeros((height, width, 3), np.uint8)

    # create a rectangle
    color = colors[curcolor]
    curcolor += 1
    curcolor %= len(colors)
    for y in range(0, int(frame.shape[0] / 2)):
        for x in range(0, int(frame.shape[1] / 2)):
            frame[y][x] = color

    out.write(frame)
    print("%s frame written to the server" % datetime.now())

    now = time()
    diff = (1 / fps) - now - start
    if diff > 0:
        sleep(diff)
    start = now

 注意,这里实际压入的是点阵数据。Image到点阵数据的转换很容易处理。

3.测试(obs studio):

可以使用obs studio来打开你发布的rtsp流:

你会看到快速闪烁颜色不断变换的视频帧。上面使用的是byte*3的图片

上面的处理在rk3588s(debian11?环境下测试过)下测试过。

mediamtx原始github首页已经包含了足够的信息。只看首页就能完成基本的流媒体发布工作。

附录A mediamtx支持的媒体流格式

2024/04/28 16:03:26 INF configuration loaded from /home/fengxh/rtsp_svr/mediamtx/mediamtx.yml
2024/04/28 16:03:26 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2024/04/28 16:03:26 INF [RTMP] listener opened on :1935
2024/04/28 16:03:26 INF [HLS] listener opened on :8888
2024/04/28 16:03:26 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2024/04/28 16:03:26 INF [SRT] listener opened on :8890 (UDP)

RTSP RTMP我实际测试过。 

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: RTSP(Real Time Streaming Protocol)流媒体服务搭建需要遵循以下步骤: 1. 选择合适的服务器软件:有一些流行的RTSP流媒体服务器软件可供选择,例如Live555、Darwin Streaming Server等。根据需求和个人偏好选择适合的软件。 2. 下载和安装服务器软件:根据所选择的服务器软件,访问其官方网站,下载最新的稳定版本,并按照官方提供的安装指南进行安装。 3. 配置服务器软件:安装完成后,需要对服务器软件进行配置。配置文件通常包含服务器的IP地址和端口号、流媒体存储位置、流媒体格式、访问控制等信息。根据具体需求进行相应的配置。 4. 启动服务器:配置完成后,启动服务器软件。在启动过程中,服务器会监听指定的端口,并等待客户端连接。 5. 使用RTSP协议推送流媒体:为了在服务器上推送流媒体,需要使用RTSP协议。可以使用RTSP客户端软件,连接到服务器并推送本地存储的流媒体内容。 6. 播放流媒体:完成流媒体推送后,可以使用支持RTSP协议的流媒体播放器来播放流媒体内容。在播放器中输入服务器的IP地址和端口号,然后可以选择所需的流媒体进行播放。 需要注意的是,RTSP流媒体服务搭建涉及到一些网络和服务器技术,需要有一定的专业知识和经验。在操作过程中,如果遇到问题,可以参考官方文档、论坛和技术支持来获取帮助。 ### 回答2: RTSP(Real-Time Streaming Protocol)是一种建立在TCP/IP协议上的用于实时流媒体传输的协议。搭建RTSP流媒体服务器是为了实现在网络上实时传输音频或视频流的目的。 要搭建RTSP流媒体服务器,首先需要选取合适的服务器软件,常见的有Live555、Wowza、VLC等。其中,Live555是一个开源的、跨平台的RTSP服务器,搭建起来相对简单,下面以Live555为例进行介绍: 1. 下载并安装Live555服务器软件。 2. 配置服务器参数:在配置文件中设置服务器的监听地址和端口、日志文件路径、支持的流媒体文件格式等。 3. 创建音频或视频流:通过配置文件或命令行输入源文件地址,服务器会自动将源文件转化为流媒体格式。 4. 启动服务器:通过命令行或启动脚本启动Live555服务器。 5. 客户端播放:使用支持RTSP协议的播放器,输入服务器的地址和端口,即可实时播放音频或视频流。 此外,还可以根据需求进行进一步的配置和优化,例如配置服务器的安全认证、实现视频录制功能、设置并发连接数等。RTSP流媒体服务搭建的成功与否,除了软件的选择和配置外,还需要保证网络的稳定和带宽的充足,以确保音视频流的实时性和流畅性。 总的来说,搭建RTSP流媒体服务器需要步骤如上所述,根据软件的不同可能会有细微差别,但核心的原理和步骤是相似的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子正

thanks, bro...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值