video

    Supports playback and recording of avi video

    Global functions

    open(path, record=False, interval=100000, quality=50, width=320, height=240, audio=False, sample_rate=44100, channels=1)

    Open a file to play or record

    Parameters

    • path: file path, such as /sd/badapple.avi
    • record: Whether to record, if you select Ture, the video will be recorded, otherwise it will be played. Default False
    • interval: The recording frame interval, the unit is microseconds, fps = 1000000/interval, the default is 100000, that is, 10 frames per second
    • quality: jpeg compression quality (%), default 50
    • width: recording screen width, default 320
    • height: Record screen height, default 240
    • audio: Whether to record audio, default is False
    • sample_rate: Record audio sample rate, default 44100 (44.1k)
    • channels: the number of recorded audio channels, the default is 1, which is mono

    return value

    Return an object, the object returned is different according to different formats.

    Currently only the avi format is supported, and objects created by the avi class are returned

    Class avi

    Returned by the video.open() function

    play()

    Play video, parse the data (audio or video) every time it is called

    return value

    • 0: End of playback
    • 1: Now playing
    • 2: Pause (reserve)
    • 3: The currently decoded frame is a video frame
    • 4: The currently decoded frame is an audio frame

    capture(img)

    Capture video frames (sequential capture)

    Parameters

    • img: image object, used to store the captured image

    return value

    • 0: The end of the video has been reached
    • 3: The video frame is successfully captured

    volume(volume)

    Set volume

    Parameters

    • volume: volume value, value range: [0,100]

    return value

    Set volume value, value range [0,100]

    record()

    Record video and audio. Each time you call to record one frame, the function will limit the speed. If the recording interval is not reached, it will block before reaching the set interval.

    return value

    The length of the current frame of the recorded video

    Routine

    Example 1: Play avi video

    First of all, make sure that the video is 320x240 size, the video compression format is mjpeg, and the audio compression format is PCM.

    You can download the video that can be used for testing here: badapple.avi

    import video,time
    from Maix import GPIO
    
    fm.register(34, fm.fpioa.I2S0_OUT_D1)
    fm.register(35, fm.fpioa.I2S0_SCLK)
    fm.register(33, fm.fpioa.I2S0_WS)
    fm.register(8, fm.fpioa.GPIO0)
    wifi_en=GPIO(GPIO.GPIO0,GPIO.OUT)
    wifi_en.value(0)
    
    v = video.open("/sd/badapple.avi")
    print(v)
    v.volume(50)
    while True:
        if v.play() == 0:
            print("play end")
            break
    v.__del__()
    
    

    By default, I2S0 is used to play audio, so you need to set the pin corresponding to I2S0. Turn off the WiFi because the WiFi of the Dock board interferes with the sound quality

    Example 2: Record avi video

    import sensor, image, lcd, time
    
    lcd.init(freq=15000000)
    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    
    sensor.set_hmirror(1)
    sensor.set_vflip(1)
    
    sensor.run(1)
    sensor.skip_frames(30)
    
    import video
    
    v = video.open("/sd/capture.avi", audio = False, record=1, interval=200000, quality=50)
    
    tim = time.ticks_ms()
    for i in range(50):
        tim = time.ticks_ms()
        img = sensor.snapshot()
        lcd.display(img)
        img_len = v.record(img)
        # print("record",time.ticks_ms()-tim)
    
    print("record_finish")
    v.record_finish()
    v.__del__()
    
    # play your record
    v = video.open("/sd/capture.avi")
    print(v)
    v.volume(50)
    while True:
        if v.play() == 0:
            print("play end")
            break
    
    print("play finish")
    v.__del__()
    
    lcd.clear()
    

    You can cancel the print mask to see if the actual recording interval has reached the set frame interval (for example, the 200000us set here), the actual printing should be 200ms,
    If the actual frame interval is greater than the set value, it means that the actual performance does not meet the set requirements. You need to increase the set frame interval to reduce the frame rate.
    In addition, removing the display and printing can also increase the frame rate to a certain extent.

    Example 3: Sequence avi to capture video frames and display

    import lcd
    import video
    import image
    
    lcd.init()
    v = video.open("/sd/badapple_320_240_15fps.avi")
    print(v)
    img = image.Image()
    while True:
        status = v.capture(img)
        if status != 0:
            lcd.display(img)
        else:
            print("end")
            break;
    v.__del__()