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

    转发:https://blog.csdn.net/liruda/article/details/2230617 #pragma comment ( lib,"wpcap.lib" ...

  2. JVM 常见线上问题 → CPU 100%、内存泄露 问题排查

    开心一刻 明明是个小 bug,但就是死活修不好,我特么心态崩了...... 前言 后文会从 Windows.Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前 ...

  3. jq显示数据在kindeditor

    1,定义编辑器的变量为全局变量 2,将数据显示到kindeditor   在我自己这里_下划线相当于数据,也就是将数据显示在kindeditor 中的textarea中 3,jquery获取kinde ...

  4. ansible-playbook文件复用

    1. ansible-playbook文件复用  1.1) include 和 import区别  include(动态):在运行时导入 --list-tags,--list-tasks不会显示到输出 ...

  5. java9系列第二篇-资源自动关闭的语法增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  6. 【C++设计模式二】工厂模式

    (1)定义3 简单工厂模式中,每新增一个具体产品,就需要修改工厂类内部的判断逻辑.为了不修改工厂类,遵循开闭原则,工厂方法模式中不再使用工厂类统一创建所有的具体产品,而是针对不同的产品设计了不同的工厂 ...

  7. 一入Java深似海

    Java的基础语法 一个java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来写协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象: 对象是一个类的实例,有状态和行为.例如 ...

  8. 为什么说 Python 内置函数并不是万能的?

    本文出自"Python为什么"系列,请查看全部文章 在Python猫的上一篇文章中,我们对比了两种创建列表的方法,即字面量用法 [] 与内置类型用法 list(),进而分析出它们在 ...

  9. go init执行顺序

    package test import "fmt" // 初始化函数 引入包的时候要先执行 可以重复定义多个 同一个go文件从上到下 多个文件 是按照字符串进行排序 从小到大 执行 ...

  10. js后台提交成功后 关闭当前页 并刷新父窗体

    后台提交成功后 关闭当前页 并刷新父窗体 this.ClientScript.RegisterStartupScript(this.GetType(), "message", &q ...