《android,视频通话,解决方案》由会员分享,可在线阅读,更多相关《android,视频通话,解决方案(20页珍藏版)》请在金锄头文库上搜索。
1、android,android,视频通话视频通话, ,解决方案解决方案篇一:Android 平台的 JAVA 视频通话代码如何用 java 代码实现 Android 的视频通话 最近学习 Android 平台下跨平台音视频通信开发,虽然网上有很多开源项目供我们参考学习,但音视频效果很一般,还有很多不稳定的因素,毕竟是开源嘛。在国内我找到了一个比较好音视频通信解决方案(百度下载官方网站/ Anychat for Android 的 demo ) ,该案例提供了纯 Java 语言接口供我们调用,随后我参照官方 android demo 程序和开发文档并结合自己的见解写了一个 android音频通信
2、软件,200 行以内代码就搞定了(难以相信吧) 。其实我只是调用其相关 API 即可实现。以下是我自己写的Java 代码,以备大家互相学习: 1. /* 2. * Android 视频聊天 3. * 1、初始化 SDK 2、连接服务器、 3、用户登录;4、进入房间;5、打开本地视频;6、请求对方视频 4. */ 5. public class VideoChatActivity extends Activity implements AnyChatBaseEvent 6. 7. private AnyChatCoreSDK anychat;/ 核心 SDK 8. private Surface
3、View remoteSurfaceView; / 对方视频 9. private SurfaceView localSurfaceView;/ 本地视频 10. private ConfigEntity configEntity; 11. private boolean bSelfVideoOpened = false;/ 本地视频是否已打开 12. private boolean bOtherVideoOpened = false; / 对方视频是否已打开 13. private TimerTask mTimerTask;/ 定时器 14. private Timer mTimer = n
4、ew Timer(true); 15. private Handler handler; / 用 Handler 来不间断刷新即时视频 16. private List userlist = new ArrayList();/保存在线用户列表 17. private int userid; / 用户 ID 18. Override 19. public void onCreate(Bundle savedInstanceState) 20. (savedInstanceState); (_video_chat); = (SurfaceView) findViewById(_remote); =
5、 (SurfaceView) findViewById(_local); = (this);/加载视频通话设置 ();/ 初始化 SDK 连接服务器 = new TimerTask() 28. public void run() 29. Message mesasge = new Message();30. (mesasge); 31. 32.; (mTimerTask, 1000, 100); = new Handler() 35. Override 36. public void handleMessage(Message msg) 37. VideoChat();/ 不间断显示即时视频通
6、话画面 38. (msg); 39. 40.; 41. 42. / 初始化 SDK 连接服务器 43. private void loginSystem() (anychat = null) 45. anychat = new AnyChatCoreSDK(); 46. (this);/ 设置基本事件回调函数 47. if ( != 0) / 使用 ARMv6 指令集 48. (AnyChatDefine. 49. BRAC_SO_CORESDK_USEARMV6LIB, 1); 50. (_INT, 0); / 初始化 SDK 51. (“, 8906);/ 连接服务器 53. 54. /
7、显示即时视频通话画面 55. public void VideoChat() (!bOtherVideoOpened) 57. if (userid) = 2 58. 60. (_565); 61. (userid), 62. (userid); 63. Surface s = ();/ 获得视频画面 64. (userid, s, 0, 0, 0, 0); / 调用 API 显示视频画面 65. bOtherVideoOpened = true; 66. 67. (!bSelfVideoOpened) 69. if (-1) = 2 70. 72. (_565); 73. (-1),74.
8、(-1); 75. Surface s = (); 76. (-1, s, 0, 0, 0, 0); 77. bSelfVideoOpened = true; 78. 79. 80. 81. public void OnAnyChatConnectMessage(boolean bSuccess) (!bSuccess) 83. (, “连接服务器失败,自动重连,请稍 后.“, _SHORT).show(); 84. (“android“, “);/ 服务器连接成功 用户登录 86. 87. public void OnAnyChatLoginMessage(int dwUserId, int
9、 dwErrorCode) (dwErrorCode = 0) 89. (this, “登录成功!“, _SHORT).show(); 90. (1, “);/ 用户登录成功 进入房间 91. ApplyVideoConfig(); 92. else 93. (this, “登录失败,错误代码: “ + dwErrorCode, _SHORT).show(); 94. 95. 96. public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) (dwErrorCode = 0) / 进入房间成功 打开本地音视频 98
10、. (this, “进入房间成功“, _SHORT).show(); 99. (-1, 1); / 打开本地视频 100. (-1, 1); / 打开本地音频 101. else 102. (this, “进入房间失败,错误代码: “ + dwErrorCode, _SHORT).show(); 103. 104. 105. public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId) (dwRoomId = 1) 107. int user = (); 108. if ( != 0) 109. for (int i =
11、 0; i (useri+“); 111. 112. String temp =(0); 113. userid = (temp); 114. (userid, 1);/ 请求用户视频115. (userid, 1); / 请求用户音频 116. 117. else 118. (, “当前没有在线用户 “, _SHORT).show(); 119. 120. 121. 122. public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) (bEnter) /新用户进入房间 124. (dwUserId+“); 125
12、. /用户离开房间 127. if (dwUserId = userid) 128. 129. (, “视频用户已下线 “, _SHORT).show(); 130. (userid, 0);/ 关闭用户视频 131. (userid, 0); / 关闭用户音频 132. (userid+“); /移除该用户 133. if () != 0) 134. temp =(0); = (temp); (userid, 1);/ 请求其他用户视频 (userid, 1); / 请求其他用户音频 139. 140. 141. else 142. (dwUserId+“); /移除该用户 143. 144
13、. 145. 146. public void OnAnyChatLinkCloseMessage(int dwErrorCode) (, “连接关闭,error: “ + dwErrorCode, _SHORT).show(); 148. 149. Override 150. protected void onDestroy() /程序退出 (-1); /离开房间 (); /注销登录 ();/释放资源 (); ();156. 157. / 根据配置文件配置视频参数 158. private void ApplyVideoConfig() ( = 1) / 自定义视频参数配置 160. 161
14、. / 设置本地视频编码的码率(如果码率为 0,则表示使用质量优先模式) 162. (_SO_LOCALVIDEO_BITRATECTRL,configEn ); 163. if ( = 0) 164. 165. / 设置本地视频编码的质量 166. (_SO_LOCALVIDEO_QUALITYCTRL,conf ); 167. 168. / 设置本地视频编码的帧率 169. (_SO_LOCALVIDEO_FPSCTRL,configEntity .videoFps); 170. / 设置本地视频编码的关键帧间隔 171. (_SO_LOCALVIDEO_GOPCTRL,configEnt
15、ity .videoFps * 4); 172. / 设置本地视频采集分辨率 173. (_SO_LOCALVIDEO_WIDTHCTRL,configEnti _width); 174. (_SO_LOCALVIDEO_HEIGHTCTRL,configEnt _height); 175. / 设置视频编码预设参数(值越大,编码质量越高,占用 CPU 资源也会越高) 176. (_SO_LOCALVIDEO_PRESETCTRL,configEnt ); 177. 178./ 让视频参数生效 (_SO_LOCALVIDEO_APPLYPARAM,configEntity. configMode); 180./ P2P 设置 (_SO_NETWORK_P2PPOLITIC, bleP2P); 182./ 本地视频 Overlay 模式设置 (_SO_LOCALVIDEO_OVERLAY, eoOverlay); 184./ 回音消除设置 (_SO_AUDIO_ECHOCTRL, EC); 186./ 平台硬件编码设置 篇二:即时通讯 手机音视频技术开发方案“SDK 即时通讯平台”是一套跨平台的即时通讯解决方案,基于先进的视频编码标准、AAC 音频编