`
little_rui
  • 浏览: 7068 次
社区版块
存档分类
最新评论
阅读更多

Android的音视频处理

音频Audio和视频Video

音视频支持框架

需要设备底层具有音视频相关的硬件设备和驱动支持,为了适应各种音视频设备,抽象了2个层次。

第一层:音频硬件抽象层,向上提供统一的音视频操作接口,屏蔽不同硬件设备的实现细节差异。

在该层之上,增加音频控制层,运行在独立的线程内,用RPC与上层通信,将不同的音轨混合起来,输入到硬件中。

 

音视频中的解码编码、进度控制由专业的AnyChat内核完成  

音视频的录制

一、API接口定义
    AnyChat在客户端提供的录制API接口与回调事件为:

  1. // 用户音、视频录制(扩展)
  2. BRAC_API DWORD BRAC_StreamRecordCtrlEx(DWORD dwUserId, BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);
  3. // 录像、快照任务完成扩展回调函数定义
  4. typedef void (CALLBACK * BRAC_RecordSnapShotEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);
复制代码

AnyChat在服务器端提供的录制API接口与回调事件为:

  1. // 中心端录像控制(扩展)
  2. BRAS_API DWORD BRAS_StreamRecordCtrlEx(DWORD dwUserId, BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr=NULL, DWORD dwRecordServerId=-1);
  3. // 服务器录像回调函数定义(扩展)
  4. typedef void (CALLBACK * BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORD dwRecordServerId, LPVOID lpUserValue);
复制代码

二、录制API调用
    API第一个参数表示录制对象,指录制某一个用户的音视频,对于合成录制,只需要通过第三个参数(dwFlags)加入特定的标志即可实现。

    开始录制以及停止录制均调用同一个API接口(如客户端为:BRAC_StreamRecordCtrlEx),通过第二个参数(bStartRecord)来控制,当bStartRecord=TRUE(1)时,表示开始录制,当bStartRecord=FALSE(0)时,表示停止录制。

    当调用API开始录制时,相当于下达了一个录制任务,AnyChat内核将开始录制,可以在客户端调用API(BRAC_QueryUserState)来查询录制状态;通过第三个参数(dwFlags)可控制录制行为:是在客户端录制,还是在服务器录制;是录制音频,还是音视频一同录制;是录制单个用户,还是通话双方合成录制等,具体应用可参考后续的“录制功能示例”部分。

    当调用API停止录制时,AnyChat内核会结束录制任务,同时触发上层应用的回调事件(如客户端为:BRAC_RecordSnapShotEx_CallBack),在回调事件中,将录制文件名(含路径)、录制时长、用户自定义参数等信息返回给上层应用。

    AnyChat内核提供了两个自定义参数,一个是整形(dwParam),一个是字符串类型(lpUserStr),在开始录制时通过API接口传入,在录制完成回调事件中返回给上层应用,如可以通过字符串类型自定义参数来传输一个上层应用的业务流水号,则可以实现在回调事件中将录制的文件名与业务流水号进行关联,保存在数据库中等功能。

三、录制功能示例
下面以JavaScript脚本为例,针对常用的录制功能给出示例代码:

1、客户端对单个用户的音频、视频进行录制,录制为MP4格式

  1. BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);    // 录制为MP4格式
  2. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO;
  3. BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");
复制代码

2、客户端对单个用户的音频进行录制,录制为MP3格式

  1. BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 3);    // 录制为MP3格式
  2. var dwFlags = ANYCHAT_RECORD_FLAGS_AUDIO;
  3. BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");
复制代码

3、客户端对通话双方的音频、视频进行录制,录制为MP4格式,画中画模式:

  1. BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);    // 录制为MP4格式
  2. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_MIXAUDIO;
  3. BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");
复制代码

四、其它
1、客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)来设置录像文件保存路径;2、客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR, bitrate)来设置录制视频的质量,调节录制视频的清晰度;
3、有关录像文件改名:录制完成之后,AnyChat将触发上层应用的录制完成回调事件,在回调事件中返回录制文件名(含路径),上层应用可以在回调事件中调用操作系统提供的文件改名函数(如Windows平台为:MoveFile函数)对文件进行改名操作,AnyChat内核本身没有提供对录制文件名进行修改的接口;

分享到:
评论

相关推荐

    Android 音视频录制

    本篇文章将深入探讨Android音视频录制的核心知识点,并基于提供的"RecordDemo"压缩包文件,来解析如何实现这一功能。 一、Android音视频录制基础 1. MediaRecorder:Android系统提供了MediaRecorder类,用于录制...

    Android音视频开发与处理.pdf

    在Android音视频开发中,了解音视频的基础理论和处理流程至关重要。音视频处理涉及一系列复杂的概念和技术,包括视频帧、帧率、码率、分辨率以及音视频编码等。以下是这些概念的详细解释: 1. **视频基本概念**: ...

    Android 音视频录制程序

    在Android平台上开发音视频录制程序是...通过以上技术,开发者可以构建一个基本的Android音视频录制程序。然而,实际应用可能需要更多功能,如滤镜、剪辑、特效等,这需要进一步深入学习Android多媒体处理的高级特性。

    Android音视频开发学习思路.pdf

    ### Android音视频开发学习思路详解 #### 一、引言 随着移动互联网的发展,音视频技术在Android平台上的应用越来越广泛。无论是视频通话、在线教育还是直播应用,音视频技术都是核心之一。对于想要深入研究Android...

    Android音视频录制与回放

    总的来说,Android音视频录制与回放是一个涉及多方面技术的综合任务,包括音频处理、视频处理、多媒体框架的使用以及性能优化等。通过合理的API选择和第三方库的利用,开发者可以构建出高效、稳定且功能丰富的音视频...

    Android音视频通话例子

    总的来说,实现Android音视频通话涉及众多技术细节,包括音频和视频的采集、编码、网络通信、安全传输、用户界面设计、音视频同步以及性能优化。开发者需要对Android平台有深入理解,并具备扎实的多媒体处理和网络...

    android音视频.zip

    项目是进行android音视频进阶的整个流程学习流程代码,其中包括1.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View 2.在 Android 平台使用 AudioRecord 和 AudioTrack ...

    深入探索Android音视频编解码技术

    提供了全面的Android音视频编解码技术指南。内容涵盖了Android音频视频的基本概念、支持的格式、内建音频播放器的使用,以及多媒体系统的结构和层次。深入探讨了OpenCore的核心概念、代码结构,以及文件格式处理和编...

    Android多媒体平台下基于FFMPEG的音视频处理方案

    提出的音视频处理方案着重研究FFMPEG技术,并通过JNI技术将其应用到Android系统中,以实现一个通用且完善的音视频处理方案。这个方案能够支持基本的音视频录制、播放以及过程中必要的控制功能,例如暂停、继续、...

    android 音视频采集

    在Android平台上,音视频采集是一项核心功能,广泛应用于各种应用程序,如社交软件、视频通话工具、录像应用等。本文将详细讲解如何使用Android的MediaRecorder类进行音视频的采集和录制。 MediaRecorder是Android ...

    android语音视频通话源码.rar

    1. **Android系统服务**:实现语音和视频通话可能需要使用到Android的音频、视频录制、网络以及多媒体服务。 2. **网络通信**:项目可能使用TCP/IP或者WebSocket等网络协议进行数据传输,确保通话的稳定性和实时性...

    android短视频录制编辑

    3. **滤镜应用**:视频录制过程中可以添加滤镜效果,这涉及到图像处理技术。通常会使用OpenGL ES或 Vulkan 进行实时的图像渲染,将预定义的滤镜效果应用到每一帧图像上。 4. **涂鸦功能**:用户可以在视频上添加...

    Android视频处理之动态时间水印效果

    在Android平台上,动态时间水印效果的实现主要涉及到视频处理技术,尤其是利用Android的MediaCodec API来添加水印。MediaCodec是一个低级别的接口,用于硬件加速的编码和解码,对于处理音视频数据非常有效。在本文中...

    android 视频录制 并保存到本地

    在Android平台上,视频录制并保存到本地是一项常见的功能,尤其对于开发移动应用的开发者来说,了解这个过程至关重要。本文将详细讲解如何实现Android视频录制,并将录制的视频保存到设备的本地存储,尤其是SD卡上。...

    Android音视频的编解码.zip

    【Android 音频视频简介】 1.1 音频播放 1.2 所支持的音频格式 1.3 通过 Intent 使用内建的音频播放器 1.4 Android 音频实例分析 1.5 Android 支持的视频格式 1.6 Android 支持的编码方式 【Android 音频视频开发】 ...

    Android 短视频录制demo

    首先,Android短视频录制涉及到的主要技术包括音视频采集、编码、合成以及文件保存。在Android系统中,这些任务主要由MediaRecorder和Camera API来完成。 1. **MediaRecorder**: MediaRecorder是Android系统提供的...

    android 摄像头、视频录制demo (竖屏)

    为了防止频繁重建活动,可以将`android:configChanges="orientation|screenSize"`添加到AndroidManifest.xml中的活动声明,然后在活动中重写`onConfigurationChanged()`,在这里处理相机和视频录制的旋转逻辑。...

    android 音视频编解码学习资料

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ...综上所述,这份资料覆盖了Android音视频开发的多个方面,不仅涉及理论知识,还有大量实用的实例分析和技术指导,对于初学者来说是一份宝贵的参考资料。

    android小视频录制,可直接用于项目

    本资源"android小视频录制,可直接用于项目"提供了一个简单且稳定的解决方案,适用于各种Android版本,使得开发者可以快速集成到自己的应用中。 一、Android视频录制基础 在Android中,录制视频主要依赖于`...

    android音频录制

    而Android系统的多媒体框架也为开发者提供了MediaRecorder类来实现视频录制功能。在使用MediaRecorder时我们要注意以下几点: 第一:无法使用模拟器进行测试,在使用MediaRecorder进行音视频录制时,需要用真机进行...

Global site tag (gtag.js) - Google Analytics