首页 > 其他分享 >斗鱼直播实现:你主播最爱的Android音视频开发

斗鱼直播实现:你主播最爱的Android音视频开发

时间:2023-06-28 12:33:56浏览次数:58  
标签:视频 封装 后缀 音频 音视频 采集 格式 Android 主播


一、直播的本质

实时推送/拉取音视频数据

斗鱼直播实现:你主播最爱的Android音视频开发_数据

二、视频直播流程

视频直播的流程可以分为如下几步:

(1)采集

(2)处理

(3)编码和封装

(4)推流到服务器

(5)服务器流分发

(6)播放器流播放

斗鱼直播实现:你主播最爱的Android音视频开发_数据_02

1、采集

视频的采集涉及两方面数据的采集:音频采集和图像采集,它们分别对应两种完全不同的输入源和数据格式。

(1)两个传感器:

CCD:图像传感器,用于图像采集和处理,把图像转换为电信号

拾音器:声音传感器,用于声音采集和处理,把声音转换为电信号

(2)格式:

视频采样数据 : 一般都是 YUV 或 RGB 格式

音频采样数据 :一般都是PCM格式

由于所采集的内容非常大,所以需要进行压缩。常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等。视频编码压缩成 H.264 等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。

2、处理

视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,例如:美颜及水印。各种美颜和视频添加特效的App都是基于GPUImage框架实现。

3、编码和封装

视频编码的意义:原始视频数据存储空间大。核心思想就是去除冗余信息。

常见的视频编码器:

(1)H.264/AVC

(2)HEVC/H.265

(3)VP8

(4)VP9

(5)FFmpeg :是一个跨平台的开源视频框架,能实现如视频编码,解码,转码,串流,播放等丰富的功能。其支持的视频格式以及播放协议非常丰富,几乎包含了所有音视频编解码、封装格式以及播放协议。

封装:是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。

常见的封装格式:

(1)AVI 格式(后缀为 .avi)

(2)DV-AVI 格式(后缀为 .avi)

(3)QuickTime File Format 格式(后缀为 .mov)

(4)MPEG 格式(文件后缀可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)

(5)WMV 格式(后缀为.wmv .asf)

(6)Real Video 格式(后缀为 .rm .rmvb)

(7)Flash Video 格式(后缀为 .flv)

(8)Matroska 格式(后缀为 .mkv)

(9)MPEG2-TS 格式 (后缀为 .ts)

4、推流

传输协议:

RTMP :实时消息传输协议,Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,因为是开放协议所以都可以使用了。 RTMP协议用于对象、视频、音频的传输。

HLS(HTTP Live Streaming):是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议

RTSP(Real Time Streaming Protocol):实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由Real Networks和Netscape共同提出的

最后

最近也有重新整理了相关的音视频这一块的精华视频,感兴趣的可以关注关注。


如果感觉本文对你有帮助,请点个赞吧谢谢~

标签:视频,封装,后缀,音频,音视频,采集,格式,Android,主播
From: https://blog.51cto.com/u_16163453/6570425

相关文章

  • 最佳被虐——Android混淆文件生成器
    直接上效果!混淆前;混淆后;使用获取混淆文件自己生成规则使用intellijidea打开 proguard-creater 工程编辑Main.java根据提示填写相应参数运行即可使用已有规则前往proguard-file 下载对应的文件即可Android工程配置开启混淆buildTypes{release{minifyEnabledt......
  • Android性能优化:微信自用高性能持久化框架——MMKV组件原理
    MMKVMMKV——基于mmap的高性能通用key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强。githubMMKV是基于mmap内存映射的移动端通用key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强。从2015年中至今,在iOS微信上使用已有近3年,其......
  • 精选Android中高级高频面试题:四大组件及Fragment原理
    因为实际开发与参考答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解!面试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。Activity1、说下Activity生命周期?参考解答:在正常情况下,Activity的常用生命周期就只有如下7个onCreate():表示Activity正在被创......
  • 精选Android中高级面试题:性能优化,JNI,设计模式
    性能优化1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?参考回答:首先我们要清楚图片的三级缓存是如何的:如果内存足够时不回收。内存不够时就回收软引用对象2、内存中如果加载一张500*500的png高清图片。应该是占用多少的内存?不考虑屏幕比的话:占用内存......
  • Android知识笔记:记录 2 个 “容易误解” 的Android 知识点
    今天分享两个之前我们可能都搞错的Android知识点,我们还是要追求极致,把不懂的问题搞懂的~1.事件到底是先到DecorView还是先到Window的?有天早上看到事件分发的一个讨论:那么事件到底是先到DecorView还是先到Window(Activity,Dialog)的呢,引发出两个问题:1.touch相关事件在DecorView,Phon......
  • 记一次Android奇葩面试经历:因为没去过BAT,我被面试官“轰”出门外
    最近面试了几家大规模的公司,也遇到了各种各种的问题,技术方面的,管理方面的都有涉及。让我印象最深刻的是某上市公司,自称是阿里的控股子公司,创始人团队来自于阿里,感觉很高大上的样子。进门之后就是填表,然后就是技术负责人面试,问了一些项目中的问题。有的没的扯一大堆,对技术不是很看中......
  • Android 中高级面试原理:热修复与插件化基础—Java与Android虚拟机
    一、Java虚拟机(JVM)1、JVM整体结构使用javac将java文件编译成class文件。类加载器(ClassLoader)将class字节码加载进JVM对应的内存中。JVM将内存分配给方法区、堆区、栈区、本地方式栈4个部分,这4个部分分别存储字节码不同的部分。垃圾回收器(gc)会管理整个内存空间中的垃圾。2、Java代码......
  • BAT 大厂Android研发岗必刷真题:Android异常与性能优化相关面试问题
    今天来讲一讲在面试中碰到的Android异常与性能优化相关问题:1、anr异常面试问题讲解a)什么是anr?应用程序无响应对话框b)造成anr的原因?**主线程中做了耗时操作c)android中那些操作是在主线程呢?activity的所有生命周期回调都是执行在主线程的Service默认是执行在主线程的BroadcastR......
  • Android LayoutManager高端玩家,实现花式表格!
    如果你对RecyclerView原理还不是特别了解,非常建议你读一下。本文的项目也是学习自定义LayoutManager绝佳资料,大家有需要的可以好好拜读。前言表格是自打我进公司以后就使用的控件,起初使用的是ScrollablePanel,从一开始的被花式吊打,到后期的熟练使用。大佬写的控件确实给我的工作带来......
  • Android ‘Handler()‘ is deprecated
    privateHandlerhandler=newHandler();Handler()此构造函数在Android11/R之后已弃用。在Handler构造期间隐式选择Looper会导致操作无声地丢失(如果Handler不期待新任务并退出)、崩溃(如果有时在没有Looper活动的线程上创建处理程序)或竞争条件,处理程序关联的线程不......