跳到主要内容

Encoder对象

Encoder对象实现了对视频数据的编码压缩功能,包含了encodeencode_fileget_imgclose等几种方法,详细说明如下:

encode

【功能描述】

配置并使能encode编码模块

【函数声明】
Encoder.encode(video_chn, encode_type , width, height, bits)
【参数描述】
参数名称描述取值范围
video_chn指定视频编码器的通道号范围0~31
encode_type视频编码类型范围1~3,分别对应H264H265MJPEG
width输入编码模块的图像宽度不超过4096
height输入编码模块的图像高度不超过4096
bits编码模块的比特率默认8000kbps
【使用方法】
#create encode object
encode = libsrcampy.Encoder()

#enable encode channel 0, solution: 1080p, format: H264
ret = encode.encode(0, 1, 1920, 1080)
【返回值】
返回值定义描述
0成功
-1失败
【注意事项】

【参考代码】

encode_file

【功能描述】

向使能的编码通道输入图像文件,按预定格式进行编码

【函数声明】
Encoder.encode_file(img)
【参数描述】
参数名称描述取值范围
img需要编码的图像数据,需要使用NV12格式
【使用方法】
fin = open("output.img", "rb")
input_img = fin.read()
fin.close()

#input image data to encode
ret = encode.encode_file(input_img)
【返回值】
返回值定义描述
0成功
-1失败
【注意事项】

【参考代码】

get_img

【功能描述】

获取编码后的数据

【函数声明】
Encoder.get_img()
【使用方法】

【参数描述】

【返回值】
返回值定义描述
0成功
-1失败
【注意事项】

该接口需要在调用Encoder.encode()创建编码通道后使用

【参考代码】
import sys, os, time

import numpy as np
import cv2
from hobot_vio import libsrcampy

def test_encode():
#create encode object
enc = libsrcampy.Encoder()
ret = enc.encode(0, 1, 1920, 1080)
print("Encoder encode return:%d" % ret)

#save encoded data to file
fo = open("encode.h264", "wb+")
a = 0
fin = open("output.img", "rb")
input_img = fin.read()
fin.close()
while a < 100:
#send image data to encoder
ret = enc.encode_file(input_img)
print("Encoder encode_file return:%d" % ret)
#get encoded data
img = enc.get_img()
if img is not None:
fo.write(img)
print("encode write image success count: %d" % a)
else:
print("encode write image failed count: %d" % a)
a = a + 1

enc.close()
print("test_encode done!!!")

test_encode()

close

【功能描述】

关闭使能的编码通道。

【函数声明】
Encoder.close()
【参数描述】

【使用方法】

【返回值】
返回值定义描述
0成功
-1失败
【注意事项】

该接口需要在调用Encoder.encode()创建编码通道后使用

【参考代码】