RAiV geliştirici dostu olacak şekilde tasarlandı. RAiV'in kullanımı en kolay fonksiyonlarından biri muhtemelen H.264 akışıdır. RAiV, donanım tabanlı bir H.264 kodlayıcı içerir. Ayrıca, düşük gecikme ve esneklik için iletim sırasında WebSocket protokolünü kullanır. Burada, H.264 akışını nasıl kontrol edebileceğinizi göstereceğiz.

22 satırda H264 Akışı

RAiV'in H264 akışını kontrol etmek için çağrılacak yalnızca bir fonksiyon vardır: setEncoderStatus(). İşlemin geri kalanı arka planda halledilir.

Bu örneği, gerekli tüm modüllerle birlikte Github Depomuzda bulabilirsiniz. Lütfen örnek kodu github deposundan indirin ve web arayüzü üzerinden RAiV'e yükleyin.

# For command listener
import qCU_Net
# For H.264 streamer
import qCU_Stream

def main():
    # Start TCP server for listening on streaming commands
    qCU_Net.start_tcp_server(host='192.168.10.55', port=12345, json_handler=enc_json_handler)

# Incomming message payload parser
def enc_json_handler(client_socket, json_payload, client_address):
    # Check live streaming request
    if isinstance(json_payload, dict):
        if 'live_isStart' in json_payload and 'live_isStereo' in json_payload:
            isStart = json_payload['live_isStart']
            isStereo = json_payload['live_isStereo']
            print(f"Live setting start: {isStart} stereo: {isStereo}")
            qCU_Stream.setEncoderStatus(isStart, isStereo)


if __name__ == "__main__":
    main()

Canlı Sunum

Şimdi, PC tarafında, H.264 akışını uzaktan kontrol etmek için Github depomuzdaki kodu başlatın.

RAiV ile H.264 Akışı

Otomatik Pozlama Kazanç ile H264 Akışı

Otomatik pozlama ve kazanç ayarlaması, H.264 akışından biraz daha karmaşıktır. RAiV çeşitli farklı durumlarda kullanılabildiğinden, pozlama kazanç ayarlama algoritmasını kullanıcılara bıraktık. Böylece kullanıcılar, kullanım durumlarına en uygun algoritmayı seçebilir ve/veya gerçekleştirebilirler.

Bu örneği, gerekli tüm modüllerle birlikte Github Depomuzda bulabilirsiniz. Lütfen örnek kodu github deposundan indirin ve web arayüzü üzerinden RAiV'e yükleyin.

# For command listener
import qCU_Net
# For H.264 streamer
import qCU_Stream

# For camera control
from qCU_CCtrl import qCU_CCtrl

# For accessing data pipeline
from qCU_Data import qCUData

# For calculating exposure and gain values
from  autoExpoGain import AutoExposureGain

# For image colorspace and scale modification
import cv2

def get_latest_frame():

    if gQCUData is None:
        raise RuntimeError("Data interface was not initialized")

    # Get current frame
    frame = gQCUData.getDataFrame()

    if frame is None:
        return None

    # Convert right image from RGB to Grayscale
    gray_frame = cv2.cvtColor(frame[1], cv2.COLOR_RGB2GRAY)

    # Resize the grayscale image to FRAME_WIDTH and FRAME_HEIGHT//2
    [monoWidth, monoHeight] = gray_frame.shape
    resized_gray_frame = cv2.resize(gray_frame, (monoWidth, monoHeight//2))

    return resized_gray_frame



def enc_json_handler(client_socket, json_payload, client_address):
    # Check live streaming request
    if isinstance(json_payload, dict):
        if 'live_isStart' in json_payload and 'live_isStereo' in json_payload:
            isStart = json_payload['live_isStart']
            isStereo = json_payload['live_isStereo']
            print(f"Live setting start: {isStart} stereo: {isStereo}")
            qCU_Stream.setEncoderStatus(isStart, isStereo)

    # Check camera control parameter request
    if isinstance(json_payload, dict):
        if 'get_camCtrl' in json_payload:

            # Initialize the camera control object
            cameraCtrl = qCU_CCtrl()

            # Get camera control parameters
            expo, gain, ret_code = cameraCtrl.get_expo_gain()

            print(f"{expo} {gain} {ret_code}")

            payload = {
            "getCCtrl_expo": expo,
            "getCCtrl_gain": gain
            }

            # Send camera control parameters to client
            qCU_Net.send_response_to_client(client_socket, payload)

            # Delete the camera control object
            del cameraCtrl

    # Check camera control parameter request
    if isinstance(json_payload, dict):
        if 'set_camCtrl' in json_payload:

            curExpo = json_payload['expo']
            curGain = json_payload['gain']

            # Initialize the camera control object
            cameraCtrl = qCU_CCtrl()

            # Get camera control parameters
            ret_code = cameraCtrl.set_expo_gain(curExpo, curGain)

            print(f"{curExpo} {curGain} {ret_code}")

            payload = {
            "set_camCtrl_status": ret_code
            }

            # Send camera control parameters to client
            qCU_Net.send_response_to_client(client_socket, payload)

            # Delete the camera control object
            del cameraCtrl

    # Check camera control parameter request
    if isinstance(json_payload, dict):
        if 'auto_camCtrl' in json_payload:
            isAutoCamCtrl = json_payload['auto_camCtrl']

            autoPeriodMs = json_payload.get('auto_period_ms')

            if isAutoCamCtrl == 1:
                # Start
                gAutoEG.start(data_func=get_latest_frame, interval_ms=autoPeriodMs)
            else:
                # Stop
                gAutoEG.stop()


def main():
    # Declara global variables
    global gQCUData
    global gAutoEG

    # Create the data interface
    gQCUData = qCUData()
    if not gQCUData.init():
        print("Failed to initialize shared memory")
        return

    # Initialize auto exposure gain with camera control parameters
    tmpCCtrl = qCU_CCtrl()
    camCtrlRanges = tmpCCtrl.get_cam_ctrl_ranges()
    print(f"Camera control ranges: {camCtrlRanges}")
    del tmpCCtrl
    #
    gAutoEG = AutoExposureGain(cctrl_ranges=camCtrlRanges, target_brightness=128, tolerance=10, adjustment_factor=0.5)

    qCU_Net.start_tcp_server(host='192.168.10.55', port=12345, json_handler=enc_json_handler)


if __name__ == "__main__":
    main()

Canlı Sunum

Şimdi, PC tarafında, otomatik pozlama ve kazanç ile H.264 akışını kontrol etmek için Github depomuzdaki kodu başlatın.

RAiV ile H.264 Akışı ve Otomatik Pozlama/Kazanç

Sırada Ne Var?

Python SDK'mızı inceleyin:

RAiV Python SDK

Örnek Kodlar İçin Github Depomuzu İnceleyin:

Github Depomuz