一種基于在線答疑的語音和筆跡高效可靠錄播方案

注:此方案于2015年實(shí)現(xiàn),本文已收錄專利册舞,版權(quán)所有骚露。另外蹬挤,部分段落縮減了部分內(nèi)容。

1. 背景

現(xiàn)今在線教育如此火爆棘幸,百花齊放焰扳、百家爭(zhēng)鳴。對(duì)于在線教育一對(duì)一或一對(duì)多實(shí)時(shí)語音答疑的產(chǎn)品方案中误续,有多種方案可以選擇吨悍,優(yōu)點(diǎn)和缺點(diǎn)因人因公司而異。
本方案采用語音和筆跡(板書)相結(jié)合的方式提供在線答疑服務(wù)蹋嵌。
老師通過語音和學(xué)生實(shí)時(shí)通話講解育瓜,并通過老師端的專用答疑本和數(shù)碼筆為學(xué)生進(jìn)行板書書寫,如圖1栽烂。

圖1 專用答疑本和數(shù)碼筆

答疑本和數(shù)碼筆是定制專用硬件產(chǎn)品躏仇,答疑本上布有專用數(shù)據(jù)點(diǎn)陣,數(shù)碼筆通過USB線和電腦相連腺办。書寫的過程中焰手,數(shù)碼筆采集到本子上的點(diǎn)陣位置,并實(shí)時(shí)傳輸?shù)絇C老師端(圖2)怀喉;
并通過專有服務(wù)器將筆跡數(shù)據(jù)轉(zhuǎn)發(fā)傳輸?shù)綄W(xué)生手機(jī)端APP(圖3)上進(jìn)行描繪出來书妻,同時(shí)對(duì)這一過程進(jìn)行錄播,達(dá)到語音筆跡同步播放的效果躬拢。

圖2躲履、圖3是實(shí)際答疑過程中的截圖见间,圖4是答疑結(jié)束后回放的截圖。

圖2 PC老師端產(chǎn)品截圖
圖3 手機(jī)端APP產(chǎn)品截圖
圖4回放截圖

在線答疑業(yè)務(wù)中需要對(duì)老師和學(xué)生答疑過程進(jìn)行現(xiàn)場(chǎng)還原崇呵,需要對(duì)這一過程進(jìn)行錄制缤剧,并在答疑結(jié)束后立即由PC老師端上傳文件到云端馅袁,以便在PC或APP瀏覽器端域慷、APP移動(dòng)端進(jìn)行回放。一方面以供后期學(xué)生對(duì)歷史答疑記錄進(jìn)行知識(shí)點(diǎn)的回放和溫故總結(jié)汗销;另一方面供內(nèi)部審核犹褒,一是審核當(dāng)前答疑老師或?qū)W生是否進(jìn)行了違規(guī)操作、不當(dāng)?shù)难哉Z或老師不用心的講解等弛针,二是審核并且自動(dòng)或人工檢測(cè)當(dāng)前的語音通話質(zhì)量叠骑、筆跡傳輸是否完整和合格。

一種簡(jiǎn)單的方案是削茁,在PC老師端由錄屏軟件錄制音頻和筆跡宙枷,然后壓縮編碼成視頻格式(通用mp4格式)并上傳到后端云存儲(chǔ)服務(wù)。好處是在各類平臺(tái)(如app或pc端)通過html5 video標(biāo)簽自由回放視頻文件茧跋。弊端是:資源和帶寬浪費(fèi)慰丛,因?yàn)橐曨l本身的壓縮會(huì)很耗時(shí),可能導(dǎo)致PC老師端答疑軟件特別卡頓瘾杭,另外存儲(chǔ)文件的大小也很大(比如1個(gè)小時(shí)的480p/15fps/500Kbps的視頻大小可能達(dá)到200M)诅病,造成本地磁盤和上傳帶寬壓力大大增大,同時(shí)如果文件是存儲(chǔ)在第三方云存儲(chǔ)上的話粥烁,價(jià)格也會(huì)大大增加贤笆;另外PC老師端軟件窗口大小不能調(diào)節(jié)變化,因?yàn)槿绻翱诖笮∽兓肿瑁浧料聛淼囊曨l畫面將會(huì)不一致芥永,導(dǎo)致用戶體驗(yàn)大打折扣。

另外一種方案是钝吮,由中轉(zhuǎn)服務(wù)器或者從中轉(zhuǎn)服務(wù)器引出一路監(jiān)聽者的身份的服務(wù)器(錄制上傳服務(wù)器)來錄制語音(.mp3)和筆跡(.pen自定義格式)文件埋涧,并分開標(biāo)記上傳到云存儲(chǔ)服務(wù),在app或pc端通過自定義的播放器來播放搀绣。好處是不占用PC老師端的任何額外資源飞袋;其次,因?yàn)槭窃诜?wù)器端錄制链患,不需要PC老師端上傳邏輯巧鸭,這樣答疑完能立即實(shí)時(shí)生成播放文件鏈接。弊端是:消耗服務(wù)器資源麻捻,需要部署多臺(tái)錄制上傳服務(wù)器專門用來做錄制和上傳纲仍;其次不能保證老師端和學(xué)生端的語音和筆跡的完整性呀袱,因?yàn)橹修D(zhuǎn)服務(wù)器在不可用的情況下會(huì)自動(dòng)切換為p2p的形式直連,這樣是不能錄制到語音和筆跡的郑叠;另外也不能保證至少一端的語音通話質(zhì)量(回音夜赵、噪音等),因?yàn)槔蠋煻撕蛯W(xué)生端的語音需要各端的語音引擎分別處理優(yōu)化后才能通過外放播放乡革。

綜合以上情況寇僧,我們可以看出,在線實(shí)時(shí)答疑錄播存在以下難點(diǎn):

難點(diǎn)1:數(shù)據(jù)壓縮問題沸版。在非wifi情況下的回放答疑歷史記錄嘁傀,需要保證在回放體驗(yàn)的基礎(chǔ)上將流量消耗降到最低。

難點(diǎn)2:數(shù)據(jù)完整性問題视粮。由于PC客戶端軟件可能異常退出细办,所以對(duì)于已經(jīng)錄制的語音和筆記需要保證沒有臟數(shù)據(jù),播放器也能正常的播放出蕾殴。

難點(diǎn)3:筆跡和語音同步問題笑撞。由于在錄制時(shí)是分別錄制語音和筆跡,同時(shí)在PC客戶端出現(xiàn)異常退出后恢復(fù)時(shí)繼續(xù)上次的語音和筆記錄制钓觉,所以在播放時(shí)需要對(duì)兩者進(jìn)行同步匹配茴肥,不然就會(huì)出現(xiàn)語音和筆跡脫節(jié)不同步,從而影響播放體驗(yàn)议谷。

難點(diǎn)4:播放器效率問題炉爆。由于在移動(dòng)端設(shè)備方面存在IOS和安卓等平臺(tái)的差別,而且基于安卓平臺(tái)卧晓,更有各種手機(jī)廠商數(shù)千款手機(jī)產(chǎn)品芬首,每種產(chǎn)品的設(shè)備配置和性能參數(shù)都不盡相同,所以定制化的播放器(基于html5)需要適配所有這些機(jī)型的兼容問題逼裆,并且在繪制筆跡時(shí)盡量減少cpu的消耗郁稍,尤其是在大步長的seek進(jìn)度條時(shí),繪制效率更需要考慮胜宇。

綜合以上的討論和難點(diǎn)耀怜,提出了一種更優(yōu)化可靠的方案,即在PC老師端實(shí)時(shí)錄制老師和學(xué)生的語音(.mp3)和筆跡(.pen自定義格式)文件桐愉,分別保存在磁盤指定目錄财破,在答疑結(jié)束后通過deamon進(jìn)程循環(huán)掃描式上傳(斷點(diǎn)續(xù)傳)到云存儲(chǔ)服務(wù)器,定制化的播放器從云端請(qǐng)求播放語音和筆跡从诲。這樣可以保證老師端和學(xué)生端的語音質(zhì)量(本地回音左痢、噪音消除等);不需要額外的服務(wù)器資源,節(jié)省了成本俊性,完全在PC老師端機(jī)器上完成錄制和上傳略步;充分壓縮錄制文件,減少帶寬和存儲(chǔ)壓力定页;定制化的播放器可以更優(yōu)的回放語音和筆跡趟薄。

2 在線答疑錄播流程

2.1 業(yè)務(wù)流程

圖5 答疑錄播整體流程

圖5所示為答疑錄播的整體流程,在老師接單并建立了答疑通道后典徊,開始答疑杭煎,答疑結(jié)束后上傳語音和筆跡,并存儲(chǔ)和通知后臺(tái)記錄宫峦,供播放器回放岔帽。

  1. 老師和學(xué)生建立連接后玫鸟,老師使用數(shù)碼筆在答疑筆記本上書寫要講解的內(nèi)容导绷,實(shí)時(shí)采樣并通過USB線傳輸給PC老師端;同時(shí)采集PC本地音頻設(shè)備來捕獲老師語音屎飘。

  2. 通過網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器妥曲,老師端將語音和筆跡數(shù)據(jù)發(fā)送給學(xué)生端,同時(shí)學(xué)生端采集手機(jī)端語音發(fā)送給老師端钦购,PC老師端實(shí)時(shí)保存老師和學(xué)生的語音到mp3文件檐盟,保存筆跡到自定義pen格式的文件。

  3. 在整個(gè)答疑結(jié)束后押桃,隨機(jī)啟動(dòng)的deamon子進(jìn)程對(duì)當(dāng)前答疑文件通過內(nèi)網(wǎng)域名斷點(diǎn)續(xù)傳到反向代理服務(wù)器葵萎,語音和筆跡文件是順序傳輸?shù)模凑Z音文件傳輸完成后傳輸筆跡文件),并且進(jìn)程會(huì)自動(dòng)檢測(cè)當(dāng)前上行網(wǎng)絡(luò)帶寬唱凯,自動(dòng)調(diào)整上傳速率羡忘,保證不影響正常答疑。另外此deamon子進(jìn)程負(fù)責(zé)紀(jì)錄對(duì)應(yīng)答疑訂單號(hào)下的每個(gè)文件的上傳進(jìn)度和狀態(tài)信息到本地?cái)?shù)據(jù)庫磕昼,并且循環(huán)掃描指定的本地存儲(chǔ)目錄卷雕,保證對(duì)所有未完成的文件進(jìn)行斷點(diǎn)續(xù)傳。

  4. 反向代理服務(wù)器首先初步驗(yàn)證客戶端上傳片段請(qǐng)求的合法性票从,驗(yàn)證成功后通過負(fù)載均衡策略匹配到合適的單個(gè)業(yè)務(wù)服務(wù)器漫雕,否則拒絕此次上傳片段請(qǐng)求;業(yè)務(wù)服務(wù)器再進(jìn)一步驗(yàn)證請(qǐng)求的頭部字段峰鄙、token浸间、文件格式和類型,驗(yàn)證成功后本地存儲(chǔ)分片到對(duì)應(yīng)的文件里吟榴,否則拒絕此次上傳片斷請(qǐng)求魁蒜。

  5. 單個(gè)片段上傳成功后,反向代理服務(wù)器返回http 201響應(yīng)給deamon子進(jìn)程,直到整個(gè)文件全部分段傳完后返回http 200響應(yīng)梅惯,失敗返回錯(cuò)誤響應(yīng)宪拥。這樣一個(gè)文件就算傳輸完成,同時(shí)deamon子進(jìn)程刪除本地?cái)?shù)據(jù)庫對(duì)應(yīng)的狀態(tài)紀(jì)錄和文件铣减,否則本地?cái)?shù)據(jù)庫紀(jì)錄對(duì)應(yīng)文件上傳進(jìn)度和狀態(tài)她君,以便下一次掃描再傳輸。

  6. 當(dāng)一個(gè)文件傳輸完成后葫哗,業(yè)務(wù)服務(wù)器負(fù)責(zé)將臨時(shí)存儲(chǔ)在反向代理服務(wù)器本地磁盤的文件缔刹,生成全局唯一的文件名作為key(語音以.mp3為后綴,筆跡以.pen為后綴)劣针,通過第三方云服務(wù)api上傳到云存儲(chǔ)里校镐,成功后同時(shí)刪除本地文件,否則保留捺典。轉(zhuǎn)到第5步返回狀態(tài)給deamon子進(jìn)程鸟廓。

  7. 當(dāng)文件傳輸?shù)降谌皆贫朔?wù)器后,通知后臺(tái)web服務(wù)器文件上傳成功襟己,后臺(tái)服務(wù)紀(jì)錄對(duì)應(yīng)答疑訂單號(hào)下的各個(gè)文件url到數(shù)據(jù)庫中引谜,同時(shí)轉(zhuǎn)到第5步返回狀態(tài)給deamon子進(jìn)程。

  8. 將指定訂單號(hào)下的語音和筆跡url傳到定制化播放端擎浴,播放器解析筆跡數(shù)據(jù)员咽,將相對(duì)于語音的相對(duì)時(shí)間戳與語音時(shí)間軸進(jìn)行同步化匹配,并最終呈現(xiàn)出來贮预。

2.2 關(guān)鍵技術(shù)

2.2.1 筆跡數(shù)據(jù)高效壓縮

對(duì)于要在PC端贝室、web端或app端能同時(shí)兼容播放渲染筆跡數(shù)據(jù),同時(shí)為了保證瀏覽器跨域問題仿吞,設(shè)計(jì)了一種高效通用的筆跡數(shù)據(jù)包格式(jsonp格式)滑频,這樣當(dāng)瀏覽器讀取筆跡文件后可以直接內(nèi)部解析成json數(shù)據(jù)。如下圖為筆跡數(shù)據(jù)格式茫藏。

圖6 筆跡數(shù)據(jù)格式

其中:

hw_h表示筆跡數(shù)據(jù)頭误趴,hw_b表示筆跡數(shù)據(jù)體。

hw_h中:此字段存在的目的是為了在播放器進(jìn)度條上明確標(biāo)記老師的狀態(tài)進(jìn)行打點(diǎn)务傲。比如跳過審題狀態(tài)凉当,直接到達(dá)開始講解階段。

s:表示老師的狀態(tài)(0:審題階段售葡;1:開始講解階段看杭;其他預(yù)留)。

t: 表示當(dāng)前老師狀態(tài)對(duì)應(yīng)的點(diǎn)的相對(duì)時(shí)間戳(相對(duì)于音頻開始時(shí)間戳(采集時(shí)間)的時(shí)間(毫秒))挟伙。

hw_b中:

t: 表示當(dāng)前點(diǎn)相對(duì)于音頻開始的相對(duì)時(shí)間戳(采集時(shí)間)的時(shí)間(毫秒)楼雹。

c: 表示筆記相關(guān)命令操作,按位操作。第1位:0表示筆書寫贮缅,1表示筆懸刚ジ馈;第2-4位:表示筆跡的顏色谴供。

s: 筆跡的分頁號(hào)块茁。

x1、y1桂肌、x2数焊、y2: 表示點(diǎn)的開始和結(jié)束。

2.2.2 語音和筆跡完整性錄制

當(dāng)PC老師端錄制語音時(shí)崎场,老師端和學(xué)生端分別經(jīng)過回音消除佩耳、噪聲抑制處理之后,對(duì)生成出來的PCM信號(hào)進(jìn)行采樣谭跨、壓縮干厚、并實(shí)時(shí)編碼成mp3雙聲道數(shù)據(jù)。比如16KHZ 的PCM數(shù)據(jù)每10ms生成長度為160的采樣包饺蚊。如下圖為老師和學(xué)生的PCM信號(hào)包對(duì)齊合并編碼包萍诱。理論上老師和學(xué)生端的語音基本是同步的,如果對(duì)于通話過程中某一方語音信號(hào)丟失污呼,或者某一端等待另一端PCM信號(hào)包超時(shí),那么需要用對(duì)應(yīng)長度的靜音包來填充包竹,避免出現(xiàn)語音不同步的情況燕酷。

圖7 PCM信號(hào)合并編碼流程

如果PC老師端因?yàn)橐馔馇闆r退出后再恢復(fù)時(shí),會(huì)接著當(dāng)前訂單的語音繼續(xù)錄制周瞎。如下圖為意外恢復(fù)情況下時(shí)間戳校對(duì)策略苗缩。假設(shè)時(shí)間戳單位是秒,PC老師端在第5秒的時(shí)候意外退出声诸,在第20秒時(shí)恢復(fù)酱讶,在第26秒時(shí)答疑結(jié)束夜矗,那么此時(shí)整個(gè)答疑時(shí)間是11秒(即語音時(shí)長)刁笙。在第20秒恢復(fù)時(shí),獲取已經(jīng)錄制的第一階段mp3時(shí)長(5秒)拧揽,并且seek到最后一個(gè)sample位置接著寫入語音sample慰照,之后每個(gè)筆跡包的相對(duì)時(shí)間戳都需要減去斷開階段的時(shí)長繼續(xù)錄制灶挟。

圖8 語音與筆跡時(shí)間戳同步校對(duì)

2.2.3 高效定制化播放

設(shè)計(jì)了一種定制化的播放器,采用html5進(jìn)行播放和渲染毒租,筆跡(.pen)采用基于canvas的繪制稚铣,語音(.mp3)采用audio標(biāo)簽播放。如圖9為播放器加載語音和筆跡的流程。

圖9 播放器加載流程

2.2.3.1 自適應(yīng)分辨率策略

因?yàn)楣P跡本上的分辨率和要顯示播放設(shè)備的分辨率不一樣惕医,所以需要轉(zhuǎn)換為要播放的設(shè)備窗口的分辨率耕漱。如圖10為自適應(yīng)選擇目標(biāo)窗口分辨率策略。

圖10 自適應(yīng)分辨率策略

因?yàn)樵谑謾C(jī)端縮放時(shí)對(duì)點(diǎn)的本身分辨率會(huì)造成影響抬伺,這時(shí)需要記錄scale 為window.devicePixelRatio孤个,對(duì)于每個(gè)點(diǎn)坐標(biāo)e(x,y)做等比例(因子r(x,y))縮放調(diào)整,即f(x,y)= e(x,y)r(x,y)scale沛简。

2.2.3.2 繪制筆跡流程

對(duì)于筆跡每一頁動(dòng)態(tài)創(chuàng)建一個(gè)canvas來顯示當(dāng)前頁號(hào)下所有的點(diǎn)線齐鲤,通過頁號(hào)來映射canvas。頁面每次只會(huì)有一個(gè)canvas顯示出來椒楣,其他的canvas隱藏给郊。如果下一個(gè)點(diǎn)的頁號(hào)和當(dāng)前繪制的頁號(hào)不同,則繼續(xù)創(chuàng)建一個(gè)canvas和頁號(hào)映射關(guān)聯(lián)捧灰,并且切換為當(dāng)前顯示的canvas淆九。出于效率考慮,每30個(gè)點(diǎn)線stroke一次毛俏。

2.2.3.3 seek進(jìn)度條流程

對(duì)于手機(jī)端來說炭庙,電量和繪制效率是重點(diǎn)要考慮的,尤其對(duì)于canvas的seek繪圖效率問題更應(yīng)該重視煌寇,當(dāng)一次性繪制超過上萬個(gè)點(diǎn)線時(shí)焕蹄,會(huì)暫用大量的臨時(shí)內(nèi)存,并且cpu瞬時(shí)達(dá)到峰值阀溶,這樣會(huì)導(dǎo)致app意外退出腻脏。

如果在當(dāng)前頁之內(nèi)seek:向后seek的話就seek到指定位置,繪出當(dāng)前播放點(diǎn)到指定seek點(diǎn)內(nèi)的所有當(dāng)前頁號(hào)的筆跡點(diǎn)線银锻;如果向前seek則清空當(dāng)前頁號(hào)的canvas內(nèi)的所有筆跡點(diǎn)線永品,繪出當(dāng)前頁號(hào)開始點(diǎn)到指定seek點(diǎn)內(nèi)的所有當(dāng)前頁號(hào)的筆跡點(diǎn)線。

如果在當(dāng)前頁之外seek:清空當(dāng)前canvas击纬,繪制seek點(diǎn)位置對(duì)應(yīng)的頁號(hào)的開始點(diǎn)到seek點(diǎn)內(nèi)的所有當(dāng)前頁號(hào)的筆跡點(diǎn)線鼎姐,同時(shí)將seek點(diǎn)對(duì)應(yīng)的頁號(hào)映射的canvas設(shè)置為顯示狀態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末更振,一起剝皮案震驚了整個(gè)濱河市炕桨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殃饿,老刑警劉巖谋作,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乎芳,居然都是意外死亡遵蚜,警方通過查閱死者的電腦和手機(jī)帖池,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭净,“玉大人睡汹,你說我怎么就攤上這事〖叛常” “怎么了囚巴?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長友扰。 經(jīng)常有香客問我彤叉,道長,這世上最難降的妖魔是什么村怪? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任秽浇,我火速辦了婚禮,結(jié)果婚禮上甚负,老公的妹妹穿的比我還像新娘柬焕。我一直安慰自己,他們只是感情好梭域,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布斑举。 她就那樣靜靜地躺著,像睡著了一般病涨。 火紅的嫁衣襯著肌膚如雪富玷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天没宾,我揣著相機(jī)與錄音凌彬,去河邊找鬼。 笑死循衰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的褐澎。 我是一名探鬼主播会钝,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼工三!你這毒婦竟也來了迁酸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤俭正,失蹤者是張志新(化名)和其女友劉穎奸鬓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掸读,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡串远,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年宏多,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澡罚。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伸但,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出留搔,到底是詐尸還是另有隱情更胖,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布隔显,位于F島的核電站却妨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏括眠。R本人自食惡果不足惜彪标,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哺窄。 院中可真熱鬧捐下,春花似錦、人聲如沸萌业。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽生年。三九已至婴程,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抱婉,已是汗流浹背档叔。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒸绩,地道東北人衙四。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像患亿,于是被迫代替她去往敵國和親传蹈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345