直播软件开发关于Android、iOS中的视频采集步骤
很多人对直播软件开发还是抱有想法的,但是在这个资本冷静的市场下,直播平台该怎么玩,在直播软件开发过程中哪些功能是必须具备的,这都是值得关注的话题。今天我们给大家分享一份详细的直播软件开发关于Android 、iOS音视频采集步骤讲解。
手机直播软件开发过程中,Android 音频帧采集步骤:
与Camera 的配置相比,AudioRecord 简单了很多,在实例化 AudioRecord 时需要指定采集源,笔者设定为了麦克风,然后指定采样率,笔者采用兼容性非常强的 44100Hz ,也就是每秒采集 44100 次,接着是配置音频通道,由于笔者对音频要求不是很高所以采用了 AudioFormat.CHANNEL_IN_MONO 代表单通道,当然也是支持双通道立体声采集的,只需传入 AudioFormat.CHANNEL_IN_STEREO 即可,然后再设置采样的数据格式,也就是每个采样值所占空间的大小,笔者选择了 16位 也就是 2 byte ,最后再配置上缓冲器大小,这个值一般不是写死的可以通过 AudioRecord.getMinBufferSize 来获取一个最小值。
接着只需要调用AudioRecord.read 即可获取采集到的 PCM 视频。
手机直播软件开发过程中,Android 视频帧采集步骤:
对于Android直播软件开发者来说Camera 这个类并不陌生,我们只需要一些简单配置以后就可以配合 SurfaceView 来浏览摄像头所捕捉到的画面,我们这次的部分配置也许与往常的不同,因为我们需要自己处理每一帧视频,比如需要设置一个采样格式: Camera.Parameters.setPreviewFormat,点进源码你会发现里面所支持的格式有很多,但是不幸的是 5.0 以前只支持 NV12 与 YV12 ,关于这两种采样模式等下会细讲。除此之外你还需添加缓冲区来存放临时的视频数据,并设置采样回调,如:
这里的buffSize 大小与采样格式息息相关,不过 NV12 与 YV12 的每帧大小倒是刚好一样大的,都是3/2*H*W,在 TODO 的位置我们就可以对视频进行编码与或者其他操作,但是千万别直接编码或者操作,很关键!你可以使用一个队列来储存数据,然后开启一个线程去读这个队列里面的数据,然后进行操作,因为你直接操作很可能阻塞这个线程,这个线程是主线程,虽然一般不会导致 ANR ,但是很可能造成丢帧,比如你采集的帧率是 30fps ,采集到第一帧的时候你阻塞了一会儿,那么很可能第二第三帧就会丢,然后你处理第四帧,第五第六帧就会丢,最后播放视频的时候就会像按了快进一样,并且处理完后我们需要及时把 buffer 归还给 Camera。
手机直播软件开发过程中,iOS音视频采集的步骤
1、创建并初始化 AVCaptureSession。
2、创建并初始化 AVCaptureVideoDataOutput。
3、设置 AVCaptureVideoDataOutput的videoSettings,videoSettings 中的 Key and value 包含了输出图像与视频格式定义。
4、调用 AVCaptureVideoDataOutput 对象的 setSampleBufferDelegate 方法,设置采样数据缓冲区的代理。这样当从输入设备采集到数据后,系统就会自动调用AVCaptureVideoDataOutputSampleBufferDelegate 协议中的 captureOutput 方法,从而获取到视频数据。
5、将 AVCaptureVideoDataOutput 对象添加到 AVCaptureSession对象中。
6、根据视频类型 AVMediaTypeVideo,创建 AVCaptureDevice 对象。(可以创建视频设备也可以创建音频设备)。
7、以 AVCaptureDevice 为参数,创建 AVCaptureDeviceInput 对象。
8、将 AVCaptureDeviceInput 对像添加到 AVCaptureSession 对象中。
9、调用 AVCaptureSession 对象的 setSessionPreset 方法进行属性设置。如 设置 quality level, bitrate, 或其它 output 的 settings。
10、调用 Output 对象的 connectionWithMediaType 方法,建立 Input与Output之前的连接。
11、调用 AVCaptureSession 对象的 startRunning() 方法,开始视频采集。12、调用 AVCaptureSession 对像的 stopRunning() 方法,停止视频采集。
以上音视频采集步骤主要是直播软件开发过程中app开发基本功能展示,除此之外还会包好管理后台功能。其实,直播平台如何搭建这个问题并不困难,大多数服务商会免费提供直播平台搭建部署服务,如果是自己搭建网上也有很多参考教程,对于后期运营而言直播软件开发时的功能确立反而更为重要。
声明:本篇文章为云豹kj的小编原创文章,转载请带链接并表明名称。
直播软件开发关于Android、iOS中的视频采集步骤的更多相关文章
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- 直播软件开发如何使用FFMPEG推流并保存在本地
最近开发了基于C#的直播软件开发推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(二三)-- hurtc使用说明
本文主要介绍如何测试基于浏览器和手机的视频通话程序,转载请说明出处,文章来自博客园RTC.Blacker,更多详见www.blackerteam.com 很多人想测试浏览器(包括浏览器版本和桌面e ...
- unity3d开发的android应用中增加AD系统的详细步骤
unity3d开发的android应用中增加AD系统的详细步骤 博客分类: Unity3d unity3d Unity3d已经支持android,怎样在程序里增加admob? 试了一下,确实能够, ...
- 【Android 直播软件开发:音视频硬解码篇】
开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...
随机推荐
- RHSA-2017:2473-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- 常见的Mysql十款高可用方案
简介 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作 ...
- lua 1.0 源码分析 -- 1 lua 的虚拟指令
lua的解释器拿到 lua 编写的源码,首先进行解析,就是进行词法分析和语法分析,将源码转换成 lua 的指令集,然后执行这个指令集. lua 源码: function f(val) return v ...
- IIS日志文件越来越大导致C盘空间变小处理方法
问题概述 C:\inetpub\logs\LogFiles\W3SVC文件夹越来越大,IIS日志会消耗大量的硬盘空间,有潜在写满整个硬盘空间的风险,为了解决这个问题很多用户会选择关闭日志,但显然IIS ...
- elk-安装 通过docker
一. github地址 https://github.com/deviantony/docker-elk cd /usr/local/src git clone https://git ...
- nginx安全:配置网站图片防盗链
一,为什么要做防盗链? 1,什么是盗链? 比如某人有一个A网站, 他不愿自己存储图片,(因为磁盘和带宽都有成本) 就在自己A网站的页面上直接插入B网站的图片, 从而为自己吸引流量,这就是盗链 2,为什 ...
- selenium--数据填充
from time import sleep from selenium import webdriver br = webdriver.Chrome() url = "https://ww ...
- xpath教程-通过ID和Class检索 转
通过ID和Class检索 必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自 ...
- Jquery特效之=》仿京东多条件筛选特效
仿京东多条件筛选特效 * { margin: 0; padding: 0; list-style-type: none } a, img { border: 0 } body { font: 12px ...
- electron-updater实现更新electron应用程序
electron-updater实现更新electron应用程序 第一步 安装"electron-updater": "^4.3.5", 打开package.j ...