音视频
我是榜样
阿里巴巴-皓文 我的微信、QQ:596639669
展开
-
语音编码常见概念解释--摘选自speex codec文档
Codec descriptionThis section describes Speex and its features into more details.ConceptsBefore introducing all the Speex features, here are some concepts in speech coding that help better und转载 2015-10-16 13:02:49 · 2045 阅读 · 1 评论 -
webrtc封装sdk(四)使用swig生成跨平台的api
##如何发布我们的sdk?当我们封装好了webrtc sdk后,建议使用swig处理c++头文件,来生成objc,java平台的api。##为何推荐使用swig使用swig的好处是当我们修改了c++接口后,只需要执行生成脚本,就可以更新objc和java类。不需手动修改,减少了工作量。我们仅需手动维护一份c++实现即可,对于android/IOS/MacOS平台的支持完全利用swig去支...原创 2019-01-05 16:30:17 · 646 阅读 · 0 评论 -
webrtc封装sdk(五)编译webrtc android遇到的问题
按照官方的编译步骤就可以编译出android版本的各个静态库libxxx.a当我们使用这些静态库,并且还需要编译自己写的那些c++代码时,可能会遇到以下两个问题自己本地的android ndk和webrtc内部使用的ndk版本不同ndk版本相同但是stl的libc++库类型不同,如llvm-libc++,gnustl,stlport等以上两个问题会导致如下类型的链接错误:un...原创 2019-01-05 16:30:43 · 2019 阅读 · 0 评论 -
webrtc封装sdk(六)获取本地pcm语音数据和远端混音后的pcm数据
做录音时首先需要获取本地采集的pcm数据和所有远端用户合成后的pcm数据,也就是播放时投递给扬声器的pcm数据,本文讲解一下如何获取webrtc的原始音频数据。##webrtc版本说明本文使用的webrtc api依赖于webrtc分支版本<=branch57在branch57以及以前的版本应该都能测试通过。在branch>=58中VoEExternalMedia可能会被移除。...原创 2019-01-05 16:36:31 · 2580 阅读 · 0 评论 -
webrtc封装sdk(七)如何在macos上编译Android版本webrtc
有些开发的朋友习惯使用macos来工作,所以需要在macos上编译webrtc android版本,但是根据webrtc官方的说法,目前只支持在linux系统下编译webrtc android版本,经过自己的研究发现,其实可以通过很少的修改,在mac上编译通过webrtc android。这里说的方法不是使用linux虚拟机,是真的在macos下编译。下面讲解一下如果操作。##准备阶段...原创 2019-01-05 16:37:18 · 2555 阅读 · 1 评论 -
webrtc封装sdk(八)使用webrtc desktop_capture截屏
###简介webrtc的modules中有一个模块desktop_capture,该模块负责截屏,目前只支持windows和mac平台,android,ios没有实现。desktop_capture中有两种截屏方式,第一种是截单个窗口,叫做WindowCapturer,第二种是截整个屏幕,叫做ScreenCapturer。window_capture/screen_capture都继承于基...原创 2019-01-05 16:37:56 · 6128 阅读 · 3 评论 -
基于路由表的webrtc流媒体服务器方案
##概述在开发流媒体服务器时,rtp数据如何在服务器之间转发,对于降低音视频延时和丢包有很重要的影响。我设想了一种可以降低音视频延时的转发方案。思想来源于IP协议的路由表选路算法。TCP UDP协议的区别我们经常说tcp和udp的区别是,tcp是有连接的,udp是无连接的。TCP的有连接什么是连接?连接就是一个固定的路径,这个路径是由网络上一些路由器、交换机组成。这个连接途经的...原创 2019-01-05 16:39:07 · 1039 阅读 · 2 评论 -
webrtc远端图像尺寸改变时,如何调整webrtc ios view的大小
当使用ios版webrtc objective-c的api时,我们使用RTCEAGLVideoView来显示远端图像@interface RTCEAGLVideoView : UIView <RTCVideoRenderer>@property(nonatomic, weak) id<RTCEAGLVideoViewDelegate> delegate;@end...原创 2019-01-05 16:39:46 · 2109 阅读 · 0 评论 -
cef中c++和javascript数据交互的几种方法
cef中c++和javascript数据交互的几种方法基础知识cef中有两种进程,render进程和browser进程。render进程render进程负责显示web页面,运行javascript代码。v8引擎的初始化是在render进程中调用的,所以你的javascript代码是在render进程中执行的。即使你在browser进程中调用frame->ExecuteJavaS...原创 2019-01-05 16:43:11 · 7943 阅读 · 1 评论 -
如何下载旧版本android NDK
我们可能会有一些旧代码需要旧版本的NDK来编译那么如何下载旧版本NDK呢?方法为:根据版本号拼接下载地址32位版本后缀为x86,64位版本后缀为x86_641、版本号<=r10btar.gz for linux /macos and .zip for windowsLinux:http://dl.google.com/android/ndk/android-ndk-r9b-lin...原创 2019-01-05 16:44:29 · 2306 阅读 · 0 评论 -
如何裁剪YUV420图像,抓取指定区域,制作方形视频,模仿Instagram
###I420格式介绍在webrtc中android和ios系统采集摄像头获取到原始数据后,一帧原始图像会被转化为标准的YUV420P格式,也就是I420格式,转换的函数使用的是libyuv中的ConvertToI420()函数###YUV格式详细讲解进行裁剪操作需要对I420格式的内存分布有深入的了解,推荐大家看这篇文章:http://blog.csdn.net/jefry_xdz/...原创 2019-01-05 16:46:42 · 2512 阅读 · 2 评论 -
有关音频编码的知识与技术参数
自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。##1、什么是采样率和采样大小(位/bit)? 声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行...转载 2019-01-05 16:47:12 · 23145 阅读 · 1 评论 -
语音编码常见概念解释--摘选自speex codec文档
原文地址:http://www.speex.org/docs/manual/speex-manual/node4.htmlCodec descriptionThis section describes Speex and its features into more details.ConceptsBefore introducing all the Speex features, her...转载 2019-01-05 16:47:45 · 23706 阅读 · 1 评论 -
如何识别 macos/ios 使用跨平台宏定义
在xcode中系统内置的跨平台宏定义在头文件中#ifdef #ifdef APPLE#include &lt;TargetConditionals.h&gt;#endif此头文件中各个平台的宏定义有(以Mac为例):#define TARGET_OS_MAC 1#define TARGET_OS_WIN32 0#define TARGET_OS_UNIX 0#de...原创 2019-01-05 16:59:51 · 5486 阅读 · 0 评论 -
webrtc封装sdk(三)VoiceEngine的使用方法
WebRtc中VoiceEngine的使用方法webrtc中的VoiceEngine是用来管理语音通道channel的类提供了控制语音整个过程的接口VoiceEngine的实现类VoiceEngineImpl通过继承的方式将很多不同类型的接口集成在了一个类对象中。这些接口一共分为以下几种类型:VoiceEngine :基础接口,可以设置log文件路径,创建VoiceEngineImpl...原创 2019-01-05 16:29:50 · 25831 阅读 · 1 评论 -
webrtc封装sdk(二)call api的使用
##为什么使用Call Api目前新版webrtc的api和以前已经有很大不同,如果希望封装webrtc为一个音视频sdk,目前最简单的方法就是了解并使用call类的api。本文简单介绍Webrtc::Call的基本使用方法。文中提到的代码可以参考我的开源项目:Mac端可以运行的call调用demofoxrtc–基于webrtc封装的sdk##Call简介Call类的头...原创 2019-01-05 16:29:27 · 25912 阅读 · 5 评论 -
webrtc封装sdk(一)思路
很多公司使用webrtc来做音视频sdk,但是大部分公司在使用上层的api,使用起来很繁琐,需要了解很多会话协议,《webrtc封装sdk》系列文章为大家讲述一种更简单的封装方法,只需几天,就可以封装出一个sdk。为何如此简单?本文讲述的方法,不处理会话管理部分的逻辑,只针对音视频数据包,通过使用webrtc内部的c++接口来实现音视频的基本功能,并且能够回调上来原始的rtp/rtcp数据包,...原创 2019-01-05 16:28:57 · 28472 阅读 · 2 评论