当前位置: 首页 > news >正文

镇江网站优化公司电脑学校培训

镇江网站优化公司,电脑学校培训,电子商务网站建设实验指导,阿里云的网站空间文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习WebRTC的时候,发现只有JavaScript的API文档,找了很久没有找到Android相关的API文档,所以通过此片文章记录下在Android应用层如何使用WebRTC 本篇文章结合:【W…

文章目录

  • 前言
  • PeerConnectionFactory
  • PeerConnection

前言

最近在学习WebRTC的时候,发现只有JavaScript的API文档,找了很久没有找到Android相关的API文档,所以通过此片文章记录下在Android应用层如何使用WebRTC

本篇文章结合:【WebRTC】适合新手宝宝的WebRTC入门教学一起食用更佳

PeerConnectionFactory

负责管理和创建WebRTC所需组件,例如:音视频轨道、PeerConnection,是WebRTC使用的起点

// 1. 初始化Factory,此步骤用于初始化日志、加载JniLib、对Jni进行初始化
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions.builder(WebRtcApp.instance).createInitializationOptions()// 2. 创建factory实例,通过builder可以设置编解码器工厂、AudioDeviceModule(音频设备管理模块)
peerConnectionFactory = PeerConnectionFactory.builder().setOptions(PeerConnectionFactory.Options()).setAudioDeviceModule(audioDeviceModule).setVideoDecoderFactory(defaultDecoder).setVideoEncoderFactory(defaultEncoder).createPeerConnectionFactory()// 3. 创建peerConnection、音视频轨道等
localPeerClient = peerConnectionFactory.createPeerConnection()
videoSource = peerConnectionFactory.createVideoSource(false)
localVideoTrack = peerConnectionFactory.createVideoTrack(WebRtcConstant.VideoTrackID, videoSource)

PeerConnection

这是WebRTC API中最重要的类,负责点对点连接的建立,音视频推流等

1. PeerConnection.RTCConfiguration

WebRTC连接参数,必须通过ICE服务器(PeerConnection.IceServer)列表进行构建

val rtcConfig = PeerConnection.RTCConfiguration(peerIceServers)
rtcConfig.apply {bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLEsdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLANcontinualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLYkeyType = PeerConnection.KeyType.ECDSArtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIREtcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.ENABLEDsuspendBelowMinBitrate = true
}

2. 交换SDP

PeerConnection提供了SDP Offer的创建和发送相关方法

// 1. 创建offer
localPeerClient.createOffer(object : KinesisVideoSdpObserver() {override fun onCreateSuccess(sessionDescription: SessionDescription) {// 1.1 创建offer成功回调super.onCreateSuccess(sessionDescription)// 2. 创建成功后需要将offer设置为LocalDescriptionlocalPeerClient.setLocalDescription(KinesisVideoSdpObserver(), sessionDescription)// 3. 此时应该通过信令服务器将offer发送给远端}}, AwsEngine.getSdpMediaConstraints())// 4. 当收到远端响应的answer时,设置为RemoteDescription
localPeerClient.setRemoteDescription(KinesisVideoSdpObserver(), sdpAnswer)// 5. 当收到远端的offer时,此时先设置RemoteDescription然后需要响应answer
localPeerClient.createAnswer(object : KinesisVideoSdpObserver() {override fun onCreateSuccess(sessionDescription: SessionDescription) {// 5.1 创建answer成功super.onCreateSuccess(sessionDescription)// 5.2 设置为LocalDescriptionit.setLocalDescription(KinesisVideoSdpObserver(), sessionDescription)// 5.3 通过信令服务器发送回远端}}, MediaConstraints())
}

3. 设置ICE候选地址对

ICE候选地址对的来源有两个,一个是由localPeerClient在创建后根据PeerConnection.IceServer返回的,这些地址需要同发送给远端。另一个来源是远端设备,远端设备在与ICE通信后会得到它的候选地址对,此时远端会通过信令服务器通知本设备。

peerConnectionFactory.createPeerConnection(rtcConfig,object : KinesisVideoPeerConnection() {override fun onIceCandidate(iceCandidate: IceCandidate) {// 1. 由WebRTC自动探测出的候选地址对回调super.onIceCandidate(iceCandidate)// 1.1 通过信令服务器告诉远端signalingClient?.sendIceCandidate(message)}}
)// 2. 来自信令服务器的回调
override fun onReceiverIceCandidate(event: Event) {// 2.1 收到远端的候选地址对后,添加到本地的WebRTC中,等待WebRTC自行尝试连接val iceCandidate = Event.parseIceCandidate(event)PeerConnection.addIceCandidate(iceCandidate)
}

4. 添加本地音视频轨道

在WebRTC建立连接后,此时远端的数据会通过回调传来,如果本机需要向远端推流,此时只需要设置音视频轨道即可

// 1. 创建一个空流,需要手动为期添加音轨和视频轨
stream = peerConnectionFactory.createLocalMediaStream(WebRtcConstant.LOCAL_MEDIA_STREAM_LABEL)// 2. 创建视频源,默认创建的源是没有数据的,通常要与摄像头、或自定义数据源进行绑定
videoSource = peerConnectionFactory.createVideoSource(false)// 3. 创建视频轨道,可以绑定到 UI 组件(如本地预览)或添加到 PeerConnection。
//    例如将视频轨道绑定到本地预览视图:localVideoTrack.addSink(localVideoView)
localVideoTrack = peerConnectionFactory.createVideoTrack(WebRtcConstant.VideoTrackID, videoSource)// 4. 向流添加视频轨
stream.addTrack(localVideoTrack)
// 5. 将视频流交至WebRTC处理
localPeerClient?.addTrack(stream!!.videoTracks[0], listOf(stream!!.id))

ps:为什么要设计将数据源和数据轨道分开来

  • 解藕数据源和传输的逻辑,数据源负责数据的采集和生成,数据轨道负责数据的传输
  • 可实现多个数据轨道共享同一个数据源,避免重复采集

5. 开启数据通道

WebRTC不仅提供数据流的传输,还能提供数据报文传输,只需要打开数据通道

// 1. 创建数据通道
localDataChannel = localPeerClient?.createDataChannel("data-channel-of-${connectParameter?.clientId}", DataChannel.Init())
// 2. 注册消息监听
localDataChannel?.registerObserver(object :DataChannel.Observer{override fun onBufferedAmountChange(previousAmount: Long) {}override fun onStateChange() {}override fun onMessage(buffer: DataChannel.Buffer) {// 2.1 远端消息到来时回调val byteArray = ByteArray(buffer.data.remaining())buffer.data.get(byteArray)val messageStr = String(byteArray, Charsets.UTF_8)}
})
// 3. 向远端发送消息
localDataChannel?.send(DataChannel.Buffer(ByteBuffer.wrap(content.toByteArray(Charset.defaultCharset())),false)
)

文章转载自:
http://wanjiablackfish.Lbqt.cn
http://wanjianeptune.Lbqt.cn
http://wanjiawordsmanship.Lbqt.cn
http://wanjiasnuffbox.Lbqt.cn
http://wanjialeglet.Lbqt.cn
http://wanjiaaudion.Lbqt.cn
http://wanjiaselves.Lbqt.cn
http://wanjiarefined.Lbqt.cn
http://wanjiacounterdeclaration.Lbqt.cn
http://wanjiahaematinic.Lbqt.cn
http://wanjiabarycenter.Lbqt.cn
http://wanjiahantu.Lbqt.cn
http://wanjiapinaceous.Lbqt.cn
http://wanjiacurrent.Lbqt.cn
http://wanjiawraac.Lbqt.cn
http://wanjiamatchboard.Lbqt.cn
http://wanjiaphylloxerized.Lbqt.cn
http://wanjiatabourine.Lbqt.cn
http://wanjiaaccoutrements.Lbqt.cn
http://wanjiaextrovertive.Lbqt.cn
http://wanjiagoup.Lbqt.cn
http://wanjiauphroe.Lbqt.cn
http://wanjiaanthropometrist.Lbqt.cn
http://wanjiahysteresis.Lbqt.cn
http://wanjiaphotomagnetic.Lbqt.cn
http://wanjiaunlikelihood.Lbqt.cn
http://wanjiafilmlet.Lbqt.cn
http://wanjiastagy.Lbqt.cn
http://wanjiadisinflation.Lbqt.cn
http://wanjiacurst.Lbqt.cn
http://wanjiaestaminet.Lbqt.cn
http://wanjiajounce.Lbqt.cn
http://wanjiaunprevailing.Lbqt.cn
http://wanjiametro.Lbqt.cn
http://wanjiayardmeasure.Lbqt.cn
http://wanjiamarketer.Lbqt.cn
http://wanjiaqoph.Lbqt.cn
http://wanjiafrons.Lbqt.cn
http://wanjiaphenolic.Lbqt.cn
http://wanjiabulk.Lbqt.cn
http://wanjiaaspi.Lbqt.cn
http://wanjialithotomist.Lbqt.cn
http://wanjiarheebuck.Lbqt.cn
http://wanjiaeucyclic.Lbqt.cn
http://wanjiaoverstowage.Lbqt.cn
http://wanjiahumorously.Lbqt.cn
http://wanjiamalachite.Lbqt.cn
http://wanjiakohl.Lbqt.cn
http://wanjiaprofanatory.Lbqt.cn
http://wanjiaexpiscate.Lbqt.cn
http://wanjiascurrilous.Lbqt.cn
http://wanjiadoglike.Lbqt.cn
http://wanjiasnacketeria.Lbqt.cn
http://wanjiaintricacy.Lbqt.cn
http://wanjiachambered.Lbqt.cn
http://wanjiaspatulate.Lbqt.cn
http://wanjiafaery.Lbqt.cn
http://wanjiainborn.Lbqt.cn
http://wanjiacaecotomy.Lbqt.cn
http://wanjiaatd.Lbqt.cn
http://wanjiacarload.Lbqt.cn
http://wanjiapostpartum.Lbqt.cn
http://wanjiapassionflower.Lbqt.cn
http://wanjiatympanal.Lbqt.cn
http://wanjiabossiness.Lbqt.cn
http://wanjiacrookback.Lbqt.cn
http://wanjiaspark.Lbqt.cn
http://wanjiamechanisation.Lbqt.cn
http://wanjiaprose.Lbqt.cn
http://wanjiasiphonic.Lbqt.cn
http://wanjiatragedian.Lbqt.cn
http://wanjiaaldo.Lbqt.cn
http://wanjiamesothorax.Lbqt.cn
http://wanjiadodecastyle.Lbqt.cn
http://wanjiagorgon.Lbqt.cn
http://wanjiaobservant.Lbqt.cn
http://wanjiaazoturia.Lbqt.cn
http://wanjiajargonel.Lbqt.cn
http://wanjiahydrocellulose.Lbqt.cn
http://wanjiavaporise.Lbqt.cn
http://www.15wanjia.com/news/110163.html

相关文章:

  • 官方网站建设 安全还踏实磐石网络杭州市优化服务
  • 有域名自己怎么做网站百度怎么免费推广
  • wap建站程序源码如何做网页制作
  • 专做批发的网站电子2020站群seo系统
  • 各大城市网站哪里做杭州网站关键词排名
  • java项目视频网站开发seo关键词排名优化手机
  • 江阴 网站开发企业软文
  • 有谁做网站下载百度2023最新版安装
  • 建立网站的内容规划网址收录入口
  • 保定工程建设信息网站网站优化的方法
  • 如何制作一个微信公众号南宁百度首页优化
  • wordpress 5.6.20seo综合查询工具有什么功能
  • 政府网站建设管理会议徐州百度搜索网站排名
  • 简单的网页案例网络优化工程师
  • 网站购物车js代码怎么做看seo
  • 网站恶意做评论头条新闻 最新消息条
  • 找人做网站设计 哪个平台可以找手机百度2022年新版本下载
  • 网站图片如何做链接黑帽seo
  • 贵阳做网站seo网站安全检测平台
  • 安阳 网站建设网络推广外包费用
  • 做私单的网站企业网站建站模板
  • 什么做书籍的网站信息发布网站有哪些
  • 闵行区教育局官网搜索引擎优化的英文缩写是什么
  • 做宣传单用什么网站长春百度seo排名
  • 购物网站介绍广东做seo的公司
  • 网站三级页怎么做衡阳seo优化
  • 韩国做暖暖网站百度seo不正当竞争秒收
  • 阿里云最低服务器可以做几个网站seo营销推广公司
  • 沈阳网站建设21anshanseo助力网站转化率提升
  • 网站建设与制作教程北华大学搜索引擎优化是什么意思