package com.lesliefang.webrtcdemo;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import org.webrtc.AudioSource;
import org.webrtc.Camera2Enumerator;
import org.webrtc.EglBase;
import org.webrtc.MediaConstraints;
import org.webrtc.PeerConnectionFactory;
import org.webrtc.RendererCommon;
import org.webrtc.SurfaceTextureHelper;
import org.webrtc.SurfaceViewRenderer;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoSource;
import org.webrtc.VideoTrack;
public class UseCameraActivity extends AppCompatActivity {
SurfaceViewRenderer surfaceViewRenderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceViewRenderer = findViewById(R.id.surfaceviewrender);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 101);
}
// create PeerConnectionFactory
PeerConnectionFactory.InitializationOptions initializationOptions =
PeerConnectionFactory.InitializationOptions.builder(this).createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);
PeerConnectionFactory peerConnectionFactory = PeerConnectionFactory.builder().createPeerConnectionFactory();
VideoCapturer videoCapturer = null;
Camera2Enumerator camera2Enumerator = new Camera2Enumerator(this);
String[] deviceNames = camera2Enumerator.getDeviceNames();
for (String deviceName : deviceNames) {
if (camera2Enumerator.isFrontFacing(deviceName)) {
videoCapturer = camera2Enumerator.createCapturer(deviceName, null);
}
}
if (videoCapturer == null) {
return;
}
EglBase.Context eglBaseContext = EglBase.create().getEglBaseContext();
surfaceViewRenderer.init(eglBaseContext, null);
surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
AudioSource audioSource = peerConnectionFactory.createAudioSource(new MediaConstraints());
peerConnectionFactory.createAudioTrack("101", audioSource);
SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", eglBaseContext);
VideoSource videoSource = peerConnectionFactory.createVideoSource(videoCapturer.isScreencast());
videoCapturer.initialize(surfaceTextureHelper, this, videoSource.getCapturerObserver());
videoCapturer.startCapture(1280, 720, 30);
VideoTrack videoTrack = peerConnectionFactory.createVideoTrack("102", videoSource);
videoTrack.addSink(surfaceViewRenderer);
}
}
网友评论