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

人事代理网站建设网站设计的要素

人事代理网站建设,网站设计的要素,鞍山一地发布最新通知,开发软件网站多少钱文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习WebRTC的时候#xff0c;发现只有JavaScript的API文档#xff0c;找了很久没有找到Android相关的API文档#xff0c;所以通过此片文章记录下在Android应用层如何使用WebRTC 本篇文章结合#xff1a;【W… 文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习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://www.w-s-a.com/news/886827/

相关文章:

  • 怎样自己做刷赞网站电商设计需要学什么软件有哪些
  • 关注城市建设网站居众装饰
  • 网站建设的语言优化企业网站
  • 成都旅游网站建设规划女性门户资讯类网站织梦dedecms模板
  • 二手车为什么做网站网站建设合作合同范文
  • 网站建设维护和网页设计做网站都需要服务器吗
  • 成都网站设计报告书系统平台
  • 怎样进行网站推广wordpress微博图床
  • 做一个平台 网站服务器搭建网架公司股价
  • 链家在线网站是哪个公司做的一个虚拟主机做2个网站
  • 网站开发实训报告模板学校网站建设计划
  • 免费手机网站制作方法什么事网站开发
  • 我们的爱情网站制作阿里云wordpress配置
  • 电脑网站页面怎么调大小唐山网站建设技术外包
  • 科威网络做网站怎么样wordpress分页样式
  • 泰安公司网站建设自助建站程序
  • 网站建设工程设计图建网站怎样往网站传视频
  • 做网站月入企业网站建设运营
  • 网站建设中的ftp地址公众号微官网
  • 手机wap网站开发与设计app开发公司电话
  • 网站页脚代码大沥网站开发
  • 重庆网站制作公司 广州天成网络技术有限公司
  • 佛山网站改版wordpress 是否有后门
  • 如何承接网站建设外包wordpress产品布局
  • 洛阳建站洛阳市网站建设视觉设计专业
  • 婚恋网站建设分析网站建设硬件需求
  • 北京做网站电话wordpress如何换图片
  • 电影网站做cpa深圳信息网
  • 单县网站建设优化大师电脑版官网
  • 番禺区住房和建设局物业网站浦东新区网站设计