此文章为个人学习和应用WebRTC的学习理解,有不对的地方希望大家提出来共同学习和进步,谢谢。
PeerConnectionFactory/PeerConnection:整个WebRTC中最核心的类,有了这个类才能获得音视频相关的其他操作。
PeerConnectionFactory类中包含了各种音视频数据的初始化。
PeerConnectionFactory.initializeAndroidGlobals 中初始化了是否初始化音视频,是否硬件加速,是否支持硬件渲染等内容。
PeerConnectionFactory简化的类图如下:
获取媒体流
第一步:获取视频源videoSource
String frontCameraName = VideoCapturerAndroid.getNameOfFrontFacingDevice()
VideoCapturer videoCapturer = VideoCapturerAndroid.create(frontCameraName)
VideoSource videoSource = factory.createVideoSource(videoCapturer,videoConstraints)
其中videoConstraints是对视频流的一些限制,按如下方法创建。
MediaConstraints videoConstraints = new MediaConstraints()
videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxHeight", Integer.toString(pcParams.videoHeight)))
videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxWidth", Integer.toString(pcParams.videoWidth)))
videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("maxFrameRate", Integer.toString(pcParams.videoFps)))
videoConstraints.mandatory.add(new MediaConstraints.KeyValuePair("minFrameRate", Integer.toString(pcParams.videoFps)))
第二步:获取音频源audioSource
音频源的获取简单许多:
AudioSource audioSource = factory.createAudioSource(new MediaConstraints());
第三步:获得封装VideoTrack/AudioTrack
VideoTrack/AudioTrack 是 VideoSource/AudioSource 的封装,方便他们的播放和传输:
VideoTrack videoTrack = factory.createVideoTrack("ARDAMSv0", videoSource);
AudioTrack audioTrack = factory.createAudioTrack("ARDAMSa0", audioSource);
第四步:获取媒体流localMS
其实 VideoTrack/AudioTrack 已经可以播放了,不过我们先不考虑本地播放。那么如果要把他们发送到对方客户端,我们需要把他们添加到媒体流中:
MediaStream localMS=factory.createLocalMediaStream("ARDAMS");
localMS.addTrack(videoTrack);
localMS.addTrack(audeoTrack);
然后,如果有建立好的连接通道,我们就可以把 localMS 发送出去了。
建立连接通道
WebRTC是基于P2P的,但是在连接通道建立好之前,我们仍然需要服务器帮助传递信令,而且需要服务器帮助进行网络穿透。大体需要如下几个步骤。
第一步:创建PeerConnection的对象。
PeerConnection pc = factory.createPeerConnection(
iceServers,
pcConstraints,
context);