参照官方demo,基于agora开发,输入会议号(频道)和显示名称 参会,可设置参会选项。
支持用户注册和登录。
支持多人参会。
package io.agora.openvcall.ui; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.Switch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.agora.openvcall.R; import io.agora.openvcall.model.ConstantApp; import io.agora.openvcall.ui.mycode.common; public class MainActivity extends BaseActivity { private final static Logger log = LoggerFactory.getLogger(MainActivity.class); private String username; private String password; private String name; private int user_id; private String show_name; private boolean videomute; private boolean audiomute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar ab = getSupportActionBar(); if (ab != null) { ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); ab.setCustomView(R.layout.ard_agora_actionbar); } initP(); } private void initP(){ String show_name = common.getName(); if(!TextUtils.isEmpty(show_name)){ this.name=show_name; this.show_name=show_name; common.setName(show_name); EditText et = findViewById(R.id.user_name); et.setText(show_name); } String _username = common.getUsername(); if(!TextUtils.isEmpty(_username)){ username=_username; } String _password = common.getPassword(); if(!TextUtils.isEmpty(_password)){ password=_password; } user_id = common.getUser_id(); } public void onBackPressed(View view) { onBackPressed(); } @Override protected void initUIandEvent() { EditText v_channel = (EditText) findViewById(R.id.channel_name); v_channel.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } }); String lastChannelName = vSettings().mChannelName; if (!TextUtils.isEmpty(lastChannelName)) { v_channel.setText(lastChannelName); v_channel.setSelection(lastChannelName.length()); } } @Override protected void deInitUIandEvent() { } @Override public boolean onCreateOptionsMenu(final Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_settings: forwardToSettings(); return true; default: return super.onOptionsItemSelected(item); } } public void onClickJoin(View view) { forwardToRoom(); } public void forwardToRoom() { EditText v_channel = (EditText) findViewById(R.id.channel_name); String channel = v_channel.getText().toString(); if(TextUtils.isEmpty(channel)){ showLongToast("请输入会议号!"); return; } vSettings().mChannelName = channel; Intent i = new Intent(MainActivity.this, CallActivity.class); i.putExtra(ConstantApp.ACTION_KEY_CHANNEL_NAME, channel); //i.putExtra(ConstantApp.ACTION_KEY_ENCRYPTION_KEY, encryption); i.putExtra(ConstantApp.ACTION_KEY_ENCRYPTION_MODE, getResources().getStringArray(R.array.encryption_mode_values)[vSettings().mEncryptionModeIndex]); i.putExtra("username",username); i.putExtra("password",password); i.putExtra("name",name); i.putExtra("user_id",user_id); i.putExtra("videomute",videomute); i.putExtra("audiomute",audiomute); EditText show_name_E = (EditText) findViewById(R.id.user_name); String _show_name = show_name_E.getText().toString(); i.putExtra("show_name",_show_name); startActivity(i); finish(); } public void forwardToSettings() { Intent i = new Intent(this, io.agora.openvcall.ui.SettingsActivity.class); startActivity(i); } @Override public void permissionGranted() { } public void onSwitch_audio(View view) { boolean isChecked = ((Switch) view).isChecked(); this.audiomute=!isChecked; } public void onSwitch_video(View view) { boolean isChecked = ((Switch) view).isChecked(); this.videomute=!isChecked; } }
到此这篇关于Android 基于agora 开发视频会议的文章就介绍到这了,更多相关Android开发视频会议内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
我正在使用https://github.com/writingminds/ffmpeg-android-java命令裁剪视频: 其中“in”是inputfile,“out”是outputfile。
视频会议须更新到6.13版本方可使用。会议室参会人数可支持50+同时进行视频会议,目前客户端仅能显示最多6方视频(同时参会人数可100+),但是会议过程中讲话人会到主屏上进行显示。目前轻推上仅支持发起会议,不支持通过输入会议号的形式加入会议,如果需要发起会议,请使用轻推客户端。 操作方法: 1. 手机版: (1)发起会议:右上角通话按钮-视频会议-选择联系人-发起会议 (2)
问题内容: 我正在尝试使用适用于Android的WebRTC本机代码包(即不使用WebView)在Android应用程序中实现三向视频聊天。我已经使用node.js编写了一个信令服务器,并使用了客户端应用程序内的Gottox socket.io java客户端 库来连接到服务器,交换SDP数据包并建立2路视频聊天连接。 但是,现在我遇到了无法进行三通通话的问题。WebRTC本机代码包随附的AppR
南瓜视频的面试主要是两轮技术面+一轮hr面 ,第一轮是技术面八股文;第二轮是技术面八股文+项目 1.讲一下你在公司负责的事情? 2.讲一下 python 测试化工具(简历中的项目经验) 3.你在介绍你自己的项目中,没有说你自己做的事情,就比如你遇到什么问题,怎么解决的? 4.get 请求和 post 请求的区别? 5.对 okhttp 的了解? 调用用户传入的 callBack 时是在前台还是后台
我试图理解MP4视频如何在在线流媒体中通过RTP进行分割(它是用H.264编解码器编码的)。有一些工具,比如FFMPEG或MP4box,或者我们可以使用ISO格式本身[moov,moof和mdat对]进行流媒体传输。我想知道的是,这些工具将如何分割视频中的mdat部分?他们会将MP4视频的所有单元(一组视频和音频帧)分离,并将它们与相关moov部分合并成一个片段,还是以其他方式进行? 还是使用H2
我正在尝试用Agora构建一个视频通话应用程序,我需要在用户呼叫时显示像WhatsApp这样的接受屏幕,如果应用程序退出,我需要在用户呼叫时显示呼叫屏幕,我尝试了很多东西,但都不起作用,我试图做我颤抖,但这方面没有太多信息,请帮助我