【视频聊天】一个简单demo
Android端程序:https://github.com/Zweo/VideoChat
系统架构示意图
视频聊天的的流程大致为:
1. 用户A发起视频聊天,将控制信息发往调度服务器,同时将A视频流上传流媒体服务器;
2. 调度服务器通过控制信息找到对应的用户B,B做出响应,将B方视频流上传到流媒体服务器,返回响应信息,并拉取A方视频流。
3. A得到响应信息,拉取B方视频流,实现视频聊天。
本demo中,无调度服务器,只是一个简单的demo,就直接使用默认知道对方的地址进行播放。
如A的地址为 {服务器}/live/hello_1 ,B 为 {服务器}/live/hello_2
流媒体服务器
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。
本系统采用red5-server作为流媒体服务器,具体部署可参考我另一文章red5,很简单就能配置好使用了。
注意事项:rtmp使用的1985端口可能被防火墙拦截
Android端
拉流方式
ijkplayer Android和ios都可用,还支持多种视频的硬解码。
Github网址:https://github.com/Bilibili/ijkplayer
使用方式:具体来讲很有些麻烦,暂时就不讲了,可以查看我的github上用直接封装好的,库文件也封装好了。布局文件中添加VideoView,设置拉流地址,即可播放。
mVideoView.setVideoPath(mVideoPath);
mVideoView.start();
在 ijkVideoView.java 中,设置如下,减小缓存区大小,实现减小延时的效果。
// 设置缓存区,减小延时
ijkMediaPlayer.setOption(1, "analyzemaxduration", 100L);
ijkMediaPlayer.setOption(1, "probesize", 10240L);
ijkMediaPlayer.setOption(1, "flush_packets", 1L);
ijkMediaPlayer.setOption(4, "packet-buffering", 0L);
ijkMediaPlayer.setOption(4, "framedrop", 1L);
推流方式
Github网址:https://github.com/runner365/android_rtmppush_sdk
使用方式:输入推流地址,即可推流。调用RtmpStartMessage函数即开始推流, _rtmpUrl为存储推流地址的变量,改变它即可改变推流地址。
Android 端,将两方的库结合起来,就可以实现一个简单的视频聊天程序了,一个用来推送,一个用于拉流。
我这里整合好的Android程序可以见: https://github.com/Zweo/VideoChat
PC端
推流拉流方式很多,这里就不详述了。 主要就是播放视频流地址,以及推送视频流即可。
【视频聊天】一个简单demo相关推荐
- android demo 调用,Android中调用C++函数的一个简单Demo
这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手 .废话少说直接进入正题. 一.在Eclipse中创建一个Android Applica ...
- 一个简单demo通过em实现‘响应式设计、em、文字图标svg’
大多数网站所谓的响应式设计,只是在不同大小屏幕上能正常显示罢了,在大屏幕上显示全部页面,在小屏幕上隐藏一部分不重要的页面,这样的响应式设计 只是为了兼容pc和移动,但在移动上的效果却是很不理想的,隐藏 ...
- [carla入门教程]-3 在carla中遥控汽车并采集传感器数据(一个简单Demo,附代码)
本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第 ...
- 使用Vite搭建一个简单demo
文章目录 前言 环境配置 nodejs使用简介 安装vite,基于模板实现一个vite项目的小demo 初始化的目录结构介绍 安装ElementUI和Axios 组件内容详解 main.js App. ...
- tinyxml 读取文本节点_用TinyXml2读取XML文件的一个简单Demo
废话少说直接上代码,需要的人自然一看便懂,对于第一次接触TinyXml2的人来说还是有帮助的. 18 1.7 28 1.6 30 1.8 tinyxml2::XMLDocument Doc; Doc. ...
- 实时音视频聊天中超低延迟架构的思考与技术实践
1.前言 从直播在线上抓娃娃,不断变化的是玩法的创新,始终不变的是对超低延迟的苛求.实时架构是超低延迟的基石,如何在信源编码.信道编码和实时传输整个链条来构建实时架构?在实时架构的基础之上,如果通过优 ...
- WebRTC 教程五:WebRTC搭建视频聊天室
这篇文章主要介绍了 WebRTC 聊天室的整体演示,以及 WebRTC 视频聊天的功能设计,代码逻辑以及整体演示. 目录 WebRTC 聊天室:总体演示 WebRTC 视频聊天: 设计 WebRTC ...
- 一个简单的DWR入门例子
http://di201yao.iteye.com/blog/164095 什么是DWR? DWR是一个Open Source的 java项目.DWR可以让JavaScript调用运行在Web ...
- Android——一个简单的APP模版
Android--一个简单的APP模版 述 效果视频 技术栈 地图.定位.导航 地图 定位 导航 偏好设置 当前导航信息 预定车位和订单结算 创建订单 计时服务传导 后台服务计时 订单结算 个人信息 ...
最新文章
- pythorch创建简单的神经网络源码
- 推荐一个不错的开源在线HTML编辑器
- Golang 单元测试详尽指引
- ros(5)service client实现
- sap相关性不能被编译_经典综述编译丨生物硝化抑制丨NAT PLANTS:现代农业中的氮转化和生物硝化抑制作用...
- mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...
- c语言void nzp,二级C语言考试辅导教程第五章:函数[5]
- 二级计算机vfp知识,全国计算机vfp二级考试
- 二阶系统级联_一种高二阶级联结构Sigma-Delta调制器系统的制作方法
- python 小说 云_python爬小说
- Rhino学习教程——1.2
- 群英传内推第001期
- pdf2html java_pdf2HtmlEX的使用
- 创业语录(转)(动态添加中)
- GIS论坛网站推荐!
- 网络营销与推广手法探秘
- 成为合格插画设计师的要点
- 深度学习的工作原理学习方式
- 笑话集原创笑话精品展第二十四期
- 叉乘点乘混合运算公式_人教版小学二年级数学概念、公式汇总(附应用题),开学前给孩子预习!...
热门文章
- 光圣科技IQC质量管理模块
- 你用什么样的编程语言,决定你能拿多少钱
- Spring Event 业务解耦神器,刷爆了
- 基于FPGA的扩频系统设计(中)
- 晶振为什么要加电容_需要配多大电容
- iOS 判断屏幕方向锁定是否开启
- 计算机机房需要重启设备,机房维护注意事项
- 【三】3D匹配Matching之可变形曲面匹配Deformable Surface—get_deformable_surface_model_param()算子
- Windows 系统如何在 C++ 项目中使用第三方库
- DDD-领域对象与领域服务