分类:
2010-03-02 14:34:59
Splitter在TCPMP中主要是通过InputThread线程和主线程中的Format_FillQueue()函数实现的。
InputThread线程中主要通过调用Format_ReadInput()函数,将输入流中的数据读取到内存链表中。
过程如下:
Format_FillQueue()函数是对Packet操作的,过程如下:
在demuxer的ReadPacket()函数中,要读取大段数据时,会调用Reader_ReadAsRef()函数,从内存链表Reader->BufferFirst中读取数据到Packet中。
如果内存链表中已读取的输入流数据大小不够,则不等待InputThread线程,直接调用Format_ReadBuffer()函数,先从输入流中读取更多的数据到内存链表Reader->BufferFirst中。
主线程在调用Format_FillQueue()函数后,将有读取数据的Pakcet保存在format_stream的format_packet* PacketFirst链表中,供后续使用。
数据结构关系是:
format_packet->format_ref->format_buffer