iOS WebRTC语音视频通话实现与demo
来源:互联网 发布:网络测线仪哪个牌子好 编辑:程序博客网 时间:2024/05/16 10:00
前言
最近公司要出一个视频通话的项目。在网上看了好多项目但是感觉要么太复杂要么满足不了我们的需求。个人认为环信的做的应该还是很不错的,但是我们领导要求WebRtc来做,没办法。
首先说一下:WebRtc本身是谷歌搞出来的,所以实在不行可以谷歌一发吧!不过源码还是比较gay的,哈哈哈,看运气不知道你能不能下下来。
官方教程 :https://webrtc.org/native-code/ios/
WebRtc只适合小范围(8人以内)音视频会议,不适合做直播:
让粉丝们来看直播,如果同时粉丝数>10人,那么不关 WebRtc 鸟事,服务器请使用 nginx rtmp-module架设,架设好了用 ffmpeg 命令行来测试播摄像头。主播客户端请使用rtmp进行推流给rtmp-module,粉丝请使用 rtmp / flv + http stream 进行观看,PC-web端的粉丝请使用 Flash NetStream来观看,移动 web端的粉丝请使用 hls / m3u8 来观看。
这是知乎上的,一些这方面的讲解!如果你已经入门了,可以去看看:https://www.zhihu.com/question/25497090/answer/72397450
网上有很多开源的代码,我也建议你可以去看看!有时候看看他的代码看得多了其实就能懂很多了,无非就是调接口这些!
对了,这个最主要的是需要搭建服务器哦!有人纠结究竟自己搭还是去买,我个人感觉搭它的服务器还是很简单的、=-= 恩,可以自己去百度按照教程来,不过需要注意的是从公网到外网这个会有点麻烦!不过我想着不是你的MARK!哈哈哈,交给那些后台吧!
About
项目是一个基于本土故事板空间定位器和视频聊天视图控制器,UI这块的话 我觉得你可以自己想得到的!毕竟画几个播放器不算太难吧!
Features
完全原生objective - c 64位支持libWebRTC预先编译。。(节省你小时编译)
从v1.0.2我们现在引用pod libjingle_peerconnection由原始的维护。
一个自动libWebRTC io。
构建流程利用可可豆荚依赖关系管理视图控制器很容易落入自己的项目暴露api来轻松地定制,适应你的需要(更多细节见下文)支持最近https://apprtc.appspot.com(2015年10月)也有一个叉的谷歌AppRTC Web服务器维护这个项目完全兼容
Notes
以下资源帮助得到这个项目到今天的地方:- How to get started with WebRTC and iOS without wasting 10 hours of your life
- hiroeorz's AppRTCDemo Project
- Pristine.io Automated WebRTC Building
Running the AppRTC App on your iOS Device
你的iPhone或者iPad上运行这个应用程序可以存储库和打开AppRTC叉。在Xcode中xcworkspace和编译你的iOS设备上检查出来。默认情况下,服务器地址设置为https://apprtc.appspot.com。Using the AppRTC Pod in your App
如果你想把WebRTC视频聊天到你自己的应用程序中,您可以安装AppRTC舱:pod install AppRTC
从那里你可以看到在这个回购ARTCVideoChatViewController类。以下步骤详细具体更改您将需要在您的应用程序添加视频聊天。
Initialize SSL Peer Connection
WebRTC可以通过SSL安全通信。这是必需的,如果你想测试在https://apprtc.appspot.com。您需要修改您的AppDelegate。m类如下:
- Import the RTCPeerConnectionFactory.h
#import "RTCPeerConnectionFactory.h"
- Add the following to your
application:didFinishLaunchingWithOptions:
method:[RTCPeerConnectionFactory initializeSSL];
- Add the following to your
applicationWillTerminate:
method:[RTCPeerConnectionFactory deinitializeSSL];
Add Video Chat
向应用程序添加视频聊天你需要2视图:
1.本地视频视图——从你的设备摄像头视频呈现
2.远程视频呈现视图——视频远程相机
为此,执行以下:
1.ViewController或使用的任何类,其中包含上面定义的两个视图添加以下标题:进口
#import <libjingle_peerconnection/RTCEAGLVideoView.h>#import <AppRTC/ARDAppClient.h>2.类应该实现ARDAppClientDelegate和RTCEAGLVideoViewDelegate协议:
@interface ARTCVideoChatViewController : UIViewController <ARDAppClientDelegate, RTCEAGLVideoViewDelegate>3.在您的类定义以下属性:* `ARDAppClientDelegate` - Handles events when remote client connects and disconnect states. Also, handles events when local and remote video feeds are received.* `RTCEAGLVideoViewDelegate` - Handles event for determining the video frame size.
@property (strong, nonatomic) ARDAppClient *client;@property (strong, nonatomic) IBOutlet RTCEAGLVideoView *remoteView;@property (strong, nonatomic) IBOutlet RTCEAGLVideoView *localView;@property (strong, nonatomic) RTCVideoTrack *localVideoTrack;@property (strong, nonatomic) RTCVideoTrack *remoteVideoTrack;4.初始化属性变量时一定要设置代表:* *ARDAppClient* - Performs the connection to the AppRTC Server and joins the chat room* *remoteView* - Renders the Remote Video in the view* *localView* - Renders the Local Video in the view
/* Initializes the ARDAppClient with the delegate assignment */ self.client = [[ARDAppClient alloc] initWithDelegate:self]; /* RTCEAGLVideoViewDelegate provides notifications on video frame dimensions */ [self.remoteView setDelegate:self]; [self.localView setDelegate:self];5.连接到一个视频聊天室
[self.client setServerHostUrl:@"https://apprtc.appspot.com"]; [self.client connectToRoomWithId:@"room123" options:nil];6.处理ARDAppClientDelegate的委托方法
- (void)appClient:(ARDAppClient *)client didChangeState:(ARDAppClientState)state { switch (state) { case kARDAppClientStateConnected: NSLog(@"Client connected."); break; case kARDAppClientStateConnecting: NSLog(@"Client connecting."); break; case kARDAppClientStateDisconnected: NSLog(@"Client disconnected."); [self remoteDisconnected]; break; }}- (void)appClient:(ARDAppClient *)client didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack { self.localVideoTrack = localVideoTrack; [self.localVideoTrack addRenderer:self.localView];}- (void)appClient:(ARDAppClient *)client didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack { self.remoteVideoTrack = remoteVideoTrack; [self.remoteVideoTrack addRenderer:self.remoteView];}- (void)appClient:(ARDAppClient *)client didError:(NSError *)error { /* Handle the error */}7.为RTCEAGLVideoViewDelegate处理委托回调
- (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size {/* resize self.localView or self.remoteView based on the size returned */}
Known Issues
以下是已知问题正在处理,应该不久公布:
- None at this time
有需要代码的可以联系加群。群号:622492955 哈哈哈!!!
0 0
- iOS WebRTC语音视频通话实现与demo
- 基于WebRTC Chrome与Firefox实现视频通话
- 基于WebRTC实现页面浏览器视频通话-原理及实现demo
- Java+WebSocket+WebRTC实现视频通话实例
- 使用webRTC通话Demo
- webrtc (3) 使用webrtc Native API实现视频通话
- android WebRTC视频通话
- 使用WebRTC实现电脑与手机通过浏览器进行视频通话
- iOS下WebRTC音视频通话(一)
- 基于socket.io即时通讯IM实现,webRTC实现视频通话
- iOS下WebRTC音视频通话(二)-局域网内音视频通话
- iOS下WebRTC音视频通话(三)-音视频通话
- 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话
- 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话
- 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话
- 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话
- Java通过WebSocket WebRTC实现视频通话实例
- Java使用websocket和WebRTC实现视频通话
- 【Unet】Unet 客户端 与 服务器行为
- 在Windows x64中加载驱动
- Android自定义view之measure、layout、draw三大流程
- 程序杂谈
- 中小型棋牌类网络游戏服务端架构
- iOS WebRTC语音视频通话实现与demo
- OTB Results
- 移动Web App、Hybrid App与Native App的差异
- Oracle-给表增加字段和注释
- 键盘绑定事件
- [mysql] select语句中比较两个max函数查询出来的时间,然后出现诡异的情况
- Fluent UI
- 多线程提高效率的情况
- Android 利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)