Android中的音视频(2)|青训营笔记

简介: 按照一定的规则,把视频数据、音频数据放到一个文件中

直播推拉流

封装格式

按照一定的规则,把视频数据、音频数据放到一个文件中

MP4

容器协议

Moov:Movie Box,存储 mp4 的 metadata,一般位于mp4文件的开头。(为达到秒播效果,会记录很多信息在该文件)

mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间、文件时长等

trak:Track Box,一个mp4可以包含一个或多个轨道(比如视频轨道、音频轨道)

Stbl:Sample Table Box

包含了这些媒体数据的索引以及时间信息

1.webp.jpg

较大的层级结构

FLV

流式文件

FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。

tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)

由于没有一个记录信息的头的结构,所以在一开始不知道会播多久,且数据是链式可以一节节用Tag拼装起来,那么就可以用cdn不断分发下去,所以非常适合直播时候使用。

1.webp.jpg

由于缺少头信息,所以在一般的播放器中,Flv是不支持拖拽的。需要支持拖拽的话就得遍历所有Tag之后记录其时间戳才能实现拖拽

1.webp.jpg

CDN转发网络

定义:建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。

边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储、计算、网络等资源,将部分关键业务应用下沉到接入网络边缘,以减少网络传输和多级转发带来的宽度和时延损耗

1.webp.jpg

  • 点播:视频播放
  • 直播看播:观众观看直播
  • 推流:主播将数据发送到CDN网络
  • 拉流:观众从CDN拉去直播数据

1.webp.jpg

通信方案

推拉流协议方案

1.webp.jpg

RTMP

推流

RTMP:实时消息协议(Real-Time Messaging Protocol)

也称实时消息传输协议,是最初由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体、音频、视频和数据而开发的一个专有协议。后被 Adobe公司收购。

优势

•基于 tcp 协议

•技术成熟,FFmpeg 项目中有 rtmp 库

•低延迟(5-10s)

劣势

•停止更新

•规范上没有支持 H265

•使用 1935 端口,会被防火墙阻碍

1.webp.jpg

当我们获取到RTMP数据的时候,褪去协议层,就可以很方便的直接得到FLV视频数据

拉流

为解决上述的缺点问题,拉流端使用下面的协议,该协议的封装可以在CDN完成然后再供用户拉流

HTTP-FLVFlash Video(简称FLV),是一种网络视频格式,用作流媒体格式。

协议友好,格式简单,便于分发。由于几乎所有设备都会支持HTTP请求协议,那么这个协议对拉流极为友好,也是业内使用最多的协议。

不转码的情况下直接转发即可,延迟较低

HLS

HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP流媒体网络传输协议。是苹果公司QuickTime XiPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。

1.webp.jpg

1.webp.jpg

该协议把直播分成一段段小的视频文件(M3u8),然后在后边就进行封装为一个个的 ts 格式的包,必要时候可以再度封装为 http 格式的包。

1.webp.jpg

如果播放使用的是 HLS 协议,如图所示,假设服务端按照 3~10s 为单位来切片生成 ts 文件,则会直接导致播放的延时会达到 3~10s,这是该协议在延时方面的硬伤,如果对直播延时敏感,一般改用 RTMP 或者 HTTP-FLV 协议来拉直播流。

协议对比

1.webp.jpg1.webp.jpg


推拉流流程

推流端

1.webp.jpg

采集方式:摄像头、屏幕、图像采集卡等

图像处理的场景:美颜、绿幕、头饰 多使用 OpenGl

拉流端

1.webp.jpg

音画同步

比较常用的策略是:视频同步到音频。(由于人对声音是更加敏感的)

因为音频是流式的,按照规律的匀速的速率去播放,才能显得更加 “平滑”,而视频的播放其实是一张一张图片进行刷新显示,它的刷新时间的调整相对而言更容易一些,用户肉眼的敏感度也更弱一些。

1.webp.jpg

相关文章
|
7月前
|
开发工具 Android开发 开发者
Android如何回调编码后的音视频数据
有开发者提到,在RTMP推送端的基础上,希望能回调编码后的音视频数据,便于开发者对接第三方系统,如GB28181.
|
7月前
|
编解码 监控 网络协议
Android平台音视频推送选RTMP还是GB28181?
早在2015年,我们发布了RTMP直播推送模块,那时候音视频直播这块场景需求,还不像现在这么普遍,我们做这块的初衷,主要是为了实现移动单兵应急指挥系统的低延迟音视频数据传输。好多开发者可能会疑惑,走RTMP怎么可能低延迟?网上看到的RTMP推拉流延迟,总归要2-3秒起,如果是自己实现框架,RTMP推拉流逻辑自己实现的话,延迟确实可以控制在毫秒级,这个已无需赘述。
|
7月前
|
Web App开发 数据采集 物联网
Android平台基于RTMP或RTSP的一对一音视频互动技术方案探讨
随着智能门禁等物联网产品的普及,越来越多的开发者对音视频互动体验提出了更高的要求。目前市面上大多一对一互动都是基于WebRTC,优点不再赘述,我们这里先说说可能需要面临的问题:WebRTC的服务器部署非常复杂,可以私有部署,但是非常复杂。传输基于UDP,很难保证传输质量,由于UDP是不可靠的传输协议,在复杂的公网网络环境下,各种突发流量、偶尔的传输错误、网络抖动、超时等等都会引起丢包异常,都会在一定程度上影响音视频通信的质量,难以应对复杂的互联网环境,如跨区跨运营商、低带宽、高丢包等场景,行话说的好:从demo到实用,中间还差1万个WebRTC。
|
7月前
|
监控 前端开发 网络协议
Android前端音视频数据接入GB28181平台意义
在我们研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android或者Windows端,在没有国标IPC设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试?
|
7月前
|
Web App开发 开发工具 Android开发
Android平台不需要单独部署流媒体服务如何实现内网环境下一对一音视频互动
我们在做内网环境的一对一音视频互动的时候,遇到这样的技术诉求:如智能硬件场景下(比如操控智能硬件),纯内网环境,如何不要单独部署RTMP或类似流媒体服务,实现一对一音视频互动。
|
7月前
|
编解码 Android开发 数据安全/隐私保护
Android平台GB28181设备接入端对接编码前后音视频源类型浅析
今天主要对Android平台GB28181设备接入模块支持的接入数据类型,做个简单的汇总: 1. 编码前数据(目前支持的有YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565等数据类型),其中,Android平台前后摄像头数据,或者屏幕数据,或者Unity拿到的数据,均属编码前数据; 2. 编码后数据(如无人机等264/HEVC数据,或者本地解析的MP4音视频数据); 3. 拉取RTSP或RTMP流并接入至GB28181平台(比如其他IPC的RTSP流,可通过Android平台GB28181接入到国标平台)。
|
7月前
|
数据采集 编解码 vr&ar
Android平台实现VR头显Unity下音视频数据RTMP推送
随着技术发展的日新月异,虚拟现实产业已经从过去的探索期,自2020年起,慢慢过渡到高速发展期,随着5G时代的到来,大带宽高可靠低延迟网络环境,为虚拟现实产业提供了很好的网络保障,虚拟现实在越来越多的场景下有了应用价值,典型场景如工业互联网、虚拟仿真、文旅文博、智慧交通、智慧能源、智慧医疗、智慧校园、智慧农业等。同事,行业也对清晰度、流畅性和交互感也提出了更高的要求。本文从Android平台的采集推送为例,介绍下基于头显或类似终端的低延迟解决方案。
|
8月前
|
Web App开发 编解码 网络协议
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
279 0
|
10月前
|
Java Android开发 容器
Android实战开发--小慕笔记UI设计(Fragment布局的使用)
Android实战开发--小慕笔记UI设计(Fragment布局的使用)
Android实战开发--小慕笔记UI设计(Fragment布局的使用)