我想用RTSP去推Image图片,应该在RTSP的例程代码上怎么修改

Viewed 160

我想用RTSP去推Image图片,应该在RTSP的例程代码上怎么修改?

=======================================================

https://developer.canaan-creative.com/k230_canmv/zh/main/zh/api/mpp/K230_CanMV_VENC%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html#id3
在VENC的4.2这个例程中,我添加了一个img.drawstring,但是显示的颜色、位置和数量都不对

            while True:
                os.exitpoint()
                yuv420sp_img = sensor.snapshot(chn=CAM_CHN_ID_0)

                ####### 这是我添加的 ###############
                yuv420sp_img.draw_string_advanced(10, 10, 32, "TEST", color=(0, 0, 0))

这是实际运行的效果
image.png

=============================================================

推流这部分我应该怎么修改,才能推img这个图片呢?

    def _do_rtsp_stream(self):
        try:
            # streamData = StreamData()
            # while self.start_stream:
            #     os.exitpoint()
            #     # 获取一帧码流
            #     self.encoder.GetStream(self.venc_chn, streamData)
            #     # 推流
            #     for pack_idx in range(0, streamData.pack_cnt):
            #         stream_data = bytes(uctypes.bytearray_at(streamData.data[pack_idx], streamData.data_size[pack_idx]))
            #         self.rtspserver.rtspserver_sendvideodata(self.session_name,stream_data, streamData.data_size[pack_idx],1000)
            #         #print("stream size: ", streamData.data_size[pack_idx], "stream type: ", streamData.stream_type[pack_idx])
            #     # 释放一帧码流
            #     self.encoder.ReleaseStream(self.venc_chn, streamData)

            img = image.Image(1920, 1080, image.ARGB8888)
            img.clear()
            img.draw_circle(50,50 ,2, (45,100,55), 1)
            # 推流到RTSP


        except BaseException as e:
            print(f"Exception {e}")
        finally:
            self.runthread_over = True
            # 停止rtsp server
            self.stop()

        self.runthread_over = True

img图片不支持推流,推流的数据格式只有三种:mjpeg,h.264,h.265

1 Answers

1. 如何推送 MJPEG 数据流?

RTSP 接口支持三种数据输入格式:H.264、H.265 和 MJPEG。要推送 MJPEG 数据流,可以按照以下步骤操作:

  1. 使用 rtspserver_createsession 创建 RTSP 会话时,指定数据格式为 MJPEG(mm.multi_media_type.media_mjpeg)。
  2. 其余接口不变,参照demo调用即可。获取到的 JPEG 数据通过 rtspserver_sendvideodata 发送出去。

2. img.drawstring 显示异常

当亮度(Y)和色度(UV)分量的内存地址连续时,img(yuv420sp) 可以正常绘制文本。在摄像头获取的 1280x720 分辨率下,亮度和色度的内存地址是连续的。以下是修改摄像头分辨率的代码示例:

stream_venc_test("/sdcard/examples/test.264", 1280, 720)

我还是不太清楚推流这个地方怎么修改,可以写一个简单的demo么?要修改的部分我补充在原回答中了

从摄像头获取到的raw数据是不能直接推流的 ,需要调用编码器编码成压缩后的格式(264/265/mjpeg),编码后的数据才能推流。
请详细阅读demo,demo里面也是按照这个思路做的。