Example: 08-RPC-Library/36-Web-Servers/rtsp_video_server_wlan.py

# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2023 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# RTSP Video Server
#
# This example shows off how to stream video over RTSP with your OpenMV Cam.
#
# You can use a program like VLC to view the video stream by connecting to the
# OpenMV Cam's IP address. However, OpenMV IDE has an FFPLAY based RSTP Viewer built-in which
# you can use by going to Tools->Video Tools->Play RSTP Stream.

import network
import omv
import rtsp
import sensor
import time

# 如果您在Linux上使用VLC,可能需要安装live555库以支持RTSP功能。
# 若您使用的是Ubuntu系统,请运行以下命令:
#
# sudo apt-get install livemedia-utils

# 关于VLC等程序的延迟问题,默认通常会缓冲1秒的视频
# 才开始播放。要减少延迟,您需要降低网络缓存设置,这可以通过
# 在VLC中打开网络流时选择“显示更多选项”来调整。您可以将缓存时间降至10毫秒
# 以实现视频的实时播放。

sensor.reset()

sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)

# 从OpenMV Cam端关闭与IDE的帧缓冲区连接。
#
# 在手动压缩更高质量的jpeg图像时需要这样做
# 以便OpenMV Cam不会尝试使用回退方式将它们流式传输到IDE。
# 如果JPEG图像太大,无法放入OpenMV Cam的IDE JPEG帧缓冲区时的机制。

omv.disable_fb(True)

# 设置网络接口

network_if = network.WLAN(network.STA_IF)
network_if.active(True)
network_if.connect("your-ssid", "your-password")
while not network_if.isconnected():
    print("Trying to connect. Note this may take a while...")
    time.sleep_ms(1000)

# 设置RTSP服务器

server = rtsp.rtsp_server(network_if)

# 对于以下回调函数:
#
# `pathname`是客户端请求的流资源名称。如果不需要,您可以忽略此参数。
# 否则,您可以用它来决定返回哪个图像对象。默认情况下,路径
# 名称会是“/”。
#
# `session`是一个随机数,当新连接建立时会改变。您可以利用
# session配合字典来区分对同一文件名的不同访问。

# 追踪当前帧率。
clock = time.clock()


def setup_callback(pathname, session):
    print('Opening "%s" in session %d' % (pathname, session))


def play_callback(pathname, session):
    clock.reset()
    clock.tick()
    print('Playing "%s" in session %d' % (pathname, session))


def pause_callback(pathname, session):  # VLC 仅在本地暂停。此功能从未被调用。
    print('Pausing "%s" in session %d' % (pathname, session))


def teardown_callback(pathname, session):
    print('Closing "%s" in session %d' % (pathname, session))


server.register_setup_cb(setup_callback)
server.register_play_cb(play_callback)
server.register_pause_cb(pause_callback)
server.register_teardown_cb(teardown_callback)


# 每次需要新帧时调用。
def image_callback(pathname, session):
    img = sensor.snapshot()
    # 标记图像和/或执行各种操作。
    print(clock.fps())
    clock.tick()
    return img


# 流不会返回。当需要获取图像对象发送时,它将调用 `image_callback`
# 给连接到服务器的远程 RTSP 客户端。

server.stream(image_callback, quality=70)

results matching ""

    No results matching ""