WebRTC之SDP篇

1 SDP 是什么

見名知意,SDP是session description protocol,會(huì)話描述協(xié)議。即SDP是一個(gè)描述一次會(huì)話的協(xié)議珊蟀。一般SDP用于多媒體通信中,由于視頻和音頻數(shù)據(jù)的復(fù)雜性外驱,不同編碼類型的音視頻流需要對(duì)應(yīng)的專門的編解碼器進(jìn)行編解碼操作育灸,經(jīng)過(guò)編解碼器的處理后音視頻方能夠傳輸或者播放。而對(duì)應(yīng)的編解碼器的初始化必須要知道響應(yīng)的音視頻信息昵宇,故SDP一般用于音視頻傳輸前通信雙方交流音視頻的屬性磅崭,便于雙方對(duì)接下來(lái)處理音視頻流的工作進(jìn)行必要的準(zhǔn)備。

webrtc通過(guò)SDP協(xié)商瓦哎,告知對(duì)端支持的音視頻編碼類型砸喻,編碼器參數(shù),音頻或者視頻的路數(shù)蒋譬,以及與音視頻相關(guān)的采樣率割岛,編碼等等,雙方根據(jù)各自的能力情況犯助,協(xié)商出待傳輸音視頻流的具體參數(shù)癣漆。

2 標(biāo)準(zhǔn)SDP規(guī)范

標(biāo)準(zhǔn)SDP規(guī)范主要包括SDP描述格式和SDP結(jié)構(gòu),而SDP結(jié)構(gòu)由會(huì)話描述和媒體信息描述兩個(gè)部分組成。媒體信息描述是整個(gè)SDP規(guī)范中最重要的部分剂买,他主要包括媒體類型惠爽、媒體格式癌蓖、傳輸協(xié)議、傳輸?shù)腎P和端口婚肆。

2.1 SDP的格式

SDP是由多個(gè) <type>=<value>這邊的表達(dá)式組成的租副,其中<type>是一個(gè)字符,<value>是一個(gè)字符串旬痹。需要特別注意的是附井,“=”號(hào)兩邊是不能有空格的

v=0
o=- 5910110687297165449 2 IN IP4 127.0.0.1
s=-
t=0 0
...

上面提到SDP由會(huì)話描述和媒體描述兩部分組成两残,并且一個(gè)SDP中會(huì)話描述只能有一個(gè),但是媒體描述可以有多個(gè)把跨。

  • 會(huì)話級(jí)(session level)的作用域是整個(gè)會(huì)話人弓,即全部SDP。其位置從 v=行開始着逐,到m=行之前結(jié)束崔赌。
  • 媒體級(jí)(media level)的作用域是單個(gè)的媒體流描述,其位置從m=開始耸别,到下一個(gè)m=之前結(jié)束健芭。

下面是一個(gè)簡(jiǎn)化的SDP樣例:

v=0
o=- 5910110687297165449 2 IN IP4 127.0.0.1
s=-
t=0 0
...

//第一個(gè)媒體流,音頻流
m=audio 54797 UDP/TLS/RTP/SAVPF 8
...

//第2個(gè)媒體流秀姐,視頻流
m=video 9 UDP/TLS/RTP/SAVPF 125
...

//第3個(gè)媒體流慈迈, 數(shù)據(jù)通道
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
...

2.2 SDP的結(jié)構(gòu)

從上一節(jié)的介紹中,可以知道SDP是結(jié)構(gòu)化布局的省有,先是會(huì)話級(jí)描述痒留,然后緊跟媒體級(jí)描述。下面逐一介紹個(gè)字段的含義

  • 會(huì)話級(jí)描述
    這里以一個(gè)樣例對(duì)SDP各字段的含義進(jìn)行逐一講解蠢沿。
v=0 
//v=<version> (必選)
//這里的v表示SDP的版本伸头,即version的縮寫,其值為SDP的版本號(hào)
//SDP版本號(hào)舷蟀,一直為0恤磷,rfc4566規(guī)定

o=- 5910110687297165449 2 IN IP4 127.0.0.1
//o=<username> <session id> <version> <network type> <address type> <address>(必選)
//o=表示的是對(duì)會(huì)話發(fā)起者的描述, o是session owner的縮寫
//<username> 用戶名野宜,當(dāng)不關(guān)心用戶名的時(shí)候扫步,可以用 - 替代
//<session id> 此會(huì)話的標(biāo)識(shí)符,一般使用NTP時(shí)間戳
//<version> 表示此會(huì)話的版本速缨,會(huì)話建立后支持實(shí)時(shí)修改锌妻,此版本號(hào)就是一般用修改次數(shù)來(lái)表示
// <network type> 網(wǎng)絡(luò)類型,一般用“IN”旬牲,表示Internet
//<address type> 地址類型仿粹,一般為 "IP4"
// <address> IP地址
//7017624586836067756是整個(gè)會(huì)話的編號(hào)搁吓,2表明會(huì)話版本,
//若是在會(huì)話過(guò)程當(dāng)中有改變編碼之類的操作吭历,從新生成sdp時(shí),sess-id不變堕仔,sess-version加1

s=-
//s=<session name>(必選)
//該行表示此會(huì)話的名稱,不關(guān)心可以用 - 代替晌区。

t=0 0
//t=<start time> <stop time>(必選)
//t代表 time the session is active
//t=0 0 表示此會(huì)話是一個(gè)永久會(huì)話摩骨,永不失效

a=group:BUNDLE 0 1 2
// a=<type> 或 a=<type>:<values>
//此行表示屬性,用于進(jìn)一步說(shuō)明會(huì)話信息
//此例子表示將各媒體會(huì)話綁定起來(lái)創(chuàng)建一個(gè)組朗若,用于傳輸恼五。支持三種媒體流綁定傳輸
//a表示此行為 attribute line
//需要共用一個(gè)傳輸通道傳輸?shù)拿襟w,若是沒(méi)有這一行哭懈,音視頻灾馒,數(shù)據(jù)就會(huì)分別單獨(dú)用一個(gè)udp端口來(lái)發(fā)送

a=msid-semantic: WMS
//WMS是WebRTC Media Stream簡(jiǎn)稱,這一行定義了本客戶端支持同時(shí)傳輸多個(gè)流遣总,
//一個(gè)流能夠包括多個(gè)track,通常定義了這個(gè)睬罗,后面a=ssrc這一行就會(huì)有msid,mslabel等屬性
  • 媒體級(jí)描述
    媒體描述的字段很多,這里著重介紹4個(gè)旭斥。
m=(media name and transport address容达, 可選)
// m=<media> <port> <stransport> <fmt list>, 表示一個(gè)媒體描述
//<media> 媒體類型垂券,比如 audio/video等
//<port> 端口
//<transport> 傳輸協(xié)議花盐,有兩種RTP/AVP和UDP
//<fmt list> 媒體格式,即數(shù)據(jù)負(fù)載類型(payload type)列表

a=*(zero or more media attribute lines圆米, 可選)
//表示屬性卒暂,用于進(jìn)一步描述媒體信息。
//a=有兩個(gè)特別的屬性類型娄帖,即下面要介紹rtpmap和fmtp

a=rtpmap:125 H264/90000
//rtpmap(可選)也祠。
//a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encodingparameters>]
//rtpmap是rtp與map的結(jié)合,即RTP參數(shù)映射表近速。
//<payload type> 負(fù)載類型诈嘿,對(duì)應(yīng)RTP包中的音視頻數(shù)據(jù)負(fù)載類型
//<encoding name> 編碼器名稱,如VP8削葱、VP9奖亚、OPUS
//<sample rate> 采樣率,如音頻的采樣率頻率32000析砸、48000等
//<encodingparameters> 編碼參數(shù)昔字,如音頻是否是雙聲道,默認(rèn)是單聲道

a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
//a=fmtp:<payload type> <format specific parameters>
//fmtp 格式參數(shù),即format parameters
//<payload type> 負(fù)載類型作郭,同樣對(duì)應(yīng)RTP包中音視頻數(shù)據(jù)負(fù)載類型
//( level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f) H264編碼的可選附加參數(shù)

3 WebRTC中的SDP

webrtc對(duì)標(biāo)準(zhǔn)SDP規(guī)范做了一些調(diào)整陨囊,它將SDP按功能分成幾大塊:

  • Session Metadata,會(huì)話元數(shù)據(jù)
  • Network Description 網(wǎng)絡(luò)描述
  • Stream Description夹攒, 流描述
  • Security Description蜘醋,安全描述
  • Qos Grouping Description,服務(wù)質(zhì)量描述
//=============會(huì)話描述====================
v=0 
o=- 7017624586836067756 2 IN IP4 127.0.0.1
s=-
t=0 0
...

//================媒體描述=================
//================音頻媒體=================
/*
 * 音頻使用端口1024收發(fā)數(shù)據(jù)
 * UDP/TLS/RTP/SAVPF 表示使用 dtls/srtp 協(xié)議對(duì)數(shù)據(jù)加密傳輸
 * 111咏尝、103 ... 表示本會(huì)話音頻數(shù)據(jù)的 Payload Type
 */
 m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 

//==============網(wǎng)絡(luò)描述==================
//指明接收或者發(fā)送音頻使用的IP地址压语,由于WebRTC使用ICE傳輸,這個(gè)被忽略编检。
c=IN IP4 0.0.0.0
//用來(lái)設(shè)置rtcp地址和端口胎食,WebRTC不使用
a=rtcp:9 IN IP4 0.0.0.0
...

//==============音頻安全描述================
//ICE協(xié)商過(guò)程中的安全驗(yàn)證信息
a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
...

//==============音頻流媒體描述================
a=rtpmap:111 opus/48000/2
//minptime代表最小打包時(shí)長(zhǎng)是10ms,useinbandfec=1代表使用opus編碼內(nèi)置fec特性
a=fmtp:111 minptime=10;useinbandfec=1
...
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
...

//=================視頻媒體=================
m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98
...
//=================網(wǎng)絡(luò)描述=================
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
...
//=================視頻安全描述=================
//進(jìn)入連通性檢測(cè)的用戶名
a=ice-ufrag:khLS  
//密碼允懂,這兩個(gè)是用于連通性檢查的憑證
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ 
//DTLS指紋認(rèn)證斥季,以識(shí)別是否是合法用戶
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
...

//================視頻流描述===============
a=mid:video
...
a=rtpmap:100 VP8/90000
//================服務(wù)質(zhì)量描述===============
a=rtcp-fb:100 ccm fir //解碼出錯(cuò),請(qǐng)求關(guān)鍵幀
a=rtcp-fb:100 nack //支持丟包重傳累驮,參考rfc4585
a=rtcp-fb:100 nack pli  //與fir類似,
a=rtcp-fb:100 goog-remb //使用google的寬帶評(píng)估算法
a=rtcp-fb:100 transport-cc //啟動(dòng)防擁塞
...

4 webrtc SDP樣例

v=0
//sdp版本號(hào)舵揭,一直為0,rfc4566規(guī)定
o=- 7017624586836067756 2 IN IP4 127.0.0.1
//username如何沒(méi)有使用-代替谤专,7017624586836067756是整個(gè)會(huì)話的編號(hào),2表明會(huì)話版本
s=-
//會(huì)話名午绳,沒(méi)有的話使用-代替
t=0 0
//兩個(gè)值分別是會(huì)話的起始時(shí)間和結(jié)束時(shí)間置侍,這里都是0表明沒(méi)有限制
a=group:BUNDLE audio video data
//須要共用一個(gè)傳輸通道傳輸?shù)拿襟w,若是沒(méi)有這一行拦焚,音視頻蜡坊,數(shù)據(jù)就會(huì)分別單獨(dú)用一個(gè)udp端口來(lái)發(fā)送
a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
//WMS是WebRTC Media Stream簡(jiǎn)稱,這一行定義了本客戶端支持同時(shí)傳輸多個(gè)流赎败,一個(gè)流能夠包括多個(gè)
//track,通常定義了這個(gè)秕衙,后面a=ssrc這一行就會(huì)有msid,mslabel等屬性



m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
//m=audio說(shuō)明本會(huì)話包含音頻,9表明音頻使用端口9來(lái)傳輸僵刮,在webrtc中通常不使用据忘,
//若是設(shè)置為0,表明不傳輸音頻,UDP/TLS/RTP/SAVPF是表示用戶來(lái)傳輸音頻支持的協(xié)議搞糕,
//udp勇吊、tls、rtp表明使用udp來(lái)傳輸rtp包窍仰,并使用tls加密汉规;
//SAVPF表明使用srtcp的反饋機(jī)制來(lái)控制通訊過(guò)程,
//111 103 104 9 0 8 106 105 13 126表示本會(huì)話音頻支持的編碼,后臺(tái)幾行會(huì)有詳細(xì)補(bǔ)充說(shuō)明

c=IN IP4 0.0.0.0
//這一行表示你要用來(lái)接收或者發(fā)送音頻使用的IP地址驹吮,webrtc使用ice傳輸针史,不使用這個(gè)地址
a=rtcp:9 IN IP4 0.0.0.0
//用來(lái)傳輸rtcp地地址和端口晶伦,webrtc中不使用

a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
//以上兩行是ice協(xié)商過(guò)程當(dāng)中的安全驗(yàn)證信息
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
//以上這行是dtls協(xié)商過(guò)程當(dāng)中須要的認(rèn)證信息

a=setup:actpass
//以上這行表明本客戶端在dtls協(xié)商過(guò)程當(dāng)中,能夠作客戶端也能夠作服務(wù)端悟民,參考rfc4145 rfc4572
a=mid:audio
//在前面BUNDLE這一行中用到的媒體標(biāo)識(shí)
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
//上一行指出我要在rtp頭部中加入音量信息坝辫,參考 rfc6464
a=sendrecv
//上一行指出我是雙向通訊,另外幾種類型是recvonly,sendonly,inactive
a=rtcp-mux
//上一行指出rtp,rtcp包使用同一個(gè)端口來(lái)傳輸
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
//上面幾行都是對(duì)m=audio這一行的媒體編碼補(bǔ)充說(shuō)明射亏,指出了編碼采用的編號(hào)近忙,采樣率,聲道等
//以上這行說(shuō)明opus編碼支持使用rtcp來(lái)控制擁塞智润,參考https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=fmtp:111 minptime=10;useinbandfec=1
//對(duì)opus編碼可選的補(bǔ)充說(shuō)明,minptime表明最小打包時(shí)長(zhǎng)是10ms及舍,useinbandfec=1表明使用opus編碼內(nèi)置fec特性
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=ssrc:18509423 cname:sTjtznXLCNH7nbRw
//cname用來(lái)標(biāo)識(shí)一個(gè)數(shù)據(jù)源,ssrc當(dāng)發(fā)生沖突時(shí)可能會(huì)發(fā)生變化窟绷,可是cname不會(huì)發(fā)生變化锯玛,也會(huì)出現(xiàn)在rtcp包中SDEC中,
//用于音視頻同步
a=ssrc:18509423 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C 15598a91-caf9-4fff-a28f-3082310b2b7a
//以上這一行定義了ssrc和WebRTC中的MediaStream,AudioTrack之間的關(guān)系兼蜈,msid后面第一個(gè)屬性是stream-d,第二個(gè)是track-id
a=ssrc:18509423 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
a=ssrc:18509423 label:15598a91-caf9-4fff-a28f-3082310b2b7a



m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98
//參考上面m=audio,含義相似

c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17

a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-hol ... de-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=sendrecv

a=rtcp-mux
a=rtcp-rsize
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
//ccm是codec control using RTCP feedback message簡(jiǎn)稱攘残,意思是支持使用rtcp反饋機(jī)制來(lái)實(shí)現(xiàn)編碼控制,
//fir是Full Intra Request簡(jiǎn)稱为狸,意思是接收方通知發(fā)送方發(fā)送幀過(guò)來(lái)
a=rtcp-fb:100 nack
//支持丟包重傳歼郭,參考rfc4585
a=rtcp-fb:100 nack pli
//支持關(guān)鍵幀丟包重傳,參考rfc4585
a=rtcp-fb:100 goog-remb
//支持使用rtcp包來(lái)控制發(fā)送方的碼流
a=rtcp-fb:100 transport-cc
//參考上面opus
a=rtpmap:101 VP9/90000
a=rtcp-fb:101 ccm fir
a=rtcp-fb:101 nack
a=rtcp-fb:101 nack pli
a=rtcp-fb:101 goog-remb
a=rtcp-fb:101 transport-cc
a=rtpmap:107 H264/90000
a=rtcp-fb:107 ccm fir
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=rtcp-fb:107 transport-cc
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
//h264編碼可選的附加說(shuō)明
a=rtpmap:116 red/90000
//fec冗余編碼,通常若是sdp中有這一行的話辐棒,rtp頭部負(fù)載類型就是116病曾,不然就是各編碼原生負(fù)責(zé)類型
a=rtpmap:117 ulpfec/90000
//支持ULP FEC,參考rfc5109
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
//以上兩行是VP8編碼的重傳包rtp類型
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=101
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=107
a=rtpmap:98 rtx/90000
a=fmtp:98 apt=116
a=ssrc-group:FID 3463951252 1461041037
//在webrtc中漾根,重傳包和正常包ssrc是不一樣的泰涂,上一行中前一個(gè)是正常rtp包的ssrc,后一個(gè)是重傳包的ssrc
a=ssrc:3463951252 cname:sTjtznXLCNH7nbRw
a=ssrc:3463951252 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d
a=ssrc:3463951252 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
a=ssrc:3463951252 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d
a=ssrc:1461041037 cname:sTjtznXLCNH7nbRw
a=ssrc:1461041037 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d
a=ssrc:1461041037 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
a=ssrc:1461041037 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d



m=application 9 DTLS/SCTP 5000

c=IN IP4 0.0.0.0

a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17

a=setup:actpass
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辐怕,隨后出現(xiàn)的幾起案子逼蒙,更是在濱河造成了極大的恐慌,老刑警劉巖秘蛇,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其做,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赁还,警方通過(guò)查閱死者的電腦和手機(jī)妖泄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艘策,“玉大人蹈胡,你說(shuō)我怎么就攤上這事。” “怎么了罚渐?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵却汉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我荷并,道長(zhǎng)合砂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任源织,我火速辦了婚禮翩伪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谈息。我一直安慰自己缘屹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布侠仇。 她就那樣靜靜地躺著轻姿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逻炊。 梳的紋絲不亂的頭發(fā)上互亮,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音余素,去河邊找鬼胳挎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溺森,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窑眯,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼屏积,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了磅甩?” 一聲冷哼從身側(cè)響起炊林,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卷要,沒(méi)想到半個(gè)月后渣聚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僧叉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年奕枝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶堕。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隘道,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谭梗,我是刑警寧澤忘晤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站激捏,受9級(jí)特大地震影響设塔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜远舅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一闰蛔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧表谊,春花似錦钞护、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至距辆,卻和暖如春余佃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跨算。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工爆土, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诸蚕。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓步势,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親背犯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坏瘩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容