Module

def bmf.python_sdk.module.Module.init (self, node=None, option=None)

def bmf.python_sdk.module.Module.init (self)

def bmf.python_sdk.module.Module.reset (self)

def bmf.python_sdk.module.Module.dynamic_reset (self, opt_reset=None)

def bmf.python_sdk.module.Module.set_node (self, node)

def bmf.python_sdk.module.Module.is_subgraph (self)

def bmf.python_sdk.module.Module.process (self, task)

def bmf.python_sdk.module.Module.close (self)

def bmf.python_sdk.module.Module.need_hungry_check (self, input_idx)

def bmf.python_sdk.module.Module.is_hungry (self, input_idx)

def bmf.python_sdk.module.Module.is_infinity (self)

def bmf.python_sdk.module.Module.set_callback (self, callback)

def bmf.python_sdk.module.Module.get_graph_config (self)

详细描述

Module class in Python Module SDK.

函数文档

 init()

def bmf.python_sdk.module.Module.__init__ (  self, 
   node = None, 
   option = None 
 )   

构建 BMF 模块。

Parameters

  • node_id:唯一标识
  • json_param:模块的 json 参数

Returns

     def __init__(self, node=None, option=None):

示例:

from bmf import (
    Module,
    Log,
    LogLevel,
    InputType,
    ProcessResult,
    Packet,
    AudioFrame,
    Timestamp,
    scale_av_pts,
    av_time_base,
    BmfCallBackType,
)

class Audiomix(Module):
    def __init__(self, node, option=None):
        self.node_ = node
        self.option = option
        # we only support audio frame: 44100 lc-aac, fltp, stereo 1024 samples
        self.timebase = Rational(1, sample_rate)
        self.volume_table = dict()

如果您需要完整代码,请参阅 audiomix.py

 close()

def bmf.python_sdk.module.Module.close (  self )  

关闭模块。

     def close(self):

 dynamic_reset()

def bmf.python_sdk.module.Module.dynamic_reset (  self, 
   opt_reset = None 
 )   

当需要更新选项时,使用 dynamic_reset 模块。

Parameters

  • opt_reset:选项的 dict value
     def dynamic_reset(self, opt_reset=None):

示例:

from bmf import (
    Module,
    Log,
    LogLevel,
    InputType,
    ProcessResult,
    Packet,
    AudioFrame,
    Timestamp,
    scale_av_pts,
    av_time_base,
    BmfCallBackType,
)

class Audiomix(Module):
    def dynamic_reset(self, opt_reset=None):
        Log.log_node(
            LogLevel.INFO,
            self.node_,
            "opt_reset type:",
            type(opt_reset),
            "opt_reset: ",
            opt_reset,
        )
        if opt_reset is None:
            return
        if self.option is None:
            self.option = dict()
        for (para, value) in opt_reset.items():
            self.option[para] = value
        Log.log_node(
            LogLevel.INFO,
            self.node_,
            "opt_reset:",
            opt_reset,
            "self.option: ",
            self.option,
        )

如果您需要完整代码,请参阅 audiomix.py

 get_graph_config()

def bmf.python_sdk.module.Module.get_graph_config (  self )  

获取模块的 graph config。

Returns

     def get_graph_config(self):

 init()

def bmf.python_sdk.module.Module.init (  self )  

初始化模块。

     def init(self):

 is_hungry()

def bmf.python_sdk.module.Module.is_hungry (  self, 
   input_idx 
 )   

检查模块的 input stream 是否需要数据。

Parameters

  • input_idx:输入流的id

Returns

     def is_hungry(self,input_idx):

 is_infinity()

def bmf.python_sdk.module.Module.is_infinity (  self )  

检查模块是否无穷大。

Returns

     def is_infinity(self):

 is_subgraph()

def bmf.python_sdk.module.Module.is_subgraph (  self )  

检查模块是否是子图。

Returns

     def is_subgraph(self):

 need_hungry_check()

def bmf.python_sdk.module.Module.need_hungry_check (  self, 
   input_idx 
 )   

检查模块的输入流是否应该进行 hungry check。

Parameters

  • input_idx:输入流的 id

Returns

     def need_hungry_check(self,input_idx):

 process()

def bmf.python_sdk.module.Module.process (  self, 
   task 
 )   

process task

Parameters

  • task:引用 Task class。 该模块应处理任务中的 input packet 并为该 task 生成 output packet

Returns

     def process(self, task):

示例:

from bmf import (
    Module,
    Log,
    LogLevel,
    InputType,
    ProcessResult,
    Packet,
    AudioFrame,
    Timestamp,
    scale_av_pts,
    av_time_base,
    BmfCallBackType,
)

class Audiomix(Module):
    def process(self, task):
        output_queue = task.get_outputs().get(0, None)
        for (input_id, input_packets) in task.get_inputs().items():
            Log.log(LogLevel.DEBUG, "audiomix get input stream id:", input_id)
            while not input_packets.empty():
                timestamp = 0
                bmf_pkt = input_packets.get()
                frame_list = bmf_pkt.get(list)
                if frame_list:
                    timestamp = frame_list[0][1]

                Log.log(
                    LogLevel.DEBUG,
                    "audiomix do mix, framelist len",
                    len(frame_list),
                    "timestamp: ",
                    timestamp,
                )
                audio_frame = self.do_mix(frame_list)
                audio_frame.time_base = self.timebase
                audio_frame.pts = scale_av_pts(
                    timestamp,
                    av_time_base,
                    float(self.timebase.num) / self.timebase.den,
                )
                # Log.log(
                #    LogLevel.DEBUG,
                #    "audio mix output frame, sample_rate:",
                #    audio_frame.sample_rate,
                #    "samples:",
                #    audio_frame.samples,
                #    "layout:",
                #    audio_frame.layout,
                #    "format:",
                #    audio_frame.format,
                #    "timestamp:",
                #    timestamp,
                # )
                output_pkt = Packet(audio_frame)
                output_pkt.timestamp = timestamp

                if output_queue is not None:
                    output_queue.put(output_pkt)

        return ProcessResult.OK

如果您需要完整代码,请参阅 audiomix.py

 reset()

def bmf.python_sdk.module.Module.reset (  self )  

当模块需要重置时重置模块。

     def reset(self):

示例:

from bmf import (
    Module,
    Log,
    LogLevel,
    InputType,
    ProcessResult,
    Packet,
    AudioFrame,
    Timestamp,
    scale_av_pts,
    av_time_base,
    BmfCallBackType,
)

class Audiomix(Module):
    def reset(self):
        Log.log_node(LogLevel.DEBUG, self.node_, " is doing reset")

如果您需要完整代码,请参阅 audiomix.py

 set_callback()

def bmf.python_sdk.module.Module.set_callback (  self, 
   callback 
 )   

为该模块设置 graph callback。

Parameters

  • callback:graph callback
     def set_callback(self,callback):

 set_node()

def bmf.python_sdk.module.Module.set_node (  self, 
   node 
 )   

设置改模块的 node id

Parameters

  • node:该模块的 node id
     def set_node(self, node):

最后修改 July 16, 2024 : update the macos building doc (6d093eb)