直播软件开发关于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可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...
随机推荐
- matlab中的qr函数
转自:https://blog.csdn.net/qq278672818/article/details/62038630 实数矩阵A的QR分解是把A分解为 A = QR 这里的Q是正交矩阵(意味着Q ...
- 关于arduino与SPI
参考: 作者:李俊轩 来源:本站原创 点击数:x 更新时间:2013年07月18日 [字体:大 中 小] SPI的英文全称是:"Serial Peripheral Inte ...
- ReverseFind的用法 ; 查找字符中最后一个字符
转载:https://blog.csdn.net/frivolousinstant/article/details/52796922 ReverseFind CString::ReverseFind ...
- 【题解】[CQOI]动态逆序对
题目链接 题意如题,维护一个动态序列的逆序对总数. 注意题目给的是\([1,n]\)的排列,所以没必要离散化了. 考虑逆序对:二维偏序可以用树状数组做,现在是三维偏序,即加了一个时间维度. 找一个数前 ...
- ESP8266 玩板记
一.前言 esp8266的玩板记,后面应该会去更一些其他东西,这一块内容,这算是收官之战了. IoT,江湖有缘再相会 二.ESP8266实现WiFi杀手/钓鱼 这次的博客做的是一个娱乐性较强的项目. ...
- NOI 2012 【迷失游乐园】
这道题,额,反正我是刚了2天,然后就萎了......(是不是觉得我很菜) 题目描述: 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩. 进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐 ...
- java性能分析之火焰图
原由 最近因为kafka.zookeeper.ES和相关的Java应用的内存问题搞的头大,做运维将近4年,对Java调优.性能方面的知识了解的少之又少,是时候下定决心来对他多一个学习了.不能一口吃成一 ...
- python写文件时遇到UnicodeEncodeError: 'gbk' codec can't encode character的解决方式
在window平台,文件的默认编码是gbk, 此时如果写入的字符串的编码是utf-8就会引发这种错误,打开文件的编码必须与字符串的编码一致 with open('content.txt','w',en ...
- PS文字
点文本 直接单击鼠标可输点文字 输完后在离文字较远的地方出现白色箭头单击可结束输入,也可选择其他图层结束输入 再次修改文字可双击文字缩览图 出现黑色小箭头可以在输入到的情况下拖动文字,文字工具下按Ct ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功
问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...