美文网首页
android WebRTC 使用相机

android WebRTC 使用相机

作者: lesliefang | 来源:发表于2020-10-11 20:48 被阅读0次
    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);
        }
    }
    

    相关文章

      网友评论

          本文标题:android WebRTC 使用相机

          本文链接:https://www.haomeiwen.com/subject/cxqypktx.html