rtsp_video_server_wlan.py

# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# خادم فيديو RTSP
#
# يوضح هذا المثال كيفية بث الفيديو عبر RTSP باستخدام كاميرا OpenMV.
#
# يمكنك استخدام برنامج مثل VLC لعرض بث الفيديو عن طريق الاتصال بـ
# عنوان IP الخاص بكاميرا OpenMV. ومع ذلك، يحتوي OpenMV IDE على عارض RTSP مدمج يعتمد على FFPLAY
# يمكنك استخدامه بالذهاب إلى Tools->Video Tools->Play RSTP Stream.

import network
import rtsp
import csi
import time

# إذا كنت تستخدم VLC على لينكس، فقد تحتاج إلى تثبيت مكتبة live555 لدعم RTSP حتى
# يعمل. إذا كنت تستخدم أوبونتو، فقم بتشغيل الأمر التالي:
#
# sudo apt-get install livemedia-utils

# بخصوص زمن الاستجابة في برامج مثل VLC، يُضبط الافتراضي عادةً على تخزين ثانية واحدة من الفيديو مؤقتًا
# قبل التشغيل. لتقليل ذلك، تحتاج إلى تقليل التخزين المؤقت للشبكة الذي يمكن ضبطه باستخدام
# "show more options" عند فتح بث الشبكة في VLC. يمكنك تقليل هذا إلى حوالي 10 ميلي ثانية
# لجعل الفيديو فوريًا (real-time).

csi0 = csi.CSI(stream=False)
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)

# إعداد واجهة الشبكة

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)

# بالنسبة لدوال رد النداء (callback) أدناه:
#
# `pathname` هو اسم مورد البث الذي يريده العميل. يمكنك تجاهل هذا إذا لم يكن
# مطلوبًا. وإلا، يمكنك استخدامه لتحديد كائن الصورة الذي سيتم إرجاعه. بشكل افتراضي يكون المسار
# بالاسم "/".
#
# `session` هو رقم عشوائي سيتغير عند إنشاء اتصال جديد. يمكنك استخدام
# session مع قاموس (dictionary) للتمييز بين عمليات الوصول المختلفة لنفس اسم الملف.

# تتبع معدل الإطارات الحالي.
clock = time.clock()


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


def play_callback(pathname, session):
    global clock
    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):
    global csi0
    global clock
    img = csi0.snapshot()
    # وضع علامات على الصورة و/أو القيام بأمور مختلفة.
    print(clock.fps())
    clock.tick()
    return img


# لا تُرجع دالة البث قيمة. ستستدعي `image_callback` عندما تحتاج للحصول على كائن صورة لإرساله
# إلى عميل rtsp البعيد المتصل بالخادم.

server.stream(image_callback, quality=70)

results matching ""

    No results matching ""