Red de conocimiento informático - Computadora portátil - ¿Cómo implementar videollamadas en el desarrollo de Android?

¿Cómo implementar videollamadas en el desarrollo de Android?

/**

* Video chat de Android

* 1. Inicializar SDK 2. Conectarse al servidor, 3. Iniciar sesión como usuario 4. Ingresar a la sala; 5. Abra el video local 6. Solicite el video de la otra parte

*/

clase pública VideoChatActivity extiende la actividad implementa AnyChatBaseEvent

{

privado AnyChatCoreSDK anychat ; // Core SDK

SurfaceView privado remotoSurfaceView; // Video de otra parte

SurfaceView privado localSurfaceView // Video local

ConfigEntity privado; configEntity;

private boolean bSelfVideoOpened = false; // Si el video local está abierto

private boolean bOtherVideoOpened = false // Si el video de la otra parte está abierto

private TimerTask mTimerTask; // Temporización

temporizador privado mTimer = new Timer(true);

controlador de controlador privado // Utilice el controlador para actualizar el video en tiempo real continuamente

private Listlt; userlist = new ArrayListlt (); // Guardar la lista de usuarios en línea

private int userid; Anular

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout. actividad_video_chat);

remoteSurfaceView = (SurfaceView) findViewById(R.id.surface_remote);

localSurfaceView = (SurfaceView) findViewById(R.id.surface_local); p>configEntity = ConfigService.LoadConfig(this);//Cargar configuración de videollamada

loginSystem(); //Inicializar el servidor de conexión SDK

mTimerTask = new TimerTask(){

public void run() {

Mensaje mesasge = nuevo mensaje()

handler.sendMessage(mesasge)

}

p>

};

mTemporizador.

Schedule(mTimerTask, 1000, 100);

handler = new Handler(){

@Override

public void handleMessage(Mensaje de mensaje){

VideoChat(); // Muestra la pantalla de videollamada en tiempo real de forma continua

super.handleMessage(msg

}

};

super.handleMessage(msg);

}

}

p>

}

// Inicializar el servidor de conexión SDK

private void loginSystem(){

if (anychat == null){

anychat = new AnyChatCoreSDK();

anychat.SetBaseEvent(this); // Establece la función de devolución de llamada de evento básica

if (configEntity.useARMv6Lib != 0) // Usando el conjunto de instrucciones ARMv6

anychat. SetSDKOptionInt(AnyChatDefine.

BRAC_SO_CORESDK_USEARMV6LIB, 1);

anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0); // Inicializar SDK

}

anychat.Connect("demo.anychat.cn", 8906); // Conectarse al servidor

}

// Muestra el tiempo pantalla de videollamada

public void VideoChat(){

if (!bOtherVideoOpened){

if (anychat. GetCameraState(userid) == 2

amp; anychat.GetUserVideoWidth(userid) != 0){

titular de SurfaceHolder = remoteSurfaceView.getHolder();

holder.setFormat(PixelFormat.RGB_565);

holder.setFixedSize(anychat.GetUserVideoWidth(id de usuario),

anychat.GetUserVideoHeight(id de usuario));

Surface s = holder.getSurface(); / Obtener la pantalla de video

anychat.SetVideoPos(userid, s, 0, 0, 0, 0); // Llama a la API para mostrar la pantalla de video

bOtherVideoOpened = true;

}

if (!bSelfVideoOpened){

if (anychat.GetCameraState(-1) == 2

amp; anychat .GetUserVideoWidth(-1) != 0){

SurfaceHolder hol

der = localSurfaceView.getHolder();

holder.setFormat(PixelFormat.RGB_565

holder.setFixedSize(anychat.GetUserVideoWidth(-1),

anychat.GetUserVideoHeight(-1));

Superficie s = titular.getSurface();

anychat.SetVideoPos(-1, s, 0, 0, 0, 0);

bSelfVideoOpened = true;

}

}

}

public void OnAnyChatConnectMessage(boolean bSuccess){

if (!bSuccess){

Toast.makeText(VideoChatActivity.this, "Error al conectarse al servidor, vuelva a conectarse automáticamente, espere...", Toast.LENGTH_SHORT) . show();

}

anychat.Login("android", ""); // Conexión del servidor inicio de sesión exitoso

}

public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode){

if (dwErrorCode == 0) {

Toast.makeText(this, "¡Inicio de sesión exitoso!", Toast . LENGTH_SHORT).show();

anychat.EnterRoom(1, ""); // El usuario inició sesión correctamente y entró en la sala

ApplyVideoConfig(); >

} else {

Toast.makeText(this, "Error al iniciar sesión, código de error:" dwErrorCode, Toast.LENGTH_SHORT).show()

}

}

public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode){

if (dwErrorCode == 0) { // Ingrese a la sala y abra con éxito el audio local y video

Toast .makeText(this, "Entró a la sala con éxito", Toast.LENGTH_SHORT).show();

anychat.UserCameraControl(-1, 1); video local

anychat .UserSpeakControl(-1, 1); // Activar audio local

} else {

Toast.makeText(this, "Error para ingresar a la sala, código de error:" dwErrorCode, Toast. LENGTH_SHORT).show();

}

}

public void OnAnyChatOnlineUserMessage(

int dwUserNum, int dwRoomId){

if (dwRoomId == 1){

int usuario[] = anychat.GetOnlineUser()

if (usuario) .length != 0){

for (int i = 0; i lt; usuario.length; i ){

userlist.add(user[i] "");

. }

String temp =userlist.get(0);

userid = Integer.parseInt(temp); .UserCameraControl(userid, 1); // Solicitar video del usuario

anychat.UserSpeakControl(userid, 1); // Solicitar audio del usuario

}

else); {

Toast.makeText(VideoChatActivity.this, "Actualmente no hay usuarios en línea", Toast.LENGTH_SHORT).show()

}

}

}

p>

}

public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter){

if (bEnter) {//Nuevo usuario entra a la sala

userlist .add(dwUserId "");

}

else { //El usuario sale de la sala

p>

if (dwUserId == ID de usuario)

{

Toast.makeText(VideoChatActivity.this, "El usuario del video está desconectado", Toast.LENGTH_SHORT).show(

anychat.UserCameraControl(userid, 0); //Desactivar el vídeo del usuario

anychat.UserSpeakControl(userid, 0); //Desactivar el audio del usuario

;

userlist.remove(userid ""); //Eliminar el usuario

p>

if (userlist.size() != 0)

{

String temp =userlist.get(0);

userid = Integer.parseInt(temp);

anychat.UserCameraControl(userid, 1); videos

anychat.UserSpeakControl(userid, 1); // Solicitar videos de otros usuarios Audio

}

}

141. else {

userlist.remove(dwUserId ""); //Eliminar el usuario

}

}

}

public void OnAnyChatLinkCloseMessage(int dwErrorCode){

>

Toast.makeText(VideoChatActivity.this, "Conexión cerrada, error:" dwErrorCode, Toast.LENGTH_SHORT).show()

}

@Override

protected void onDestroy(){ //Salir del programa

anychat.LeaveRoom(-1); //Salir de la sala

anychat.Logout() //Iniciar sesión out

anychat.Release(); //Liberar recursos

mTimer.cancel();

super.onDestroy(); > }

//Configurar los parámetros del vídeo según el archivo de configuración

private void ApplyVideoConfig(){

if (configEntity.configMode == 1) // Personalizar configuración de parámetros de video

{

//Establezca la velocidad de bits de la codificación de video local (si la velocidad de bits es 0, significa usar el modo de prioridad de calidad)

anychat.SetSDKOptionInt (AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL, configEntity.videoBitrate);

if (configEntity.videoBitrate == 0)

{

//Establecer la calidad de codificación de video local

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL, configEntity.videoQuality);

}

//Establecer la velocidad de fotogramas de la codificación de video local

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL, configEntity.videoFps);

//Establecer el intervalo de fotogramas clave para la codificación de vídeo local

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL , configEntity.videoFps * 4 );

//Establecer la resolución de captura de video local

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL, configEntity.solving_width

); anychat.SetSDKOptionInt(AnyChatDefine. BRAC_SO_LOCALVIDEO_HEIGHTCTRL, configEntity.solving_height);

//Establezca los parámetros predeterminados de codificación de video (cuanto mayor sea el valor, mayor será la calidad de la codificación y mayor el uso de recursos de la CPU)

anychat.SetSDKOptionInt (AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL, configEntity.

videoPreset);

}

// Deja que los parámetros del vídeo surtan efecto

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM, configEntity.configMode

);

// Configuración de P2P

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC, configEntity.enableP2P);

// Configuración del modo de superposición de vídeo local

anychat. SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY, configEntity.videoOverlay);

// Configuración de cancelación de eco

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL, configEntity.enableAEC); // Configuración de codificación del hardware de la plataforma

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC, configEntity.useHWCodec);

// Configuración del modo de rotación de video

anychat.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL, configEntity.videorotatemode);

//Configuración del modo de reproducción fluida de vídeo

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_STREAM_SMOOTHPLAYMODE, configEntity.smoothPlayMode

); // Configuración del controlador de captura de video

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER, configEntity.videoCapDriver

//Configuración de corrección de color de captura de video local

anychat); .SetSDKOptionInt (AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA, configEntity.fixcolordeviation);

//Configuración del controlador de visualización de vídeo

anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL, configEntity.videoShowDriver

<); p> }

}