-
2007-06-14
播放channel的数据流程 - [peercast]
1. 当点击yp上的channel时,peercast收到 WM_COPYDATA 消息,WM_COPYDATA被用于在应用程序之间传递消息。
在该消息的处理中依次调用:
ChanInfo info;
servMgr->procConnectArgs((char *)pc->lpData,info);
chanMgr->findAndPlayChannel(info,false);
2.调用 procConnectArgs(char *str,ChanInfo &info);
str 是输入参数, info是输出参数。 例如当点击“FM PORT 79.0MHz”是str的值 0x0012d39c "6972C218982A533EA7582FCA9F120804?tip=58.91.207.151:7144
该值由 ChanenlID IP port组成。
在函数调用chanMgr->addHit(h,info.id,true); 将此主机作为当前的chanhit。在此函数的调用中,如果CHanMgr中没有Chanhitlist则要生成他。在ChanMgr中存在一个
Chanhitlist的链表。
3.调用findAndPlayChannel(info,false)
根据Chaninfo在ChanMgr中查找是否存在对应的channel,如果没有则要new一个channel
void PeercastSource::stream(Channel *ch)中查找chanhit,找到chanhit后调用connectFetch,peercast连接到chanhit。
4.调用 chanMgr->playChannel(ch->info);
将播放器用的信息写入play.pls文件中
"http://localhost:7144/stream/6972C218982A533EA7582FCA9F120804.ogg"5.在playChannel中,最后调用 sys->executeFile(fname);启动播放器播放视频。







