Android WebRTC 音视频开发总结(四)-- webrtc传输模块
在介绍WebRTC通讯之前我们先来看一个P2P视频聊天包括的主要过程,转载请说明出处(博客园RTC.Blacker):
音视频数据采集->编码->发送->接收->解码->播放。
编码、解码、以及会用到加密、解密、回声消除等针对不同系统处理方式都一样,与平台无关,
但像Socket通信涉及到的数据发送、接收不同平台则有不同的处理方式,如Socket模型,windows里面用的是WSASocket,
Linux下用的则是socket,所以他通过模版模式来创建不同类型,
下面主要是介绍WebRTC自带的一个传输模块,实际应用中您可以根据自己的需求注册不同的传输模块。
其中:udp_socket_wrapper.h主要负责Socket相关操作,如Socket创建、启动、端口绑定、停止。
udp_socket2_windows.h主要负责windows平台上的Socket相关操作,与之对应的就是linux平台上的udp_socket_posix.h
udp_transport.h主要负责包的发送和接收,如果你想实现自己的数据包收发逻辑,可重写该类,如他里面的LoopBack方式就是通过重写该模块来实现的。
对客户端调用来说主要就是做四件事情:
1、设置音视频远端地址和端口(包括远端音视频的RTP、RTCP端口和本地接收音视频的RTP、RTCP端口)。
2、启动音视频数据的发送。
3、启动音视频数据的接收。
4、启动音视频数据的播放。
具体代码结构如下:
- public void start() {
- this.setRemoteIp(WebRTCClient.str_remote_ip);WebRTCClient.str_to);
- if (audioEnabled) {
- startVoE();
- }
- if (receiveVideo || sendVideo) {
- startViE();
- }
- }
- public void startVoE() {
- check(!voeRunning, "VoE already started");
- check(voe.startListen(audioChannel) == 0, "Failed StartListen");
- check(voe.startPlayout(audioChannel) == 0, "VoE start playout failed");
- check(voe.startSend(audioChannel) == 0, "VoE start send failed");
- voeRunning = true;
- }
- public void startViE() {
- check(!vieRunning, "ViE already started");
- if (receiveVideo) {
- if (viewSelection == context.getResources().getInteger(R.integer.openGl)) {
- svRemote = ViERenderer.CreateRenderer(context, true);
- } else if (viewSelection == context.getResources().getInteger(R.integer.surfaceView)) {
- svRemote = ViERenderer.CreateRenderer(context, false);
- } else {
- externalCodec = new MediaCodecVideoDecoder(context);
- svRemote = externalCodec.getView();
- }
- if (externalCodec != null) {
- check(vie.registerExternalReceiveCodec(videoChannel, VCM_VP8_PAYLOAD_TYPE,
- externalCodec, true) == 0, "Failed to register external decoder");
- } else {
- check(vie.addRenderer(videoChannel, svRemote, 0, 0, 0, 1, 1) == 0,
- "Failed AddRenderer");
- check(vie.startRender(videoChannel) == 0, "Failed StartRender");
- }
- check(vie.startReceive(videoChannel) == 0, "Failed StartReceive");
- }
- if (sendVideo) {
- startCamera();
- check(vie.startSend(videoChannel) == 0, "Failed StartSend");
- }
- vieRunning = true;
- }
希望查看这个调用过程能是您大概明白流媒体数据的发送过程,为后面自定能够以传输模块打下基础。
请思考:WebRTC里面如何操作音视频设备?如打开扬声器,启动摄像头,后面会揭晓答案,请关注。
Android WebRTC 音视频开发总结(四)-- webrtc传输模块的更多相关文章
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
- Android IOS WebRTC 音视频开发总结(二四)-- p2p调用堆栈
本文主要分析webrtc音视频点对点部分的代码结构,文章来自博客园RTC.Blacker,转载请说明出处. 前段时间在查一个偶尔断线的问题(这种问题最蛋疼,不好重现,只能凭经验去搞),所以理了下web ...
- Android WebRTC 音视频开发总结
www.cnblogs.com/lingyunhu/p/3621057.html 前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC. ...
- Android IOS WebRTC 音视频开发总结(三二)-- WebRTC项目开发建议
本文主要介绍WEBRTC开发过程中的一些现象,文章来自博客园RTC.Blacker,支持原创,欢迎关注微信公众号blacker,更多详见www.rtc.help 随着移动互联网和智能硬件的快速发展,音 ...
- Android WebRTC 音视频开发总结(三)-- 信令服务和媒体服务
前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC.Blacker). 通过前面的例子我们知道运行WebRTCDemo即可看到P2P的 ...
随机推荐
- 优化studio的速度
随着Android Studio开发工具的逐渐成熟,越来越多的程序员选择这种IDE工具来进行开发,但是android studio在使用过程中有时候会出现卡顿问题.在赶项目的时候,遇到这类问题最是苦恼 ...
- js鼠标事件、键盘事件实例代码
讲述了:鼠标的哪个按键被点击.当前鼠标的光标坐标是多少.被按下键的unicode码是多少.当前鼠标的光标相对于屏幕的坐标是多少.当前鼠标的光标坐标是多少.shift键是否按下.当前被点击的是哪一个元素 ...
- WCF Windows Service Using TopShelf and ServiceModelEx z
http://lourenco.co.za/blog/2013/08/wcf-windows-service-using-topshelf-and-servicemodelex/ There are ...
- Opencv 2.4.9在Ubuntu下的配置与安装
[原]Opencv 2.4.9在Ubuntu下的配置安装 Opencv 2.4.9在Ubuntu下的配置与安装 surgewong@gmail.com http://blog.csdn.net/su ...
- [Flex] ButtonBar系列——flex3 ButtonBar样式之颜色的填充
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...
- 算法库:jpeglib和pnglib安装配置
类似于OpenCV的安装配置.只不过OpenCV有编译好的,而jpeglib和pnglib需要自己编译.其实,若要跟踪OpenCV的源码或要使用OpenCV的扩展包,OpenCV也得自己编译. Ope ...
- HYSBZ 1061 志愿者招募 【最小费用流】【差分】【最小费用流模板】
#include<stdio.h> #include<queue> #define MAXN 1003 #define MAXM 10002*4 #define INF 100 ...
- Find the Clones(字典树)
链接:http://poj.org/problem?id=2945 Description Doubleville, a small town in Texas, was attacked by th ...
- python学习笔记(SMTP邮件发送:带附件)
博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...