OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

打印 上一主题 下一主题

主题 541|帖子 541|积分 1623

  鸿蒙开发往期必看:
一分钟相识”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零底子入门到夺目)
 “一杯冰美式的时间” 相识鸿蒙HarmonyOS Next应用开发路径!

概述

openharmony中实现RTSPServer播放视频主要分为如下5部门。其中视频采集与视频编码平台芯片3518EV300与3516DV300已支持,将编码后的视频数据(H.265)存放至环形缓冲区,最后通过RTSPServer发送,RTSPClient由VLC播放器实现。

RTSPServer实现

RTSP流媒体播放实现主要涉及两个线程:1、将编码后的视频数据存储在环形缓冲区内。2、创建RTSPServer发送环形缓冲区数据。


环形缓冲区

环形缓冲区主要目标是为了将视频编码(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发送去掉头数据。


在举行RTP分包发送时会将IDR、VPS、SPS、PPS、SEI拼集为一起作为主要帧发送,因此头一帧数据 非常重要。
为相识决视频编码与RTSP线程线程同步的问题,缓冲区操持如下:
  1. 文件路径:recorder_impl.cpp       
  2. 实现函数:void VideoSourceProcess(const SourceManager *videoSourceManager, const RecorderSink *recorderSink)
复制代码
缓冲区为16*256K长度的数组buff。put为编码线程存放缓冲区偏移值,get为RTSPServer线程获取缓冲区的偏移值。


初始情况下put与get的位置均在开头。


当视频编码有数据时添补buff并put向前移。


RTSP通过get将视频编码数据发送,然后释放buff,get向前移。


当put与get偏移超过16时重新置1,其中设置get数据的时间get与put的间隔不会超过3个buff。


RTSPServer

RTSP(Real Time Streaming Protocol)及时流协议作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得及时流媒体数据的受控和点播变得大概。总的说来,RTSP是一个流媒体表示协议,通过RTSP传输控制下令与RTP传输视频流到达控制具有及时特性的数据发送。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责界说具体的控制消息、操作方法、状态码等,别的还形貌了与RTP间的交互操作。


RTSP C(Client)与 S(Server)交互流程图解
RTSP 中的 C(Client)与 S(Server)交互流程图解


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(负载数据)。


RtpHeader数据

  1. csrcLen  CSC计数,在没有RTP混频器的情况下通常为0
  2. extension 扩展名,必须为0
  3. padding 填充位,不得使用填充,默认为0
  4. version  版本号
  5. payloadType 数据帧类型(h265)。
  6. marker 将一帧分片时区分头片
  7.        
  8. seq 序列号为了以每片为单位
  9.    
  10. timestamp 时间戳 以每帧为单位
  11.    
  12. ssrc  数据信源号
复制代码
payload数据

RTP包最大为1400个字节,因此打包分为两种。

  • 一种是一个nal单位打包到一个rtp包中。
  • 一种是nal单位比力大,分片打包在多个rtp中。
单个nal直接发送即可
nal单位比力大,分片打包在多个rtp中,分片格式如下:


其中PayloadHdr固定为49。FUheader数据为:


S置1表示起始片,E置1表示最后片,FuType就是实际的Nal type范例。
实现代码函数
  1. 文件:rtp.cpp
  2. 实现函数:int Rtp::UdpSendFrame(uint8_t *pNalBuf, int s32NalBufSize)
复制代码
最后

小编在之前的鸿蒙体系扫盲中,有许多朋友给我留言,有许多小同伴不知道学习哪些鸿蒙开发技能?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频仍踩坑,终极浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)路线图、文档、视频、用来跟着学习是非常有须要的。
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员
鸿蒙全栈开发学习条记   盼望这一份鸿蒙学习文档能够给大家带来帮助~



 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包罗底子技能、就业必备技能、多媒体技能、六大电商APP、进阶高级技能、实战就业级装备开发,不仅增补了华为官网未涉及的办理方案
路线图适合人群:
IT开发人员:想要拓展职业边界
零底子小白:鸿蒙爱好者,盼望从0到1学习,增长一项技能。
技能提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技能
2.视频教程+学习PDF文档
(鸿蒙语法ArkTS、TypeScript、ArkUI教程……)
      

     纯血版鸿蒙全套学习文档(面试、文档、全套视频等)
                   

鸿蒙APP开发必备
​​
总结
参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简朴来说就是:为了确保高效学习,发起规划清晰的学习路线


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表