wuyq 发表于 2025-9-15 20:48:17

ffmedia的拉流+推流测试

#!/usr/bin/env python3
import ff_pymedia as m


def align(x, a):
    return (x + a - 1) & ~(a - 1)


def test_ffmedia(rtsp_urls, rtmp_urls):
    input_source = None

    try:
      # 视频流拉流,设置参数
      # rtsp流的地址
      # rtsp流的传输协议,默认为UDP流-0,TCP流-1
      # 是否拉取视频流,默认为真
      # 是否拉取音频流,默认为假
      input_source = m.ModuleRtspClient(rtsp_urls, m.RTSP_STREAM_TYPE(0), True, False)
      print(f"input_source.videoFPS: {input_source.videoFPS}")
      ret = input_source.init()
      last_module = input_source
      if ret < 0:
            print("input_source init failed")
            exit(-1)

      # 视频流解码
      input_para = last_module.getOutputImagePara()
      # print(f"last_module.videoFPS: {last_module.videoFPS()}")
      print(
            f"input_para.v4l2Fmt: {input_para.v4l2Fmt}, {m.v4l2GetFmtByName('H264')}, {m.v4l2GetFmtByName('BGR24')}, {m.v4l2GetFmtByName('NV12')}")
      print(f"input_para.width: {input_para.width}")
      print(f"input_para.height: {input_para.height}")
      if input_para.v4l2Fmt == m.v4l2GetFmtByName("H264") or \
                input_para.v4l2Fmt == m.v4l2GetFmtByName("MJPEG") or \
                input_para.v4l2Fmt == m.v4l2GetFmtByName("H265"):
            print("加入解码...")
            dec = m.ModuleMppDec()
            dec.setProductor(last_module)
            ret = dec.init()
            if ret < 0:
                print("dec init failed")
                exit(-1)
            input_para = dec.getOutputImagePara()
            dec.setOutputImagePara(
                m.ImagePara(input_para.width, input_para.height, input_para.hstride, input_para.vstride,
                            m.v4l2GetFmtByName('BGR24')))
            last_module = dec

            # # 输出内容正常
            # input_para = last_module.getOutputImagePara()
            # drm_display = m.ModuleDrmDisplay()
            # drm_display.setPlanePara(m.v4l2GetFmtByName("BGR24"), 0,
            #                        m.PLANE_TYPE.PLANE_TYPE_OVERLAY_OR_PRIMARY, 0xff, 1, 0)
            # drm_display.setProductor(last_module)
            # ret = drm_display.init()
            # if ret < 0:
            #   print("drm display init failed")
            #   return 1
            # else:
            #   t_h = drm_display.getDisplayPlaneH()
            #   t_w = drm_display.getDisplayPlaneW()
            #   w = min(t_w, input_para.width)
            #   h = min(t_h, input_para.height)
            #   x = (t_w - w) // 2
            #   y = (t_h - h) // 2
            #   drm_display.setWindowSize(x, y, w, h)


      # 编码参数重定
      print("成功加入解码")

      # 视频流解码
      print("加入编码")
      enc = m.ModuleMppEnc(m.EncodeType.ENCODE_TYPE_H264)
      enc.setProductor(last_module)
      enc.setBufferCount(16)
      enc.setDuration(0)# Use the input source timestamp
      ret = enc.init()
      if ret < 0:
            print("ModuleMppEnc init failed")
            exit(-1)
      last_module = enc

      print("成功加入编码")
      # 解码后输出的内容就坏掉了!!!

      # 视频流推流
      push_c = m.ModuleRtmpClient(rtmp_urls, m.ImagePara(), 0)
      push_c.setProductor(last_module)
      ret = push_c.init()
      if ret < 0:
            print("Fail to init rtmp client push")
            exit(-1)

      # 启动拉流
      input_source.start()
      # 管道日志
      input_source.dumpPipe()
      # 等待用户输入
      text = input("wait...")
      # 打印管道日志
      input_source.dumpPipeSummary()
      # 停止拉流
      input_source.stop()

    except Exception as e:
      print(f"异常: {e}")
    finally:
      pass


# 使用示例
if __name__ == "__main__":
    # 两路RTSP流地址
    rtsp_urls = [
      "rtsp://xxxx:xxxx@192.168.8.83:554/h264/ch1/main/av_stream",
      "rtsp://xxxx:xxxx@192.168.8.211:554/h264/ch1/main/av_stream"
    ]

    # 两路RTMP推流地址
    rtmp_urls = [
      "rtmp://172.16.110.202:1935/live/origin_185384157d27690c9bb5ae5c2d65d753",
      "rtmp://172.16.110.202:1935/live/origin_c568b8a53373a02905ce5d1fb1152b16"
    ]

    test_ffmedia(rtsp_urls, rtmp_urls)

未报错~个人觉得是编码有问题~~~demo.py上面抄下来自己写的demo。
上述是测试案例,发现经过ModuleMppEnc编码后 流数据显示就不正常了,麻烦测试~已尝试各种办法 无果,请指教

dengkx 发表于 2025-9-16 11:50:39

发一下运行log看看

wuyq 发表于 2025-9-19 11:23:49

dengkx 发表于 2025-9-16 11:50
发一下运行log看看

请查看附件~
页: [1]
查看完整版本: ffmedia的拉流+推流测试