Linux DVB api 笔记
Linux DVB interface
Demux
用途:硬件解复用
设备路径: /dev/dvb/adapter0/demux0
数据类型:
dmx_output_t
typedef enum
{
DMX_OUT_DECODER,
DMX_OUT_TAP,
DMX_OUT_TS_TAP
} dmx_output_t;
DMX_OUT_TAP:将流输出到调用ioctl的demux设备上
DMX_OUT_TS_TAP:将流输出到逻辑 DVR设备上 /dev/dvb/adapter0/dvr0 。输出一个ts流到该设备。并且复用所有设置了该标志的流。
函数调用
open: 在 /dev/dvb/adapter0/demux0 上使用,将会分配以后一个新的filter并返回一个handle用来持续的控制该filter。
该函数的每一次返回的文件描述附,是一个单独filter的引用。
/dev/dvb/adapter0/dvr0 是一个逻辑设备用来检索传输流。从该设备读取,将得到一个传输流,该流包含了所有设置了DMX_OUT_TS_TAP标志的filter的PES包。
read()
读取filtered中的数据。可能是secion或者PES数据。数据被存储在驱动内部的循环缓冲区中。
当返回的是secion数据,驱动则总是返回完整的单独section(即使有足够的空间放入其他数据)。如果数据超过缓冲区大小则在下次调用时继续返回。
内部缓冲默认为2*4096bytes(secion的两倍大小)
为了能够读取,必须通过ioctl设置要过滤的secion或者PES。并指定DMX_START 或者ioctl时指定DMX_IMMEDIATE_START 标记。
write()
仅对/dev/dvb/adapter0/dvr0管用,还是在内部于物理demux设备关联
ioctl()
DMX_START 开始filter
DMX_STOP 对应的停止
DMX_SET_FILTER
设置filter
struct dmx_sct_filter_params
{
uint16_t pid;
dmx_filter_t filter;
uint32_t timeout;
uint32_t flags;
#define DMX_CHECK_CRC 1
#define DMX_ONESHOT 2
#define DMX_IMMEDIATE_START 4
};
timeout:设置读取secion超时,0为永不超时
flags:指定了是否CRC检查,仅读取一次,DMX_SET_FILTER后立即开始filter
DMX_SET_PES_FILTER
用来设置一个PES filter。传输流的目标必须设定,一个PES可以直接送入video decoder。如果该filter之前设置过,则会取消当前的filter。并清空缓冲区。
DMX_SET_BUFFER_SIZE
设置缓冲区大小,默认2*4096bytes
DMX_GET_EVENT
返回一个事件,必须在阻塞模式下。
DMX_GET_STC
设置当前系统STC system time counter?