基于SRS服务器实现Android-Web端视频通话(2):Android端从SRS服务器拉取WebRTC流
基于SRS服务器实现Android-Web端视频通话(1):SRS服务器启用HTTPS
基于SRS服务器实现Android-Web端视频通话(2):Android端从SRS服务器拉取WebRTC流
基于SRS服务器实现Android-Web端视频通话(3):Android端向SRS服务器推送WebRTC流
实现效果
引库
implementation 'org.webrtc:google-webrtc:1.0.32006'
其他版本,详见
拉流流程
createPeerConnectionFactory -> createPeerConnection -> createOffer -> setLocalDescription(OFFER) -> get remote sdp(network requset) -> setRemoteDescription(ANSWER)
代码实现
初始化
//加载并初始化 WebRTC,在创建 PeerConnectionFactory 之前必须至少调用一次
PeerConnectionFactory.initialize(
PeerConnectionFactory.InitializationOptions
.builder(applicationContext).createInitializationOptions()
)
private val eglBaseContext = EglBase.create().eglBaseContext
createPeerConnectionFactory
private lateinit var peerConnectionFactory: PeerConnectionFactory
...
//一些默认初始化配置即可
val options = PeerConnectionFactory.Options()
val encoderFactory = DefaultVideoEncoderFactory(eglBaseContext, true, true)
val decoderFactory = DefaultVideoDecoderFactory(eglBaseContext)
peerConnectionFactory = PeerConnectionFactory.builder()
setOptions(options)
.setVideoEncoderFactory(encoderFactory)
.setVideoDecoderFactory(decoderFactory)
.createPeerConnectionFactory()
...
createPeerConnection
val rtcConfig = PeerConnection.RTCConfiguration(emptyList())
/*
<p>For users who wish to send multiple audio/video streams and need to stay interoperable with legacy WebRTC implementations, specify PLAN_B.
<p>For users who wish to send multiple audio/video streams and/or wish to use the new RtpTransceiver API, specify UNIFIED_PLAN.
*/
//使用PeerConnection.SdpSemantics.UNIFIED_PLAN
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN
val peerConnection = peerConnectionFactory.createPeerConnection(
rtcConfig,
object : PeerConnectionObserver() {
/**
* Triggered when media is received on a new stream from remote peer.
* 当收到远端媒体流时调用
*/
override fun onAddStream(mediaStream: MediaStream?) {
super.onAddStream(mediaStream)
mediaStream?.let {
//如果有视频轨。
if (it.videoTracks.isEmpty().not(