版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. RTP数据包格式RTP报文头格式(见 RFC3550 Page12 :0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |timestamp|+-+-+-+-+-+-+-+
2、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+版本(V):2比特此域定义了 RTP的版本.此协议定义的版
3、本是 2.填料(P):1比特若填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一部分 . 填料的最后一个字节包含可以忽略多少个填充比特 . 填料可能用于某些具有固 定长度的加密算法,或者在底层数据单元中传输多个RTP包.扩展(X):1比特 若设置扩展比特,固定头(仅)后面跟随一个头扩展CSRC十数(CC):4比特CSRC计数包含了跟在固定头后面CSRC识别符的数目标志 (M):1 比特 标志的解释由具体协议规定 . 它用来允许在比特流中标记重要的事件 , 如帧范围 . 规定该标志在静音后的第一个语音包时置位 .负载类型 (PT):7 比特 此域定义了负载的格式 , 由具体应用决
4、定其解释 . 协议可以规定 负载类型码和负载格式之间一个默认的匹配其他的负载类型码可以通过非RTP方法动态定义.RTP发射机在任意给定时间发出一个单独的RTP负载类型;此域不用来复用不同的媒体流.序列号(sequenee number ):16比特 每发送一个 RTP数据包,序列号加一,接收机可以 据此检测包损和重建包序列 . 序列号的初始值是随机的 (不可预测 ), 以使即便在源本身不加 密时 (有时包要通过翻译器 , 它会这样做 ), 对加密算法泛知的普通文本攻击也会更加困难 .时间标志(timestamp ) :32比特时间标志反映了 RTP数据包中第一个比特的抽样瞬间.抽样瞬间必须由随
5、时间单调和线形增长的时钟得到 , 以进行同步和抖动计算 . 时钟的分辨率 必须满足要求的同步准确度 , 足以进行包到达抖动测量 . 时钟频率与作为负载传输的数据格 式独立,在协议中或定义此格式的负载类型说明中静态定义,也可以在通过非 RTP方法定义的负载格式中动态说明若RTP包周期性生成,可以使用由抽样时钟确定的额定抽样瞬间,而不是读系统时钟 .例如,对于固定速率语音 ,时间标志钟可以每个抽样周期加 1.若语音设备 从输入设备读取覆盖 160 个抽样周期的数据块 ,对于每个这样的数据块 ,时间标志增加 160, 无论此块被发送还是被静音压缩 . 时间标志的起始值是随机的 , 如同序列号 . 多
6、个连续的 RTP 包可能由同样的时间标志 , 若他们在逻辑上同时产生 . 如属于同一个图象帧 . 若数据没有 按照抽样的 顺序发送,连续的RTP包可以包含不单调的时间标志,如MPE咬织图象帧.同步源(SSRC :32比特SSRC域用以识别同步源.标识符被随机生成,以使在同一个 RTP 会话期中没有任何两个同步源有相同的SSRC识别符.尽管多个源选择同一个 SSRC识别符的概率很低,所有RTP实现工具都必须准备检测和解决冲突.若一个源改变本身的源传输地址,必须选择新的SSRC识别符,以避免被当作一个环路源.有贡献源(CSRC列表:0到15项,每项32比特CSRC列表识别在此包中负载的有贡献 源.
7、识别符的数目在 CC域中给定.若有贡献源多于15个,仅识别15个.CSRC识别符由混合器插入,用有贡献源的SSRC识别符.例如语音包,混合产生新包的所有源的SSRC标识符都被陈列, 以期在接收机处正确指示交谈者 .注意:前12个字节出现在每个 RTP包中,仅仅在被混合器插入时,才出现CSR(识别符列表RTP报文扩展头格式(见 RFC3550 Page18 :01230 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
8、+-+-+-+-+-+-+ | defined by profile | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |header extension | |若RTP头中的扩展比特位 X置1,则一个长度可变的头扩展部分被加到RTP固定头之后,.头扩展包含 16比特的长度域 ,指示扩展项中 32比特字的个数 ,不包括 4个字节扩展头 (因此 零是有效值 ).RTP 固定头之后只允许有一个头扩展 .为允许多个互操作实现独立生成不同的 头扩展 , 或某种特定实现有多种不同的头扩展 , 扩展项的
9、前 16 比特用以识别标识符或参数 . 这16比特的格式由具体实现的上层协议定义基本的RTP说明并不定义任何头扩展本身。2. 网络抽象层单元 (NALU)NALU 头由一个字节组成 , 它的语法如下 :+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI| Type |+F: 1 个比特 . forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.NRI: 2 个比特. nal_ref_idc. 取 00 11, 似乎指示这个 NALU 的重要性 , 如 00 的 NALU 解码器可以丢弃它而不影响图像的回放 . 不过一般情况下不太关
10、心这个属性 .Type: 5 个比特 .nal_unit_type. 这个 NALU 单元的类型 .Type Packet Type name0undefined1-23NAL uniSingle NAL unit packet per H.26424STAP-ASingle-time aggregation packet25STAP-BSingle-time aggregation packet26MTAP16Multi-time aggregation packet27MTAP24Multi-time aggregation packet28FU-AFragmentation unit29
11、FU-BFragmentation unit30-31 undefinedH264 over RTP 基本上分三种类型:(1)Si ngle NAL un it packet也就是实际的 NAL类型,可以理解为一个包就是一帧H264数据,这个在实际中是比较多的。(2)Aggregation packet 一包数据中含有多个 H264 帧。STAP-A 包内的帧含有相同的STAP-B 包内的帧含有相同的MTAP16包内的帧含有不同的MTAP24包内的帧含有不同的NALU-Time,没有 DONNALU-Time,有 DONNALU-Time, timestamp offset = 16封装在 A
12、ggregation packet中的 NAL 单元大小为 65535 字节NALU-Time, timestamp offset = 24(3) Fragmentation unit 帧数据被分为多个RTP包,这也是很常见的,特别是对于关键帧。现存两个版本 FU-A, FU-B。实际应用就是要加上个H264 STREAM的头 h264_stream_head = 0x00,0x00,0x00,0x014字节,送去解码即可。3. 分包规则3.1单个 NAL单元包(1-23)对于 NALU 的长度小于 MTU 大小的包 , 一般采用单个 NAL 单元模式 .一个原始的 H.264 NALU 单元
13、常由 Start Code NALU Header NALU Payload三部分组成 , 其中Start Code 用于标示这是一个 NALU 单元的开始 , 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节 , 其后都是 NALU 单元内容 .打包时去除 "00 00 01" 或 "00 00 00 01" 的开始码 , 把其他数据封包的 RTP 包即可 .一个封装单个NAL单元包到RTP的NAL单元流的RTP序号必须符合NAL单元的解码顺序。 单个NAL单元包的结构显示如
14、图。(NAL单元的第一字节和 RTP荷载头第一个字节重合)01230 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|F|NRI| type |+-+-+-+-+-+-+-+-+ |Bytes 2.n of a Single NAL unit|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPTIONAL RTP padding |+-+-+-+-+-+-+-+-+
15、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+一个包就是一帧数据。 h264_stream_head + NAL_unit_type. 就可以直接送去解码了。3.2 组合包( 24-27 )3.2.1 单时间组合包( 24-25 )STAP应该用于当组合在一起的 NAL单元共享相同的 NALU时刻。STAP-A(24)荷载不包 括DON至少包含一个单时刻组合单元 STAP-B (25)荷载包含一个 16位的无符号解码顺 序号 (DON) ( 网络字节序 ) 紧跟至少一个单时刻组合单元 .DON域指定STAP-B传输顺序中第一个 NAL单元的DO
16、N值对每个后续出现在 STAP-B中 的NAL单元,它的 DON值等于(STAP-B中前一个 NAL的DON值+1)%65535, %是取模运算。单时刻组合单元有一个 16位无符号大小信息(网络字节序),它指示后续NAL单元的大 小(以字节为单位)(不包括这两个字节,但包括NAL单元类型字节),后面紧跟NAL单元本身, 包括它的NAL单元类型字节.单时刻聚合单元在 RTP荷载中是字节对齐的,但是可以不是32 位字边界对齐。STAP-A 个 RTP包包含一个 STAP-A. STAP包含两个单时刻组合单元:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
17、9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |RTP Header|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |STAP-A NAL HDR |NALU 1 Size | NALU 1 HDR |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |NALU 1 Data|+ +-+-+-
18、+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 2 Size| NALU 2 HDR |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |NALU 2 Data|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPTIONAL RTP padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+STAP-B: 一个RTP包包含一个 STAP-B. S
19、TAP包含两个单时刻组合单元:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |RTP Header|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |STAP-B NAL HDR | DON| NALU 1 Size |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
20、+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 1 Size | NALU 1 HDR | NALU 1 Data|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 2 Size| NALU 2 HDR |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|NALU 2 Data|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPT
21、IONAL RTP padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+看这个结构应该很清楚了,先是 16 位的长度,就可以得到一帧, h264_stream_head +NALU 1 HDR. 送去解码。再算下一帧。需要注意的这个NALU Size 是不包括他本身这 2 个字节。STAP-B还要考虑DON3.2.2 多时间组合包( 26-27 )多时刻时间包的 NAL单元荷载有16位的无符号解码顺序号基址 (DONB)(网络字节序) 以及一个或多个多时刻聚合单元,DONB必须包含MTA冲NAL单元
22、的第一个NAL的DON勺值。NAL解码顺序中的第一个 NAL单元不必要是封装在 MTAP中的第一个 NAL单元。、两个多时刻组合单元都有 16位的无符号大小信息用于后续 NAL单元(网络字节序),一个 8位无符号解码序号差值(DOND),和n位(网络字节序)时戳位移(TS位移)用于本NAL单 元,n可以是16/24.不同MTAP类型的选择是应用相关的时戳位移越大 ,MTAP勺灵活性越大, 但是负担也越大。MTAP16/MTAP2多时刻组合单元的结构如图示。MTAP16:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
23、8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+:NAL unit size | DOND | TS offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TS offset |+-+-+-+-+-+-+-+-+NAL unit| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+MTAP24:0 1 2 30 1 2
24、 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ :NALU unit size | DOND | TS offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TS offset|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |NAL unit|+-+-+-+-+-+-+-+-+-
25、+-+-+-+-+-+-+-+|:+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+一个包中的组合单元的开始 /结束不要求位于 32位的边界。跟随 NAL单元的DON等于 (DONB+ DOND)% 65536, % 代表取摸操作本文没有指定 MTAP内的NAL单元如何排序,但 大多数情况,应该使用 NAL单元解码顺序。时戳位移域必须设置成等于以下公式的值:如果NALU-time大于等于包的 RTP时戳,则时戳位移等于(NALU-time -包的RTP时戳).如果NALU-time小于包的RTP时戳,则时戳位移 等于 NALU-time + (2A32 - 包的 RTP时戳).
26、(1) 一个RTP包包含一个多时刻 MTAP16类型的组合包,包括两个多时刻组合单元0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RTP Header | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |MTAP16 NAL HDR | decoding order number
27、base | NALU 1 Size | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 1 Size | NALU 1 DOND | NALU 1 TS offset|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 1 HDR | NALU 1 DATA | +-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28、| NALU 2 SIZE| NALU 2 DOND |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 2 TS offset | NALU 2 HDR | NALU 2 DATA | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPTIONAL RTP padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29、-+-+-+-+-+-+-+-+(2) 个RTP包包含一个多时刻 MTAP24型的组合包,包括两个多时刻组合单元 0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |RTP Header|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |MTAP24 NAL HDR | decoding o
30、rder number base | NALU 1 Size | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 1 Size | NALU 1 DOND | NALU 1 TS offs | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |NALU 1 TS offs | NALU 1 HDR | NALU 1 DATA|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+
31、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 2 SIZE| NALU 2 DOND |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 2 TS offset| NALU 2 HDR |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NALU 2 DATA|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPTIONAL RTP padd
32、ing |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+看这个结构应该很清楚了,先是16位的DONB然后是16位的长度,8位的DOND根据DON时算出DON去掉时间戳(16-24bits ),就可以得到一帧,h264_stream_head + NALU1 HDR.。得到该RTP包中所有的NAL单元后,根据 DON确定解码顺序。需要注意的这个 NALU Size 是不包括他本身这 2 个字节。3.2.2 分片单元 (FUs) (28-29 )当 NALU 的长度超过 MTU 时, 就必须对 NALU 单元进行分
33、片封包, NAL 单元的一个分 片由整数个连续NAL单元字节组成.每个NAL单元字节必须正好是该 NAL单元一个分片的一 部分。相同NAL单元的分片必须使用递增的 RTP序号连续顺序发送(第一和最后分片之间没 有其他的RTP包)。相似,NAL单元必须按照 RTP顺序号的顺序装配。当一个NAL单元被分片运送在分片单元(FUs)中时,被引用为分片 NAL单元。STAPs,MTAP不可以被分片。FUs不可以嵌套,即,一个FU不可以包含另一个 FU.运送FU的RTP时戳 被设置成分片NAL单元的NALU时刻.FU-A的RTP荷载格式。FU-A由1字节的分片单元指示,1字节的分片单元头,和分片 单元荷载组成。0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| FU indicator | FU header |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |FU pay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【中考考点基础练】第15章 从指南针到磁浮列车 电能从哪里来 2025年物理中考总复习(福建)(含答案)
- 基于MCGS的锅炉汽包水位计算机控制系统设计终稿
- 财经法规与会计职业道德模拟试卷第一套有答案1
- 2024至2030年中国六火眼烤箱灶数据监测研究报告
- 2024年中国高导磁芯绕线市场调查研究报告
- 2024年中国虎杖甙市场调查研究报告
- 2024年中国百叶窗式管道风机市场调查研究报告
- 2024年中国机房漏水监测系统市场调查研究报告
- 2024年中国显微激光拉曼光谱仪市场调查研究报告
- 2024年中国区界牌市场调查研究报告
- 四年级全册传统文化教案(齐鲁书社版)
- 2021年南阳市卧龙区卫生健康系统单位招聘笔试试题及答案解析
- 四年级上册数学课件-6.1 可能性丨苏教版 (共19张PPT)
- atl变频器说明书AE 2
- 2023届衡南县“五科联考”数学试卷(含答案)
- 公司税务管理办法
- 地基承载力报告(试验)
- 安全教育培训申请表模板范本
- 压力钢管充水试验方案
- 绿化养护重点难点分析及解决措施
- 《小老鼠去海滨》阅读练习及答案
评论
0/150
提交评论