利用mediamtx搭建rtsp流媒体server

本文介绍了在嵌入式瑞芯微RK3588s平台上使用mediamtx部署AI识别后的码流服务器,包括如何通过GStreamer和OpenCV实现RTSP流输出,以及如何测试和监控不同类型的媒体流服务如RTSP、RTMP等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式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我实际测试过。 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子正

thanks, bro...

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

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

打赏作者

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

抵扣说明:

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

余额充值