OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解
鸿蒙开发往期必看:一分钟相识”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零底子入门到夺目)
“一杯冰美式的时间” 相识鸿蒙HarmonyOS Next应用开发路径!
概述
openharmony中实现RTSPServer播放视频主要分为如下5部门。其中视频采集与视频编码平台芯片3518EV300与3516DV300已支持,将编码后的视频数据(H.265)存放至环形缓冲区,最后通过RTSPServer发送,RTSPClient由VLC播放器实现。
https://i-blog.csdnimg.cn/direct/a7da1e59e58f4684b40fead7c04bb966.png
RTSPServer实现
RTSP流媒体播放实现主要涉及两个线程:1、将编码后的视频数据存储在环形缓冲区内。2、创建RTSPServer发送环形缓冲区数据。
https://img-blog.csdnimg.cn/img_convert/dc4f1b13ba4024123379451a74c56533.png
环形缓冲区
环形缓冲区主要目标是为了将视频编码(H.265)产生的数据通过RTSPServer及时地发送到RTSPClient端。
H.265数据原理
H.265=多少序列集。
序列集=1IDR帧+1VPS帧+1SPS帧+1PPS帧+1SEI帧+多少P帧构成。
每帧通过00 00 00 01分割以后的下一个字节就是NALU(网络抽象层单位)范例,
[*]1: 00 00 00 01 40 01 .... ,(0x40 & 0x7E)>> 1 值为 32, 语义为视频参数集 VPS
[*]2: 00 00 00 01 42 01 .... ,(0x42 & 0x7E)>> 1 值为 33, 语义为序列参数集 SPS
[*]3: 00 00 00 01 44 01 .... ,(0x44 & 0x7E)>> 1 值为 34, 语义为图像参数集 PPS
[*]4: 00 00 00 01 4E 01 ....,(0x4E & 0x7E)>> 1 值为 39, 语义为增补加强信息 SEI
[*]5: 00 00 00 01 26 01 .... ,(0x26 & 0x7E)>> 1 值为 19, 语义为大概有RADL图像的IDR图像的SS编码数据 IDR
[*]6: 00 00 00 01 02 01 .... ,(0x02 & 0x7E)>> 1 值为 1, 语义为被参考的后置图像P帧
[*]
如下图,左边是h265原始数据,右边是通过RTP发送去掉头数据。
https://img-blog.csdnimg.cn/img_convert/d85ae232a950ad619a2a104e0e772f13.png
在举行RTP分包发送时会将IDR、VPS、SPS、PPS、SEI拼集为一起作为主要帧发送,因此头一帧数据 非常重要。
为相识决视频编码与RTSP线程线程同步的问题,缓冲区操持如下:
文件路径:recorder_impl.cpp
实现函数:void VideoSourceProcess(const SourceManager *videoSourceManager, const RecorderSink *recorderSink)
缓冲区为16*256K长度的数组buff。put为编码线程存放缓冲区偏移值,get为RTSPServer线程获取缓冲区的偏移值。
https://img-blog.csdnimg.cn/img_convert/ba7896e28bae4e788868cc6457e4e796.png
初始情况下put与get的位置均在开头。
https://img-blog.csdnimg.cn/img_convert/3fca4a44cade67936b1fccc005ac5680.png
当视频编码有数据时添补buff并put向前移。
https://img-blog.csdnimg.cn/img_convert/2c0c24c199a632296bf0407423d235a7.png
RTSP通过get将视频编码数据发送,然后释放buff,get向前移。
https://img-blog.csdnimg.cn/img_convert/b9691c743a12180e7d688990a721552c.png
当put与get偏移超过16时重新置1,其中设置get数据的时间get与put的间隔不会超过3个buff。
https://img-blog.csdnimg.cn/img_convert/052a6ce02d34100d488fd277789e15ae.png
RTSPServer
RTSP(Real Time Streaming Protocol)及时流协议作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得及时流媒体数据的受控和点播变得大概。总的说来,RTSP是一个流媒体表示协议,通过RTSP传输控制下令与RTP传输视频流到达控制具有及时特性的数据发送。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责界说具体的控制消息、操作方法、状态码等,别的还形貌了与RTP间的交互操作。
https://img-blog.csdnimg.cn/img_convert/6ca00ff35b73af13acd2a144fdf65ef0.png
RTSP C(Client)与 S(Server)交互流程图解
RTSP 中的 C(Client)与 S(Server)交互流程图解
https://img-blog.csdnimg.cn/img_convert/36b693d9b8aede53919140a288b9be2d.png
RTSP 关键字段阐明
关键字:OPTIONS
得到服务器提供的可用方法(OPTION、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、SCALE、GET_PARAMETER、SET_PARAMETER)。
关键字:DESCRIBE
请求流的 SDP 信息。
注解:此处需要相识 H265 Law Data 如何天生 SPS PPS 信息。
关键字:SETUP
客户端提示服务器创建会话,并创建传输模式。
注解:此处确定了 RTP 传输交互式采取 TCP(面向连接)还是 UDP(无连接)模式。
关键字:PLAY
客户端发送播放请求。
注解:此处引入 RTP 协议。
关键字:PAUSE
播放暂停请求。
注解:此关键字常常用在录像回放当中,及时视频流几乎用不到。
关键字:TEARDOWN
客户端发送关闭请求
RTP分包
其中RtpHeader(Rtp头)加payload(负载数据)。
https://img-blog.csdnimg.cn/img_convert/489220eec79ddb078dc520f7a607a1d4.png
RtpHeader数据
csrcLenCSC计数,在没有RTP混频器的情况下通常为0
extension 扩展名,必须为0
padding 填充位,不得使用填充,默认为0
version版本号
payloadType 数据帧类型(h265)。
marker 将一帧分片时区分头片
seq 序列号为了以每片为单位
timestamp 时间戳 以每帧为单位
ssrc数据信源号
payload数据
RTP包最大为1400个字节,因此打包分为两种。
[*]一种是一个nal单位打包到一个rtp包中。
[*]一种是nal单位比力大,分片打包在多个rtp中。
单个nal直接发送即可
nal单位比力大,分片打包在多个rtp中,分片格式如下:
https://img-blog.csdnimg.cn/img_convert/f949a7a8b70829ad3dcdb8c55afb6b6b.png
其中PayloadHdr固定为49。FUheader数据为:
https://img-blog.csdnimg.cn/img_convert/6cd8b63e94f38df98765ab1c690838ca.png
S置1表示起始片,E置1表示最后片,FuType就是实际的Nal type范例。
实现代码函数
文件:rtp.cpp
实现函数:int Rtp::UdpSendFrame(uint8_t *pNalBuf, int s32NalBufSize) 最后
小编在之前的鸿蒙体系扫盲中,有许多朋友给我留言,有许多小同伴不知道学习哪些鸿蒙开发技能?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频仍踩坑,终极浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)路线图、文档、视频、用来跟着学习是非常有须要的。
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员
鸿蒙全栈开发学习条记 盼望这一份鸿蒙学习文档能够给大家带来帮助~
鸿蒙(HarmonyOS NEXT)最新学习路线
https://i-blog.csdnimg.cn/direct/b3f33c8e2e934b8892c858b24e47d1c2.png
该路线图包罗底子技能、就业必备技能、多媒体技能、六大电商APP、进阶高级技能、实战就业级装备开发,不仅增补了华为官网未涉及的办理方案
路线图适合人群:
IT开发人员:想要拓展职业边界
零底子小白:鸿蒙爱好者,盼望从0到1学习,增长一项技能。
技能提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技能
2.视频教程+学习PDF文档
(鸿蒙语法ArkTS、TypeScript、ArkUI教程……)
https://i-blog.csdnimg.cn/direct/3d2aaf133c284c01a203476ec8a2cf36.png
纯血版鸿蒙全套学习文档(面试、文档、全套视频等)
https://i-blog.csdnimg.cn/direct/76976f6855bc45a3a999fd0f76b4c53a.png
鸿蒙APP开发必备
https://img-blog.csdnimg.cn/direct/339886a24c544fe4a2291e51c0250a77.png
总结
参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简朴来说就是:为了确保高效学习,发起规划清晰的学习路线https://i-blog.csdnimg.cn/direct/4e9bcbf815434ad38ff025e514eb6cac.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]