<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      K230使用RTSP實現無線圖傳

      K230 使用 RTSP 實現無線圖傳

      效果圖

      pic0_效果圖

      開發環境

      開發板:LCKFB-LSPI-K230-1G-CanMV
      固件:CanMV_K230_LCKFB_micropython_v1.4-0-g6cce59c_nncase_v2.9.0.img
      IDE:CanMV K230
      播放器:VLC 播放器

      RTSP 介紹

      RTSP(Real-Time Streaming Protocol,實時流協議)是一種用于控制多媒體流(如音頻和視頻)傳輸的網絡控制協議。

      幾種常用的圖傳協議對比

      協議 用途 延遲 場景
      RTSP 控制實時流 低(200ms~2s) 安防攝像頭、工業圖傳
      HTTP-FLV / HLS 基于 HTTP 的流媒體 中~高(HLS 通常 3s+) 網頁直播、點播
      WebRTC 端到端實時通信 極低(<500ms) 視頻通話、在線教育

      數據流圖

      pic2_數據流圖

      RTSP 類

      class RTSPStreamer:
          """RTSP圖像流傳輸"""
      
          def __init__(
              self,
              port=2004,
          ):
              self.rtspserver = mm.rtsp_server()  # 實例化 RTSP 服務器
              self.video_type = mm.multi_media_type.media_h265  # 視頻編碼類型
              self.session_name = "VisionCarStream"  # 會話名稱
              self.venc_chn = VENC_CHN_ID_0  # 視頻編碼通道
              self.port = port  # RTSP 服務器端口號
              self.enable_audio = False  # 是否啟用音頻
              self.start_stream = False  # 是否啟動推流線程
              self.runthread_over = False  # 推流線程是否結束
      
              # 創建編碼器
              self.encoder = Encoder()
              self.encoder.SetOutBufs(self.venc_chn, 8, STREAM_WIDTH, STREAM_HEIGHT)
      
              # 設置編碼參數,使用H265編碼
              self.chnAttr = ChnAttrStr(
                  self.encoder.PAYLOAD_TYPE_H265,
                  self.encoder.H265_PROFILE_MAIN,
                  STREAM_WIDTH,
                  STREAM_HEIGHT,
              )
              self.streamdata = StreamData()
      
          def __deinit__(self):
              # 停止推流
              self.stop()
      
              self.encoder.Stop(self.venc_chn)
              self.encoder.Destroy(self.venc_chn)
      
              self.rtspserver.rtspserver_stop()
              self.rtspserver.rtspserver_deinit()
      
          def start(self):
              self.encoder.Create(self.venc_chn, self.chnAttr)
              self.encoder.Start(self.venc_chn)
      
              self.rtspserver.rtspserver_init(self.port)
              self.rtspserver.rtspserver_createsession(
                  self.session_name, self.video_type, self.enable_audio
              )
              # 啟動 RTSP 服務器
              self.rtspserver.rtspserver_start()
      
              # 啟動推流線程
              self.start_stream = True
              _thread.start_new_thread(self._do_rtsp_stream, ())
      
          def stop(self):
              if not self.start_stream:
                  return
              # 等待推流線程退出
              self.start_stream = False
              while not self.runthread_over:
                  time.sleep(0.1)
              self.runthread_over = False
      
          def get_rtsp_url(self):
              return self.rtspserver.rtspserver_getrtspurl(self.session_name)
      
          def _do_rtsp_stream(self):
              try:
                  while self.start_stream:
                      os.exitpoint()
                      self.encoder.GetStream(self.venc_chn, self.streamdata)
                      for pack_idx in range(0, self.streamdata.pack_cnt):
                          stream_data = bytes(
                              uctypes.bytearray_at(
                                  self.streamdata.data[pack_idx],
                                  self.streamdata.data_size[pack_idx],
                              )
                          )
                          self.rtspserver.rtspserver_sendvideodata(
                              self.session_name,
                              stream_data,
                              self.streamdata.data_size[pack_idx],
                              time.time(),
                          )
      
                      self.encoder.ReleaseStream(self.venc_chn, self.streamdata)
      
              except BaseException as e:
                  print(f"Exception {e}")
              finally:
                  self.runthread_over = True
                  # 停止 rtsp server
                  self.stop()
      
              self.runthread_over = True
      

      攝像頭類

      class Camera:
          def __init__(self):
              """攝像頭初始化"""
              self.sensor = Sensor()
              self.sensor.reset()
      
              self.sensor.set_hmirror(False)
              self.sensor.set_vflip(False)
              # 通道2:圖傳(YUV420SP)
              self.sensor.set_framesize(
                  width=STREAM_WIDTH,
                  height=STREAM_HEIGHT,
                  chn=CAM_CHN_ID_2,
                  alignment=12,
              )
              self.sensor.set_pixformat(Sensor.YUV420SP, chn=CAM_CHN_ID_2)
              """ 攝像頭通道2綁定到視頻編碼器"""
              bind_info_ID2 = self.sensor.bind_info(chn=CAM_CHN_ID_2)
      
              self.link = MediaManager.link(
                  bind_info_ID2["src"],
                  (VIDEO_ENCODE_MOD_ID, VENC_DEV_ID, VENC_CHN_ID_0),
              )
      
          def __deinit__(self):
              self.sensor.stop()
              del self.link
      
          def run(self):
              self.sensor.run()
      
          def capture_frame(self, chn=CAM_CHN_ID_0):
              """
              返回一幀圖像數據
              """
              return self.sensor.snapshot(chn)
      

      pic3_代碼流程圖

          # ---------- 攝像頭初始化 ----------
          camera = Camera()
      
          # ---------- RTSPStreamer ----------
          print("初始化 RTSPStreamer")
          rtsp = RTSPStreamer(RTSP_PORT)
      
          # ---------- 媒體管理 ----------
          print("媒體初始化")
          MediaManager.init()
      
          # ---------- 攝像頭采集 ----------
          camera.run()
      
          # ---------- 啟動 RTSPStreamer ----------
          rtsp.start()
          print("rtsp server start:", rtsp.get_rtsp_url())
      
      

      完善程序后運行,在輸出窗口可以看到創建的 RTSP 服務地址
      pic4_RTSP地址

      打開 RTSP 播放器,這里以 VLC 播放器為例
      pic5_VLC播放器

      pic6_串流設置
      設置好后就可以看到 K230 傳的圖片了
      pic7_演示畫面

      參考

      VENC 模塊 API 手冊
      RTSP 模塊 API 手冊
      立創·廬山派 K230CanMV 開發板
      K230 結合 RTSP 實現無線圖傳

      posted @ 2025-11-01 16:30  菩薩野蠻  閱讀(17)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中文字幕国产精品日韩| 亚洲最大福利视频网| 中文 在线 日韩 亚洲 欧美| 2021最新国产精品网站| 精品人妻免费看一区二区三区| 日本一区二区精品色超碰| 国产成人久久精品二三区| 久久精品国产字幕高潮| 天堂mv在线mv免费mv香蕉| 国产一区二区三区美女| 女人扒开的小泬高潮喷小| 日韩精品人妻av一区二区三区| 成人国产乱对白在线观看| 国产成人AV一区二区三区在线| 高碑店市| 日韩老熟女av搜索结果| 在线中文字幕国产一区| 内地自拍三级在线观看| 日本亚洲欧洲无免费码在线| 国内精品综合九九久久精品| 2020久久国产综合精品swag| 蜜桃av无码免费看永久| 国产99精品成人午夜在线| 日韩精品 在线 国产 丝袜| 亚洲人成亚洲人成在线观看| 亚洲精品国产综合麻豆久久99| 亚洲乳大丰满中文字幕| 久久婷婷五月综合97色直播| 免费观看激色视频网站| 亚洲国产成人资源在线| 国产精品成| 亚洲区欧美区综合区自拍区| 国产精品大片中文字幕| 国产乱国产乱老熟300部视频| 国产午夜福利不卡在线观看| 黄色A级国产免费大片视频| 宝丰县| 好吊视频一区二区三区人妖| 污污网站18禁在线永久免费观看| 国产精品自拍中文字幕| 亚洲国产成人无码av在线播放 |