很多人对直播软件开发还是抱有想法的,但是在这个资本冷静的市场下,直播平台该怎么玩,在直播软件开发过程中哪些功能是必须具备的,这都是值得关注的话题。今天我们给大家分享一份详细的直播软件开发关于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中的视频采集步骤的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  2. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  3. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  4. Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验

    前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...

  5. 直播软件开发如何使用FFMPEG推流并保存在本地

    最近开发了基于C#的直播软件开发推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流 ...

  6. Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会

    文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...

  7. Android IOS WebRTC 音视频开发总结(二三)-- hurtc使用说明

    本文主要介绍如何测试基于浏览器和手机的视频通话程序,转载请说明出处,文章来自博客园RTC.Blacker,更多详见www.blackerteam.com   很多人想测试浏览器(包括浏览器版本和桌面e ...

  8. unity3d开发的android应用中增加AD系统的详细步骤

    unity3d开发的android应用中增加AD系统的详细步骤 博客分类: Unity3d unity3d  Unity3d已经支持android,怎样在程序里增加admob?  试了一下,确实能够, ...

  9. 【Android 直播软件开发:音视频硬解码篇】

    开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...

随机推荐

  1. Java知识系统回顾整理01基础06数组07数组工具类Arrays

    一.Arrays简介 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 二.Arrays提供的数组复制方法 与使用System.arraycopy ...

  2. C++中cout.setf()和cout.precision()

    这两个就是格式控制的~ostream成员函数里面的,也可以用输出流操作符来控制,都一样的~附给你一些看看~ 其中cout.setf跟setiosflags一样的,cout.precision跟setp ...

  3. SpringBoot整合Mybatis 编译失败:找不到符号 程序包不存在

    问题描述:jpa不好用,转用mybatis,配置多数据源  但是配置后无法编译mvn clean install  dao层这些报错,找不到entity的包     问题解决:罪魁祸首:热部署的部分 ...

  4. 盐城5138.6118(薇)xiaojie:盐城哪里有xiaomei

    盐城哪里有小姐服务大保健[微信:5138.6118倩儿小妹[盐城叫小姐服务√o服务微信:5138.6118倩儿小妹[盐城叫小姐服务][十微信:5138.6118倩儿小妹][盐城叫小姐包夜服务][十微信 ...

  5. 【转载】opencvVS2019配置方法

    环境: 系统:win10系统截至2020920版本 opencv版本:3.0.0版本 IDE:宇宙最强IDEA最新版本2019社区版 教程: 1.下载opencv安装包官网下载链接:https://o ...

  6. pytest文档33-Hooks函数获取用例执行结果(pytest_runtest_makereport)

    前言 pytest提供的很多钩子(Hooks)方法方便我们对测试用例框架进行二次开发,可以根据自己的需求进行改造. 先学习下pytest_runtest_makereport这个钩子方法,可以更清晰的 ...

  7. spring boot:thymeleaf模板中insert/include/replace三种引用fragment方式的区别(spring boot 2.3.3)

    一,thymeleaf模板中insert/include/replace三种引用fragment方式的区别 insert: 把整个fragment(包括fragment的节点tag)插入到当前节点内部 ...

  8. centos8平台用ffprobe获取视频文件信息(ffmpeg4.2.2)

    一,ffprobe的作用 ffprobe是强大的视频分析工具, 用于从多媒体流中获取相关信息或查看文件格式信息, 并以可读的方式打印 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https:// ...

  9. docker19.03搭建私有容器仓库

    一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...

  10. php生成器 yield 转

    一.yield介绍  文档介绍说道:生成器函数的核心是yield关键字.它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给 ...