vlc學習計畫(5) 網路資料流接收處理過程分析

2021-06-04 14:52:07 字數 3167 閱讀 9590

網路資料流接收處理分析

1、在input.c(src\input)檔案中的主線程迴圈

thread in charge of processing the network packets and demultiplexing

runthread( input_thread_t *p_input )

initthread( p_input ) ;

input_selectes( p_input, p_input->stream.p_newly_selected_es );

/* read and demultiplex some data. */

i_count = p_input->pf_demux( p_input );

2、在下列函式中:

分離出access  , demux  , name字串 ;

根據分離出的access  字串通過module_need函式找到acess 指標模組;

根據分離出的demux  字串通過module_need函式找到demux  指標模組;

static int initthread( input_thread_t * p_input )

msg_dbg( p_input, "access `%s', demux `%s', name `%s'",

p_input->psz_access, p_input->psz_demux, p_input->psz_name );

p_input->p_access = module_need( p_input, "access",

p_input->psz_access, vlc_true );

while( !input_fillbuffer( p_input ) )

p_input->p_demux =

module_need( p_input, "demux",

(p_input->psz_demux && *p_input->psz_demux) ?

p_input->psz_demux : "$demux",

(p_input->psz_demux && *p_input->psz_demux) ?

vlc_true : vlc_false );

3、在ps.c (module\demux\mpeg)檔案中

a.通過訊息對映巨集賦值啟動函式activate;

b.通過函式activate賦值p_input->pf_demux = demux;

c. 通過函式module_need( p_input, "mpeg-system", null, 0 ) 啟用p_input->p_demux_data->mpeg.pf_read_ps( p_input, &p_data )函式(pf_read_ps);

d.在initthread函式中啟用;

static int activate( vlc_object_t * p_this )

/* set the demux function */

p_input->pf_demux = demux;

p_input->p_private = (void*)&p_demux->mpeg;

p_demux->p_module = module_need( p_input, "mpeg-system", null, 0 );

4、在system.c (module\demux\mpeg)檔案中

賦值解碼模組mpeg_demux_t的成員函式;

static int activate ( vlc_object_t *p_this )

;mpeg_demux.cur_scr_time = -1;

memcpy( p_this->p_private, &mpeg_demux, sizeof( mpeg_demux ) ); 

return vlc_success;

並且申明函式static ssize_t readps( input_thread_t * p_input, data_packet_t ** pp_data ); 

5、在ps.c (module\demux\mpeg)檔案中

demux( input_thread_t * p_input )

i_result = p_input->p_demux_data->mpeg.pf_read_ps( p_input, &p_data );

p_input->p_demux_data->mpeg.pf_demux_ps( p_input, p_data );

進行讀取資料和分離工作;

6、在system.c (module\demux\mpeg)檔案中

資料走向圖如下

readps-> peek-> input_peek(src\input\input_ext-plugins.c)-> input_fillbuffert 通過

i_ret = p_input->pf_read( p_input,

(byte_t *)p_buf + sizeof(data_buffer_t) + i_remains,

p_input->i_bufsize );

input_thread_t結構的pf_read函式成員如果是為udp.c(modules\access)的rtpchoose函式

則在開啟access(udp 模組)時通過module_need 啟用;

啟用網路讀資料模組 rtpchoose(modules\access\ udp.c)->read->net_read(src\misc\net.c);

7、在input_programs.c(src\input)檔案中

執行解碼器對es流解碼

int input_selectes( input_thread_t * p_input, es_descriptor_t * p_es )

p_es->p_dec = input_rundecoder( p_input, p_es );

input_selectes(src\input\input_programs.c)->input_rundecoder(src\input\input_dec.c)->decoderthread->decoderdecode ->vout_displaypicture

vlc學習計畫(6) 網路資料流接收處理過程分析

網路資料流接收處理分析 1 在input.c src input 檔案中的主線程迴圈 thread in charge of processing the work packets and demultiplexing runthread input thread t p input 2 在下列函式...

bzoj2132 網路流 最小割 圈地計畫

description 最近房地產商gdoi group of dumbbells or idiots 從noi nuts old idiots 手中得到了一塊開發土地。據了解,這塊土地是一塊矩形的區域,可以縱橫劃分為n m塊小區域。gdoi要求將這些區域分為商業區和工業區來開發。根 據不同的地形環...

docker學習筆記5 網路設定

在工作和學習中我們往往會涉及到多個docker之間內部通訊或docker與宿主主機外部通訊的情況,這些都是通過docker的網路設定來實現的。下面我們就來了解下docker的網路配置,以及相關設定。docker在預設情況下有以下三種網路配置方式,在docker安裝完成後也會預設進行建立 bridge...