音频应用(如sip与Voip),编解码API(Ringtone,SoundPool,MediaPlayer),回声消除等(Lame Speex等),OpenSL ES

3套音频播放API:MediaPlayer,SoundPool,AudioTrack.

android录音项目,用单例模式集成了record,并实时转码mp3- https://github.com/nmyangmo/Android-Mp3-Record

-- 应用:音频编辑/处理软件:(ktv音效、变声, 铃声转换);蓝牙耳机/音箱 :(耳机、KBOX)  等等。
              音视频 监控应用: (摄像头,录音笔);音视频直播应用:(午夜直播,心灵之声电台);
              音频  播放器:(QQ音乐,网易云音乐);录音机 :(全民K歌);语音电话:(QQ电话,微信电话);
              音频  应用:语音电话,音乐软件,读书软件,小说频道,读新闻等。会说话的汤姆猫

> sip与Voip

sip支持握手协议。

 Linphone是一款适用于(Windows, Mac OS, Android)的跨平台VOIP电话工具,基于标准SIP协议.Linphone使用的是标准的SIP协议,因此,可以和其他使用了SIP协议的VOIP运营商的网络兼容。
 android里面的voip(voice over internet protocol)网络通话基于sip(session initiation protocol)协议.
 android.hardware.sip.voip权限。IMSDroidGoogle的开源项目。

  surfaceFliger,audioFliger.音频声道与采样率。jetPlayer,jet播放器与jet引擎,MIDI.ToneGenerator,RingTone播放音频。音乐场景。安卓的音效处理与open sl.tts识别 合成,播放。c与汇编。安卓的gcc编译器。

-- soundPool

private SoundPool soundPool;
private int sound1,sound2;
private Map<String, Integer>map=new HashMap<String, Integer>();
//指定声音品质,还没有开启作用        
soundPool=new SoundPool(2, AudioManager.STREAM_MUSIC, 0);      
//第三个参数还没有开启作用       
map.put("音效1", soundPool.load(this, R.raw.nudge, 1));      
map.put("音效2", soundPool.load(this, R.raw.online, 1));

一个简单的sample , 用来理解及测试SoundPool的相关功能- https://download.csdn.net/download/qq_28261343/10684051
SoundPoolDemo- https://github.com/vir56k/demo/tree/master/SoundPoolDemo

public void playSound(Context context) {
        //可以通过四种途径来记载一个音频资源:
        //1.通过一个AssetFileDescriptor对象
        //int load(AssetFileDescriptor afd, int priority)
        //2.通过一个资源ID
        //int load(Context context, int resId, int priority)
        //3.通过指定的路径加载
        //int load(String path, int priority)
        //4.通过FileDescriptor加载
        //int load(FileDescriptor fd, long offset, long length, int priority)
        //声音ID 加载音频资源,这里用的是第二种,第三个参数为priority,声音的优先级*API中指出,priority参数目前没有效果,建议设置为1。
//        final int voiceId = mSoundPool.load(context, R.raw.sound, 1);

    }

public class SoundPoolUtils {

    private static SoundPoolUtils mInstance;
    private SoundPool mSoundPool;
    private HashMap mSoundDataMap;
    private Context mContext;
    public static String mSoundStartKey = "tts_speech_start";
    public static String mSoundEndKey = "tts_speech_end";

    private SoundPoolUtils() {

    }

    public static SoundPoolUtils getInstance() {
        if (mInstance == null) {
            synchronized (SoundPoolUtils.class) {
                mInstance = new SoundPoolUtils();
            }
        }
        return mInstance;
    }

    /**
     * 需要先初始化再调用playSound
     * @param context
     */
    public void init(Context context) {
        mContext = context;
        // sdk版本21是SoundPool 的一个分水岭
        if (Build.VERSION.SDK_INT >= 21) {
            SoundPool.Builder builder = new SoundPool.Builder();
            // 传入最多播放音频数量,
            builder.setMaxStreams(1);
            // AudioAttributes是一个封装音频各种属性的方法
            AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
            // 设置音频流的合适的属性
            attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
            // 加载一个AudioAttributes
            builder.setAudioAttributes(attrBuilder.build());
            mSoundPool = builder.build();
        } else {
            /**
             * 第一个参数:int maxStreams:SoundPool对象的最大并发流数
             * 第二个参数:int streamType:AudioManager中描述的音频流类型
             * 第三个参数:int srcQuality:采样率转换器的质量。 目前没有效果。 使用0作为默认值。
             */
            mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        }


        mSoundDataMap = new HashMap<String, Integer>();
        mSoundDataMap.put(mSoundStartKey, mSoundPool.load(context, R.raw.tts_speech_start, 1));
        // 当loop值为“0”时,播放模式为单次模式;当loop值为一个正整数时,loop值意味着可以播放的次数。
        // mSoundPool.setLoop(R.raw.tts_speech_start, 0);
        mSoundDataMap.put(mSoundEndKey, mSoundPool.load(context, R.raw.tts_speech_end, 1));
        // mSoundPool.setLoop(R.raw.tts_speech_end, 0);
        // 异步需要等待加载完成,音频才能播放成功
        mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                if (status == 0) {
                    // 加载完成后音频才能播放成功
                }
            }
        });
    }

    /**
     * 播放音频
     * @param mapSoundKey
     */
    public void playSound(String mapSoundKey) {
        AudioManager am = (AudioManager) mContext
                .getSystemService(Context.AUDIO_SERVICE);
        float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        float volumnCurrent = am.getStreamVolume(AudioManager.STREAM_MUSIC);
        float volumnRatio = volumnCurrent / audioMaxVolumn;

        // 第一个参数soundID
        // 第二个参数leftVolume为左侧音量值(范围= 0.0到1.0)
        // 第三个参数rightVolume为右的音量值(范围= 0.0到1.0)
        // 第四个参数priority 为流的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理
        // 第五个参数loop 为音频重复播放次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次
        // 第六个参数 rate为播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)
        mSoundPool.play((Integer) mSoundDataMap.get(mapSoundKey),
                volumnRatio,  // 左声道音量
                volumnRatio,  // 右声道音量
                1,    // 优先级
                0,  // 循环播放次数 playNumber
                1);     // 回放速度,该值在0.5-2.0之间 1为正常速度
    }

    /**
     * 释放资源
     */
    public void releaseSoundPool() {
        if (mSoundPool != null) {
            mSoundPool.autoPause();
            mSoundPool.unload((Integer)mSoundDataMap.get(mSoundEndKey));
            mSoundPool.unload((Integer)mSoundDataMap.get(mSoundStartKey));
            mSoundPool.release();
            mSoundPool = null;
        }
    }
}

-- 音频的使用场景:
音频播放器,录音机,语音电话,音视频监控应用,音视频直播应用,音频编辑/处理软件,蓝牙耳机/音箱等。

-- AAC(高级音频编码)格式的主要扩展名有三种:
 1.AAC - 使用MPEG-2 Audio Transport Stream( ADTS,参见MPEG-2 )容器,区别于使用MPEG-4容器的MP4/M4A格式,属于传统的AAC编码(FAAC默认的封装,但FAAC亦可输出 MPEG-4 封
装的AAC)
 2.MP4 - 使用了MPEG-4 Part 14(第14部分)的简化版即3GPP Media Release 6 Basic (3gp6,参见3GP ) 进行封装的AAC编码(Nero AAC 编码器仅能输出MPEG-4封装的AAC);
 3.M4A - 为了区别纯音频MP4文件和包含视频的MP4文件而由苹果(Apple)公司使用的扩展名,Apple iTunes 对纯音频MP4文件采用了".M4A"命名。M4A的本质和音频MP4相同,故音频MP4文件亦可直接更改扩展名为M4A。

-- 对于语音采样:
8,000 Hz - 电话所用采样率, 对于人的说话已经足够;
11,025 Hz -  ;
22,050 Hz - 无线电广播所用采样率;
32,000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率;
44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率;
47,250 Hz - Nippon Columbia (Denon)开发的世界上第一个商用 PCM 录音机所用采样率;
48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率;
50,000 Hz - 二十世纪七十年代后期出现的 3M 和 Soundstream 开发的第一款商用数字录音机所用采样率;
50,400 Hz - 三菱 X-80 数字录音机所用所用采样率;
96,000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音轨、Blu-ray Disc(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率;
2.8224 MHz - SACD、 索尼 和 飞利浦 联合开发的称为 Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率。
50 Hz - PAL 视频;
60 / 1.001 Hz - NTSC 视频;
13.5 MHz - CCIR 601、D1 video;

-- 音频开发的具体内容:
(1)音频采集/播放
(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离,等等)
(3)音频的编解码和格式转换
(4)音频传输协议的开发(SIP,A2DP、AVRCP,等等)         
   a.SIP:会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话
   b.A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定!A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。
   c.AVRCP(Audio/Video Remote Control Profile),即音频/视频远程控制规范。

 Android端的音频技术包括:音频的录制、播放、降噪、压缩,以及在局域网中的实时传输等。

-- 音视频开源库选型:x264+ffmpeg+speex+webrtc(aecm+ns),说一下原因:
1、x264开源h264编码器,之所以没有用mediacodec,因为测试发现,手机通用性差,有的手机对api支持不好;
2、ffmpeg做视频解码用;
3、speex 做音频编解码;
4、webrtc提取acem,ns模块用于处理回声消除和降噪;

  音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。

常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等。

MP3头帧详解- https://www.jianshu.com/p/c3f8be205e3f
MP3解码算法原理解析- https://www.jianshu.com/p/58df71a19901

> OpenSL ES来播放和录制音频
-- Android底层库OpenSL ES来播放音频文件(包括assets、uri和pcm),OpenSLES播放PCM音频
Android利用OpenSL ES通过assets、Uri和pcm文件的方式来播放音频- https://github.com/wanliyang1990/Android_OpenSl_Audio/tree/master
FFmpegOpenSLES- https://github.com/2016lc/FFmpegOpenSLES
Audio API demo on Android platform- https://github.com/Jhuster/AudioDemo
使用 OpenSL ES 播放音频。- https://github.com/renhui/OpenSL_Audio
audio_openSL- https://github.com/CL-window/audio_openSL
plays and records sounds with the C++ OpenSLES API using JNI- https://github.com/googlesamples/android-ndk/tree/master/native-audio
use OpenSL ES to create a player and recorder in Android Fast Audio Path-https://github.com/googlesamples/android-ndk/tree/master/audio-echo

> 音频SDK;AudioRecord 采集音频,利用 AudioTrack 播放音频,利用 MediaCodec 来编解码

Android音频开发基础知识- http://blog.51cto.com/ticktick/1748506?spm=a2c4e.11153940.blogcont8637.16.6ddf57d9jPfsKf
Android开发笔记-音频录制/播放&音频- https://github.com/Jhuster/AudioDemo
Android开源音视频播放器- https://blog.csdn.net/shareus/article/details/64439425
MediaCodec硬解码实现RTSP协议H264格式视频流实时播放及SD卡中H264格式文件播放 - https://github.com/ldm520/ANDROID_MEDIACODEC_RTSP_H264
音视频开发- http://blog.51cto.com/ticktick/p1
VLC media player- https://github.com/videolan/vlc
一款轻量级的 Android aac 编码库:https://github.com/timsu/android-aac-enc
从 opencore 抽取出来的 amr 编解码库:https://github.com/kevinho/opencore-amr-android
  iLBC 是著名的 WebRTC 项目的音频编解码模块,
iLBC-Android 是从中抽取 iLBC 模块移植到 Android 平台- https://github.com/lukeweber/iLBC-Android

“T-L-V”协议,Provide some easy-to-use API for TLV encode and decode- https://github.com/Jhuster/TLV
多播的部分Personal c library code- https://github.com/Jhuster/clib
   采样RTP协议,则可以考虑常见的RTP库,包括:Jrtplib和ortp,前者是C++开发,后者采用C语言开发,都很不错,我最后实现了两个版本,一个是采用ortp,另一个是采用udp,其实,如果不做RTCP控制的话,还是采用udp更加简单点。

android MediaCodec 音频编解码的实现——转码- http://blog.csdn.net/TinsanMr/article/details/51049179
MediaCodec编译pcm为aac- http://blog.csdn.net/tn0521/article/details/44980183

> 音频开发与API,音频系统
-- AudioFlinger是Android音频系统两大服务之一, android 音频策略
 Android4.4的AudioFlinger代码位置:frameworks/av/services/audioflinger,相比于之前版本更加模块化,基本把各个模块代码都抽取出来独立成文件,如下:
 1.AudioResampler.cpp:重采样处理,可进行采样率转换和声道转换;由录音线程AudioFlinger::RecordThread调用;
 2.AudioMixer.cpp:混音处理,包括重采样、音量调节、声道转换等,其中的重采样复用了AudioResampler的代码;由放音线程 AudioFlinger::MixerThread调用;
 4.Effects.cpp:音效处理;
 5.Tracks.cpp:放音情形:AudioFlinger::PlaybackThread::Track是音轨数据的消费者,对应的生产者是AudioTrack.cpp,每个音轨对应着各自的AudioTrack实例,AudioTrack实例在创建时会注册到放音线程AudioFlinger::MixerThread中;录音情形类似;
 6.Threads.cpp:放音和录音线程实现;放音线程负责把音轨数据按照相关参数(采样率/声道数/音量大小/音效等)混音处理后,回调Audio HAL的out_write()方法把处理后的数据送给底层硬件;放音线程由AudioFlinger:: openOutput()创建,录音线程由AudioFlinger::openInput()创建;
 7.AudioFlinger.cpp:实现AudioFlinger的接口整合,之前版本Effects/Tracks/Threads均被包含在这个文件中,因此显得极为庞大;4.4版本AudioFlinger只包含对外提供的接口,Effects/Tracks/Threads则作为私有模块独立出来,架构看起来更清晰了。

  AudioTrack通过它来控制播放开始/结束(start/stop)以及数据写入(write),AudioFlinger管理多个track的数据,如调用AudioMixer来混音。
  Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中进行播放,目前Android的Froyo版本设定了同时最多可以创建32个音频流,也就是说,Mixer最多会同时处理32个AudioTrack的数据流。
  AudioTrack和AudioFlinger并不在同一个进程中,它们通过android中的binder机制建立联系。AudioFlinger是android中的一个service,在android启动时就已经被加载。AudioTrack是FIFO的数据生产者;AudioFlinger是FIFO的数据消费者。

-- Audio openCore:
 AudioManager:这个主要是用来管理Audio系统的
 AudioTrack:这个主要是用来播放声音的
 AudioRecord:这个主要是用来录音的

Android深入浅出之Audio 第一部分 AudioTrack分析 - http://www.cnblogs.com/innost/archive/2011/01/09/1931457.html
  服务端共开放两个端口,一个udp上行端口用来接收amr音频流,另一个tcp下行端口用来发送amr音频流。服务端实现了组播的功能,即一个人在录音,可以同时让很多人同时听到。

> 学习 MediaCodec API,完成音频 AAC 硬编、硬解;
  AudioTrack主要是用来进行主要是用来播放声音的,但是只能播放PCM格式的音频流。
 mp3文件转码为aac音频文件。转码实现原理:mp3->pcm->aac,首先将mp3解码成PCM,再将PCM编码成aac格式的音频文件。
 mime:用来表示媒体文件的格式 mp3为audio/mpeg;aac为audio/mp4a-latm;mp4为video/mp4v-es;音频前缀为audio,视频前缀为video 我们可用此区别区分媒体文件内的音频轨道和视频轨道。

-- 音频开发的Android API:
音频 采集: MediaRecoder,AudioRecord;
音频 播放: SoundPool,MediaPlayer,AudioTrack;
音频编解码:MediaCodec;
NDK API:   OpenSL ES;
音频处理的开源库:Speex、WebRTC、Opus等。

-- OpenSL ES Player 和 Recorder 相关 API - https://github.com/Jhuster/AudioDemo
  -- OpenSL ES 从 Android 2.3 开始就提供了,特性:
(1)C 语言接口,兼容 C++,需要在 NDK 下开发,能更好地集成在 native 应用中;
(2)运行于 native 层,需要自己管理资源的申请与释放,没有 Dalvik 虚拟机的垃圾回收机制;
(3)支持 PCM 数据的采集,支持的配置:16bit 位宽,16000 Hz采样率,单通道。(其他的配置不能保证兼容所有平台);
(4)支持 PCM 数据的播放,支持的配置:8bit/16bit 位宽,单通道/双通道,小端模式,采样率(8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 Hz);
(5)支持播放的音频数据来源:res 文件夹下的音频、assets 文件夹下的音频、sdcard 目录下的音频、在线网络音频、代码中定义的音频二进制数据等等;

-- OpenSL ES不支持
(1)不支持版本低于 Android 2.3 (API 9) 的设备;
(2)没有全部实现 OpenSL ES 定义的特性和功能;
(3)不支持 MIDI ;
(4)不支持直接播放 DRM 或者 加密的内容;
(5)不支持音频数据的编解码,如需编解码,需要使用 MediaCodec API 或者第三方库;
(6)在音频延时方面,相比于上层 API,并没有特别明显地改进;

   Android 语音的采集和输出有两种方案:第一种方案是采用 Android SDK提供的 Java 端的 API,即 MediaRecoder类(采集)和 AudioTrack类(播放)来完成,第二种方案则是采用Android NDK提供的 Android OpenSL ES 接口,在 Native 层直接完成语音的采集与输出。

-- 在Android中音频编解码的两种方式(有其他):AudioRecord,MediaRecorder
(一)使用AudioRecord采集音频,用这种方式采集的是未经压缩的音频流;用AudioTrack播放实时音频流。用这两个类的话,如果需要对音频进行编解码,就需要自己移植编解码库了,比如可以移植ilbc,speex等开源编解码库。ilbc的编解码实现可以查看这个专栏:http://blog.csdn.net/column/details/media.html
(二)使用MediaRecorder获取编码后的AMR音频,但由于MediaRecorder的特点,只能将流保存到文件中,但通过其他方式是可以获取到实时音频流的,这篇文章将介绍用LocalSocket的方法来实现;使用MediaPlayer来播放AMR音频流,但同样MediaPlayer也只能播放文件流,因此我用缓存的方式来播放音频。

 音频采集:MediaRecoder,AudioRecord  。前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3等)并存成文件,而后者则更接近底层,能够更加自由灵活地控制,可以得到原始的一帧帧PCM音频数据。如果想简单地做一个录音机,录制成音频文件,则推荐使用 MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输等应用,则建议使用 AudioRecord。
 音频播放:SoundPool,MediaPlayer,AudioTrack 。MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源; SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等,它可以同时播放多个音频; 而 AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体和VoIP语音电话等场景。

-- 安卓平台和声音录制与播放相关的主要有的类:MediaRecorder,MediaPlayer,SoundPool,AudioRecord和AudioTrack。
1.MediaRecorder可以录制视频和音频到文件
2.MediaPlayer可以播放视频和音频文件
3.SoundPool用于播放比较短的音频片段
4.AudioRecord可以提供接口读取音频流数据(byte数组或者short数组)
5.AudioTrack提供接口用于播放音频流数据。

   其中MediaRecorder和AudioRecord用于声音录制,SoundPool、MediaPlayer和AudioTrack用于声音播放。AudioRecord和AudioTrack用于操作音频流数据,操作对象是byte数组(或者short数组),而MediaRecorder和MediaPlayer提供了经过更高层抽象和封装接口,直接对文件进行操作,而且他俩功能更丰富,同时支持音频和视频。

-- 音频码率控制模式有三种:
 1.CQ  表示完全不控制码率,尽最大可能保证图像质量;
 2.CBR 表示编码器会尽量把输出码率控制为设定值,即我们前面提到的“不为所动”;
 3.VBR 表示编码器会根据图像内容的复杂度(实际上是帧间变化量的大小)来动态调整输出码率,图像复杂则码率高,图像简单则码率低;

Android 流控策略选择:
 1.质量要求高、不在乎带宽、解码器支持码率剧烈波动的情况下,可以选择 CQ 码率控制策略。
 2.VBR 输出码率会在一定范围内波动,对于小幅晃动,方块效应会有所改善,但对剧烈晃动仍无能为力;连续调低码率则会导致码率急剧下降,如果无法接受这个问题,那 VBR 就不是好的选择。
 3.CBR 的优点是稳定可控,这样对实时性的保证有帮助。所以 WebRTC 开发中一般使用的是CBR。

-- MediaCodec编码解码音频AAC
H264,AAC解码Demo下载地址:http://download.csdn.net/detail/a512337862/9882200 。附带aac以及H264文件以及源码
Android MediaCodec 音频转码-硬编硬解- https://blog.csdn.net/qq_28251907/article/details/78565227
Android多媒体之 wav和amr的互转- https://blog.csdn.net/honeybaby201314/article/details/50379040
使用的aac的采样率一般是44100Hz,但是amr的采样率一般设置为8000Hz,所以将aac转为amr时需要downSample,将采样率从44100 变为8000,upsampling/downsampling- https://github.com/hutm/JSSRC
wav2amr-  https://github.com/kevinho/opencore-amr-android

-- 音频(一) - 音频基础知识- https://blog.csdn.net/kevindgk/article/details/52924779
 MediaCodec可以处理的数据有以下三种类型:压缩数据、原始音频数据、原始视频数据.

-- 音视频的编码方式分为两种:
  硬编码:用设备GPU去实现编解码,这样可以减轻CPU的压力。
  软编码:让CPU来进行编解码,在c层代码来进行编解码,因为c/c++有很多好的编解码库。 

延时敏感、卡顿敏感、噪声抑制(Denoise)、回声消除(AEC)、静音检测(VAD)、混音算法等.
  根据编码方式的不同,音频编码技术分为三种:波形编码、参数编码和混合编码。一般来说,波形编码的话音质量高,但编码速率也很高;参数编码的编码速率很低,产生的合成语音的音质不高;混合编码使用参数编码技术和波形编码技术,编码速率和音质介于它们之间。
  脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
  在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

-- 码率 = 采样频率 * 量化位数 * 声道个数
 音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小。
 假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,单通道,则一帧音频数据的大小为:
 int size = 8000 x 16bit x 0.02s x 1 = 2560 bit = 320 byte = 160 short

-- 常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为WAV文件了,它是一种由微软和IBM联合开发的用于音频数字存储的标准,可以很容易地被解析和播放。
  常见的音频压缩格式自然就是MP3了,另外还有AAC,OGG,WMA等。音频压缩原理:
  频谱掩蔽效应: 人耳所能察觉的声音信号的频率范围为20Hz~20KHz,在这个频率范围以   外的音频信号属于冗余信号。
  时域掩蔽效应: 当强音信号和弱音信号同时出现时,弱信号会听不到,因此,弱音信号也属于冗余信号。

> Ringtone,SoundPool,MediaPlayer之音频播放
android中常见声音操作方式(Ringtone,SoundPool,MediaPlayer)小结- http://blog.csdn.net/tuzhao/article/details/50381748
Android 游戏开发之MediaPlayer、SoundPool以及AudioManager- http://www.2cto.com/kf/201212/174740.html
Android中SoundPool和MediaPlayer的区别- http://blog.csdn.net/u014552288/article/details/38761253

-- MediaPlayer和SoundPool,AudioTrack
 音频的播放还可以分为两种,一种为游戏音乐,另一种为游戏音效。MediaPlayer适用于较长的音乐,如游戏背景音乐。SoundPool适用于比较短的游戏音乐,如开枪,打怪 时“砰砰”一瞬间播放的游戏音效。
  MediaPlayer 在Apk Music中得到广泛使用,所以通过Android源码中的App-Music可以很好的学习和掌握MediaPlayer类。SoundPool在Android源码中也有使用,比如锁屏,锁屏播放锁屏和解锁音频就是用的SoundPool。
  音频播放:SoundPool,MediaPlayer,AudioTrack 。MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在
线的流式资源; SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放
多个音频; 而 AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体和VoIP语音电
话等场景。
 1.MediaPlayer 更加适合在后台长时间且对时间要求不高,播放本地音乐文件或者在线的流式资源;
 2.SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频;
 3.AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体和VoIP语音电话等场景。

-- MediaPlayer和AudioTrack
  MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。而AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。当然两者之间还是有紧密的联系,MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放,所以是MediaPlayer包含了AudioTrack。

-- AudioTrack有两种数据加载模式:
  MODE_STREAM,在这种模式下,应用程序持续地write音频数据流到AudioTrack中,并且write动作将阻塞直到数据流从Java层传输到native层,同时加入到播放队列中。这种模式适用于播放大音频数据,但该模式也造成了一定的延时;
  MODE_STATIC,在播放之前,先把所有数据一次性write到AudioTrack的内部缓冲区中。适用于播放内存占用小、延时要求较高的音频数据。

  我们根据不同的播放场景,使用不同的输出标识,如按键音、游戏背景音对输出时延要求很高,那么就需要置 AUDIO_OUTPUT_FLAG_FAST,具体可以参考 ToneGenerator、SoundPool 和 OpenSL ES。环形 FIFO 管理是 Android 音频系统的精髓。
  AudioPolicyService 与 AudioFlinger 是 Android 音频系统的两大基本服务。前者是音频系统策略的制定者,负责音频设备切换的策略抉择、音量调节策略等;后者是音频系统策略的执行者,负责音频流设备的管理及音频流数据的处理传输,所以 AudioFlinger 也被认为是 Android 音频系统的引擎。

-- MediaPlayer和AudioTrack播放Audio的区别与联系:
  播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。
其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。
  而AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。
  当然两者之间还是有紧密的联系的,MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放。
所以是MediaPlayer包含了AudioTRack。
 (OGG Vobis是一种音频压缩格式,与MP3等的音乐格式类似,它具有完全免费、开放和没有专利限制的特点。)

> 基于SIP的VoIP (有信电话 微信语音 新浪也有用?)
 -- 音频,android2.3 sip支持voip,sipdroid.?
开源的sip服务器有:asterisk,sipxecs,freeSwitch,opensips;
android客户端支持sip有:sipdroid,fring,nimbuzz,linephone,3cxphone.

  VoIP(Voice over Internet Protocol)即首先数字化语音信号并压缩成帧,再转换为IP数据包在网络上传输,以此完成语音通话的业务,是一种利用IP协议传输语音数据的、新兴的通信技术。
  SIP协议栈直接关系到整个系统的质量与效率,将采用纯C语言开发的PJSIP库。该库采用C语言开发,且源码开放,在兼容性与效率上有明显优势,不仅体积小(完整的SIP封装也不过150 KB),同时还实现了一个内存池,使得安全系数与运行效率大为提高,该系统所采用的就是优化后的PJSIP库。
 1、VOIP基于SIP协议,SDK2.3包含一个SIP协议栈和框架API
 2、VOIP位于android.net.sip包中,最重要的为SipManager类,可开发基于SIP的VOIP应用。使用时要包含android.permission.INTERNET和android.permission.USE_SIP权限
 3、如果在market中显示仅支持VOIP API幸好的手机的话,发布时需要在androidManifest.xml中加入<uses_feature android:name = "android.software.sip" android:required = "true">和<uses_feature android:name = "android.software.sip.voip">
 4、要支持SIP API
     (1)仅Android2.3或更高版本平台支持
     (2)不是所有设备都提供SIP支持,确保你的APP只安装在支持SIP的装置上
 5、根据GOOGLE官方DEMO项目来扩展的概念

  Android VoIP网络电话应用“飞鸽电话PigeonCall”,只工作于局域网,支持给任意局域网内使用该App的其他用户拨打网络电话;音频播放器,录音机,语音电话,音视频监控应用,音视频直播应用,音频编辑/处理软件,蓝牙耳机/音箱,等等;音频应用的难点在哪?延时敏感、卡顿敏感、噪声抑制(Denoise)、回声消除(AEC)、静音检测(VAD)、混音算法,等
  常见的音频压缩格式:MP3,AAC,OGG,WMA,Opus,FLAC,APE,m4a,AMR,等等;Android VoIP相关的开源应用有哪些 ?imsdroid,sipdroid,csipsimple,linphone,WebRTC 等等;音频算法处理的开源库有哪些 ?speex、ffmpeg,webrtc audio module(NS、VAD、AECM、AGC),等等
 Victor Lazzarini,封装了一套 OpenSL ES 的 API。
 ORTP可以在其官方网站上(http://www.linphone.org/index.php/eng/code_review/ortp)
 RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

  嵌入式系统的电源模块的设计思路,一般是首先了解整个系统的各个模块的电压需求,比如I/O模块一般需要3.3V供电,USB模块一般需要5V供电,一些MCU主芯片往往需要1.2V或者1.8V供电等等,然后选择合适的板子入口供电电压(下面第一部分主要就是讨论这个板子入口供电电压),然后再选择相关的稳压芯片进行电压转换以及稳压(下面第二部分讲述的就是怎么样选择稳压电路),得到板子各个模块的电压供给。

  视频监控、视频会议、语音电话(VOIP),都离不开RTP协议的应用。RTP协议是一种基于UDP的传输协议,RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。专门为传输音视频而诞生的网络协议更加合适。
  模拟信号采集BT.656标准。
  一个视频序列是由N个帧组成的,采集图像的时候一般有2种扫描方式,一种是逐行扫描(progressive scanning),一种是隔行扫描(interlaced scanning)。对于隔行扫描,每一帧一般有2个场(field),一个叫顶场(top field),一个叫底场(bottom field)。假设一帧图像是720行,那么,顶场就包含其中所有的偶数行,而底场则包含其中所有的奇数行。
  一个场是由三个部分组成的:场 = 垂直消隐顶场(First Vertical Blanking) + 有效数据行(Active Video) + 垂直消隐底场(Second Vertical Blanking);
  一行是由4个部分组成:行 = 结束码(EAV) + 水平消隐(Horizontal Vertical Blanking) + 起始码(SAV) + 有效数据(Active Video);

> 语音处理三方开源(Speex,iLBC,Silk,Lame等):
  1.Speex在Android上的实现。Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外,相对于其它编解码,Speex也很适合网络应用,在网络应用上有着自己独特的优势。同时,Speex还是GNU工程的一部分,在改版的BSD协议中得到了很好的支持。Speex是基于CELP并且专门为码率在2-44kbps的语音压缩而设计的。Speex源码是基于c语音实现的(也有Java实现,效率相对较低)。
  2.iLBC算法也是开源算法,在GitHub可以下载到,源地址如下https://github.com/bjdodson/iLBC-Android ,同时code.google(http://code.google.com/p/android-ilbc/)上也有一份,code.google.上的比较清晰.iLBC 算法为数据包网络实现了尖端的固定比特率编码,在质量与比特率之间取得了非常出色的平衡。
  3.Silk编解码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器。Skype已将其开源,可以访问http://developer.skype.com/silk获取最新动向。SILK Codec是一个语音和音频编解码算法, 对于音频带宽、网络带宽和算法复杂度都具有很好的弹性。支持4种采样率:8KHz、12KHz、16KHz、24KHz;三种复杂度:低、中、高。编码码率在 6~40kbps(不同采样率具有不同的码率范围)以及还支持VAD、DTX、FEC等模块,感觉还是比较全面。最重要的一点是提供了定点C代码,非常有利于向ARM、DSP移植和优化。
  4.Lame的官方网址:http://lame.sourceforge.net/  https://sourceforge.net/projects/lame/files/lame/
  LAME是目前最好的MP3编码引擎。LAME编码出来的MP3音色纯厚、空间宽广、低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性,配合VBR和ABR参数,音质几乎可以媲美CD音频,但文件体积却非常小。WAV格式本身,就等于PCM码流.
LAME的版本3.99.5-http://download.csdn.net/detail/lee_tianya/8332357
Android录音--AudioRecord、MediaRecorder (音频文件格式处理) http://www.cnblogs.com/MMLoveMeMM/articles/3444718.html
Android NDK开发(六)——使用开源LAME转码mp3-- http://blog.csdn.net/allen315410/article/details/42456661
Android libmp3lame详解-- http://blog.csdn.net/gf771115/article/details/37112533
Android下使用lamemp3库将PCM录音数据压缩为MP3格式-- http://blog.csdn.net/gf771115/article/details/37113143
android录音格式raw转mp3 http://blog.csdn.net/fans1108/article/details/25914703
Android MP3Recorder(lame)-- https://github.com/GavinCT/AndroidMP3Recorder

官网(fdk-aac)opencore-amr- https://sourceforge.net/projects/opencore-amr/files/fdk-aac/
fdk-aac编码的库地址是- https://github.com/Arcen/fdk-aac
fdk-aac编码的库地址是- https://github.com/mstorsjo/fdk-aac
官网lame- https://sourceforge.net/projects/lame/files/lame/

-- Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。--http://www.cnblogs.com/MMLoveMeMM/articles/3444718.html
  a.使用AudioRecord类录音,并实现WAV格式封装。录音20s,输出的音频文件大概为3.5M左右.
  b.使用MediaRecorder类录音,输出amr格式文件。录音20s,输出的音频文件大概为33K
1.WAV格式:录音质量高,但是压缩率小,文件大
2.AAC格式:相对于mp3,AAC格式的音质更佳,文件更小;有损压缩;一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放
3.AMR格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音
即时通讯。acc跟ios可以互通:AudioRecord 获取 sample 然后用 ffmpeg 转成 AAC;录制成amr,使用第三方的东西,例如ffmpeg、speex自己转换为aac

-- 关于ios 和 android 录音(语音)对聊文件格式问题-- http://blog.163.com/zhuowh2006@126/blog/static/1018237242013629104918230/
  在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换.最终最合适的解决办法就是  android  使用amr ios使用 libOpenCore第三方库进行转换。
 

> 音频回声消除
Speex回声消除原理深度解析- https://blog.csdn.net/leixiaohua1020/article/details/51187668
房间声学原理与Schroeder混响算法实现- https://blog.csdn.net/leixiaohua1020/article/details/50789619
一个频域语音降噪算法实现及改进方法- https://blog.csdn.net/leixiaohua1020/article/details/50789503
Speex回声消除代码分析- https://blog.csdn.net/leixiaohua1020/article/details/50159563
谱减法语音降噪原理- https://blog.csdn.net/leixiaohua1020/article/details/47276353

Android 音视频去回声、降噪- https://blog.csdn.net/wl532882877/article/details/78296662?locationNum=5&fps=1
android 视频电话,例子下载地址- http://download.csdn.net/detail/liuhongxiangm/8385397
android 利用speex 音频降噪,回声消除- https://download.csdn.net/download/qq_27688259/10138094?web=web
Android手机直播(三)声音采集- https://www.jianshu.com/p/2cb75a71009f/
(声音采集)来疯直播安卓控件,支持flv,支持rtmp,支持添加视频特效等- https://github.com/LaiFeng-Android/SopCastComponent
  手机降噪技术的发展。在现在的手机我们常常看到不仅仅只有一个麦克风,而是有2个甚至是3个,而这多出来的几个就是手机降噪的关键。
  Android中利用AudioRecord可以录制声音,录制出来的声音可以设置为PCM声音。想要将声音用计算机语言表述,则必须将声音进行数字化。将声音数字化,最常见的方式是通过脉冲编码调制PCM(Pulse Code Modulation) 。声音经过麦克风,转换成一连串电压变化的信号。要将这样的电压变化的信号转化成为PCM信号则需要进行三个过程:抽样、量化、编码。要实现这三个过程,则需要使用三个参数,它们是:采样频率、采样位数 和 声道数。

-- 回音消除技术。丢包补偿技术:
  丢包补偿技术可以分为两类:基于发送端补偿和基于接受端补偿。基于发送端补偿包括前向差错纠正、交织和重传技术;基于接受端补偿包括了多种错误隐蔽算法。
  基于发送端补偿可以分为两类:主动重传(本文不讨论)和被动通道编码。被动通道编码包含传统的前向差错纠正技术(FEC)和基于交织的技术。按照和媒体内容的关系,前向差错纠正包括与媒体无关的方法和利用音频属性的媒体相关方法。

-- AudioRecord类和AudioTrack类来进行语音采集和播放
-- 回音消除方式大概有两种 :
 1.通过安卓自带的 VOICE_COMMUNICATION模式进行录音,自动消除回音。
 2.使用第三方库进行消除(webRtc、Speex..),消除回音。
 3.还有一种就是在录音的时候强制关闭扬声器,在录音的时候就只录到手机的声音隔断了扬声器的声音,不过效果不是很明显,还是会有滋滋的噪声。
 4、利用Android自身带的AcousticEchoCanceler进行回声消除处理;
  G711格式的音频流,所以就必须要先转pcm格式然后再转speex格式,最后转711格式的。

-- Android蓝牙开发中电话音频(HSP,HFP)和媒体音频(A2DP,AVRCP)- https://www.jianshu.com/p/94f8e3119981
 1.HSP(手机规格)– 提供手机(移动电话)与耳机之间通信所需的基本功能。
 2.HFP(免提规格)– 在 HSP 的基础上增加了某些扩展功能,原来只用于从固定车载免提装置来控制移动电话。
 3.A2DP(高级音频传送规格)– 允许传输立体声音频信号。 (相比用于 HSP 和 HFP 的单声道加密,质量要好得多)。
 4.AVRCP(音频/视频遥控规格)–用于从控制器(如立体声耳机)向目标设备(如装有 Media Player 的电脑)发送命令(如前跳、暂停和播放)。

-- 如何显示原始的YUV码流,根据我的经验,一般有三种方法:
(1) 利用 matlab ,写相关的程序进行显示。(本文我将提供相关显示程序)
(2) 使用 MFC + Direct Draw 来实现。(稍后整理好了再提供出来)
(3) 使用 第三方工具(YUVviewerPlus.exe),很好的软件。(在附件中提供)

> 录制音频,语音播放

android语音播放工具(播放的同时异步存储)- http://blog.csdn.net/omrapollo/article/details/78085730
用于音频播放AudioTools- https://github.com/Maxi-Mao/AudioTools
通过Android录音进行简单音频分析- https://www.cnblogs.com/tt2015-sz/p/5616534.html
Android音视频之MediaRecorder音视频录制- https://www.cnblogs.com/whoislcj/p/5583833.html
Android音频开发之AudioRecord录音实现- https://www.cnblogs.com/whoislcj/p/5477216.html
安卓录制音频:使用MediaRecord实现- http://blog.csdn.net/vainfanfan/article/details/70146708
实现Android局域网内的语音对讲- https://github.com/yhthu/intercom
录制音频demo-http://m.blog.csdn.net/article/details?id=51074218 , http://download.csdn.net/detail/u012808234/9482926
android语音录制与播放-http://blog.csdn.net/xu_fu/article/details/12648845

Sipdroid是android平台上一款开源的网络电话(又称VoIP)软件,Sipdroid支持几乎所有的sip账号
Sipdroid项目在Google托管的网址为:http://code.google.com/p/sipdroid/

  Android录音有MediaRecorder和AudioRecord两种方式。MediaRecorder,可以直接生成录音文件,但是录音格式为aac和amr等等,都经过压缩处理,不方便进行音频分析。考虑到项目中做的是实时语音只能选择AudioRecord进行录音。而用AudioRecord可以得到PCM编码的原音频数据,可以用FFT对数据进行处理,简单分析声音的频率。
   MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语音;AudioRecorder只能录制语音。二者录制的区别在于,MediaRecorder固定了语音的编码格式,具体平台支持类型可以在http://developer.android.com/guide/appendix/media-formats.html这里查看,而且使用时指定输出文件,在录制的同时系统将语音数据写入文件。AudioRecorder输出的是pcm,即原始音频数据,使用者需要自己读取这些数据,这样的好处是可以根据需要边录制边对音频数据处理,读取的同时也可以保存到文件进行存储.
 AudioRecorder和AudioTracker是Android中获取实时音频数据的接口。在网络电话、语音对讲等场景中,由于实时性的要求,不能采用文件传输,因此,MediaRecorder和MediaPlayer就无法使用,不能实时采集并发送出去。
 在Android平台,44100Hz是唯一目前所有设备都保证支持的采样频率。但比如22050、16000、11025也在大多数设备上得到支持。8000是针对某些低质量的音频通信使用的。
  AudioRecord和AudioTrack类是Android获取和播放音频流的重要类,放置在android.media包中。与该包中的MediaRecorder和MediaPlayer类不同,AudioRecord和AudioTrack类在获取和播放音频数据流时无需通过文件保 存和文件读取,可以动态地直接获取和播放音频流,在实时处理音频数据流时非常有用.
  当然,如果用户只想录音后写入文件或从文件中取得音频流进行播放,那么直接使用MediaRecorder和MediaPlayer类是首选方案,因为这 两个类使用非常方便,而且成功率很高。而AudioRecord和AudioTrack类的使用却比较复杂,我们发现很多人都不能成功地使用这两个类,甚至认为Android的这两个类是不能工作的。
  MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。但是该类只能对完整的音频文件进行操作,而不能直接对纯PCM音频数据操作。假如我们通过解码得到PCM数据源,又当如何将它们播放?没错,就是用AudioTrack这个类(MediaPlayer内部也是调用该类进行真正的播放音频流操作).

-- 现在的主流LTE语音解决方案包括三种:双待机、CSFB、VoLTE三种
 1.CSFallBack(CSFB): 
  是LTE终端通过电路域使用语音业务的一种方案,终端平时驻留在LTE网络,使用LTE数据业务,当发起语音呼叫或者接收到语音呼叫的时候,终端回落到2G/3G电路域进行语音呼叫,结束后再返回LTE。 
 2.双待机: 
  具备双待机能力的LTE终端可以同时再LTE和2G/3G电路域工作,即同时在LTE网络上使用数据业务, 在2G/3G电路域上使用语音业务,实现数据业务的并发,无需回落。 
 3.VoLTE: 
  是架构在LTE网络上全IP条件下的端到端语音方案。VoLTE的语音作为IP数据传输,无需2G/3G网,全部业务承载于LTE网络上,可实现数据与语音业务在同一网络下的统一。相对于现有技术的2G/3G网络,通过引入高清编解码等技术,VoLTE可拥有比2G/3G语音,以及时下流行的OTT语音业务更好的用户体验。同时,当终端离开LTE的覆盖区,VoLTE能够将LTE上的语音呼叫切换到2G/3G网络山,保证语音呼叫的连续性。
 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: linphone 28181是一种开源的SIP(会话初始化协议)软电话应用程序。它支持语音通话、视频通话、即时消息传递和文件传输等功能。 linphone 28181的主要特点之一是它的开源性,这意味着任何人都可以自由地访问和修改其源代码。这种开放性使得linphone 28181具有了很强的可定制性和灵活性,可以根据个人的需求进行修改和定制。 linphone 28181使用SIP协议进行语音和视频通信,这是一种常用的互联网传输协议。它使得用户可以通过互联网进行语音和视频通话,无论他们身处何地。 linphone 28181还支持即时消息传递功能,这意味着用户可以通过应用程序进行实时的文本消息交流。这对于需要进行快速沟通的用户来说非常方便。 此外,linphone 28181还支持文件传输功能,用户可以通过应用程序传输文件,这对于需要共享文件的用户来说非常有用。 总之,linphone 28181是一款功能强大的开源SIP软电话应用程序,支持语音通话、视频通话、即时消息传递和文件传输等功能,具有很强的可定制性和灵活性。它可以使用户能够通过互联网进行语音和视频通信,并方便用户进行快速的消息交流和文件共享。 ### 回答2: Linphone 28181 是一种基于SIP协议的开源VoIP软件,用于实现语音通信功能。它可以在多个平台上运行,包括Windows、Mac OS、Linux、Android和iOS。Linphone 28181的主要功能包括:呼叫、接听和拒接通话、语音通话、实时文本传输和文件传输等。 Linphone 28181广泛应用于企业通信领域,尤其在IP电话系统中扮演重要角色。它可以与其他标准符合SIP协议的软件和硬件设备进行通信,实现企业内部和企业间的语音通信。此外,Linphone 28181还支持视频通话功能,使得用户可以通过视频电话与其他用户进行面对面的交流。 Linphone 28181还具有一些扩展功能,如来电显示、呼叫等待、会议通话和呼叫转移等。这些功能为用户提供了更为便捷和高效的通信方式。 总之,Linphone 28181是一款功能丰富、灵活性强的VoIP软件,它改变了传统的语音通信方式,使得用户可以通过互联网进行便捷、高质量的语音和视频通话。在今天信息化的背景下,Linphone 28181在企业通信中发挥了重要作用,为企业提供了高效、低成本的通信解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值