程序大作戰(zhàn),萌出一臉血!
非常開(kāi)心生平所寫(xiě)的第一篇博客就獲得了廣泛的贊譽(yù),還有幸登上了編輯推薦,看來(lái)不僅是程序人生寂靜歡喜,博客生涯也是歲月靜好??!在此還是把本人的杰作高掛:《程序人生的寂靜歡喜》,高調(diào)還是要有的,萬(wàn)一紅了呢?你說(shuō)是吧?
一. 引子
大家眼里的程序首先是這樣的:
- namespace OMCS.Passive
- {
- // 摘要:
- // 多媒體設(shè)備管理器基礎(chǔ)接口。用于管理本地的所有多媒體設(shè)備。
- public interface IMultimediaManager : IDisposable
- {
- //
- // 摘要:
- // 是否根據(jù)音頻反饋以及視頻丟幀情況自動(dòng)調(diào)整視頻編碼質(zhì)量。
- bool AutoAdjustCameraEncodeQuality { get; set; }
- //
- // 摘要:
- // 掉線后,是否自動(dòng)重連。
- bool AutoReconnect { get; set; }
- //
- // 摘要:
- // 語(yǔ)音視頻聊天組入口。
- IChatGroupEntrance ChatGroupEntrance { get; }
- //
- // 摘要:
- // 是否將話筒采集到的音頻輸出給Guest。
- bool OutputAudio { get; set; }
- //
- // 摘要:
- // 是否將桌面圖像輸出給Guest。默認(rèn)值為true。
- bool OutputDesktop { get; set; }
- //
- // 摘要:
- // 是否將攝像頭集到的視頻輸出給Guest。 默認(rèn)值為true。
- bool OutputVideo { get; set; }
- //
- // 摘要:
- // 當(dāng)通道繁忙時(shí),采取的視頻幀(來(lái)自攝像頭)丟棄模型。默認(rèn)值為DiscardWhenNeed。
- FrameDisardedMode VideoFrameDisardedMode { get; set; }
- //
- // 摘要:
- // 剛剛從話筒采集的音頻幀。
- event CbGeneric<byte[]> AudioCaptured;
- //
- // 摘要:
- // 剛剛播放的音頻幀。
- event CbGeneric<byte[]> AudioPlayed;
- //
- // 摘要:
- // 與多媒體服務(wù)器建立連接,并初始化本地多媒體管理器。 如果與服務(wù)器連接失敗,將拋出網(wǎng)絡(luò)異常。
- void Initialize(string userID, string password, string serverIP, int serverPort);
- //
- // 摘要:
- // 和目標(biāo)用戶之間是否打通了P2P通道?
- bool IsP2PChannelExist(string destUserID);
- }
- }
可是你并不會(huì)知道他們?cè)谖已劾锲鋵?shí)是這樣的——
二.程序大作戰(zhàn)
1.所謂的:“ OMCS 多媒體管理器,用于管理本地的所有多媒體設(shè)備。” 其實(shí)就是這個(gè)意思:
2.所謂的布爾類(lèi)型的屬性,其實(shí)就是一個(gè)個(gè)開(kāi)關(guān)嘛,像這樣:
2.所謂方法,其實(shí)就是一個(gè)個(gè)按鈕,就像這樣:
3.所謂事件,其實(shí)就是一個(gè)個(gè)插槽,就像這樣:
4、所謂的布爾類(lèi)型的只讀屬性,其實(shí)就是一個(gè)個(gè)指示燈,就像這樣:
5.另外四個(gè)連接器可以就像這樣:
三.萌出一臉血
最后,將這個(gè)零件全部組裝起來(lái),就成為了一個(gè) OMCS 客戶端了。是不是很萌呢?
運(yùn)用形象化的思維,我們可以把原本很抽象枯燥,條分縷析的代碼,變得鮮活、生動(dòng)而又富有趣味,大家在理解程序的時(shí)候也可以借鑒一下哦。