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?