Live :服务端采用 RTMP(Nginx), WebSocket(Socket.io),客户端 VideoCore+IJKPlayer 构建即时聊天室演示应用。

这个项目是为了演示如何建立一个现场直播的应用程序。

它包括这些功能:

创建一个房间广播你的直播流

加入一个房间看现场

发送喜欢,礼物和评论

简介:

RTMP server – Nginx RTMP module(https://github.com/arut/nginx-rtmp-module)

WebSocket server – Socket.io(http://socket.io/)

iOS client – VideoCore(https://github.com/jgh-/VideoCore) to push stream, IJKPlayer(https://github.com/Bilibili/ijkplayer) to play stream

怎么运行:

可以使用我建立的。一个测试服务器在139.196.179.230,所以你可以直接运行iOS项目。

1. Nginx RTMP server

你可以设置自己的RTMP服务器的指导可以在这里找到:

https://github.com/arut/nginx-rtmp-module

Install RTMP with Nginx on Ubuntu 14.04

class="wp-embedded-content" sandbox="allow-scripts" security="restricted" src="https://www.atlantic.net/community/howto/install-rtmp-ubuntu-14-04/embed/#?secret=2Wnk3YGjw3" data-secret="2Wnk3YGjw3" width="500" height="282" title="“Install RTMP with Nginx on Ubuntu 14.04” — Atlantic.Net Community" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border-width: 0px; border-style: initial; margin: 0px; padding: 0px; position: absolute; clip: rect(1px 1px 1px 1px);">

2. WebSocket server

进入live-server目录,运行npm install,然后启动服务器,命令为:node app.js

3. iOS client

进入live-ios目录,运行pod install(需要使用cocoapods的版本为0.39.0)

在Config.swift配置文件中,更新你的服务器地址:

1
2
3
4
5
struct Config {
     static var rtmpPushUrl = "rtmp://139.196.179.230/mytv/"
     static var rtmpPlayUrl = "rtmp://139.196.179.230/mytv/"
     static var serverUrl = "http://139.196.179.230:3000"
}

该应用程序也可以运行在模拟器上,但要直播,你需要在一个真正的设备上运行它。

备注:

1,流媒体

基本的流媒体流程:

广播->协议->媒体服务器-> CDN -> RTMP或HLS ->观众

最简单的情况下,我们不需要一个CDN服务器,然后流的过程

广播->协议->媒体服务器 -> RTMP或HLS ->观众

就像这样,boadcaster推直播使用RTMP协议的媒体服务器,观众将流从服务器使用RTMP或HLS协议。

对于RTMP和HLS的一些解释:

RTMP协议是用于:音频、视频或数据,是最初由Macromedia公司的专有协议(由Adobe)。该协议是基于TCP的,提供持久连接。总之,RTMP封装MP3 / AAC音频和MP4、FLV视频多媒体流。

HLS:HTTP直播流媒体称为HLS。顾名思义,它是流媒体基于HTTP通信协议;通过苹果的QuickTime,部分Safari,OS X和iOS产品的开发。那怎么使用呢?它打破了整体流成一系列小的基于HTTP的文件(。TS传输流)。这些传输流文件在文件索引m3u8。它需要先下载的m3u8播放列表播放直播。

对于媒体服务器,有几种选择:

Adobe媒体服务器

Red5

Nginx的rtmp模块

crtmpserver

在设置服务器,你可以测试使用ffmpeg

(install it by brew install ffmpeg).

推流

1
ffmpeg -f avfoundation -framerate 30  -i "1:0" -f flv rtmp://server-url

观看流:去这个网站:https://www.hlsplayer.net/rtmp-player

P.S.很多直播云已经覆盖了媒体服务器和CDN的部分。你只需要推/拉从它的流。

2. iOS RTMP libs

有几个开源项目支持RTMP,本项目采用:

VideoCore(https://github.com/jgh-/VideoCore) to push rtmp stream

IJKPlayer(https://github.com/Bilibili/ijkplayer) to pull rtmp stream

你可以在自己的项目页面找到这些库的使用。

3. Websocket server

本项目采用socket.io处理客户端-服务器通信,逻辑很简单,在服务器端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var rooms = []
io.on('connection', function(socket) {
   socket.on('create_room', function(roomKey) {
     rooms.push(roomKey)
     socket.roomKey = roomKey;
     socket.join(roomKey);
   });
   socket.on('close_room', function(roomKey) {
     closeRoom(roomKey)
   });
   socket.on('disconnect', function(roomKey) {
     if (socket.roomKey) {
       closeRoom(socket.roomKey)
     }
   });
   socket.on('join_room', function(roomKey) {
     socket.join(roomKey);
   });
   socket.on('upvote', function(roomKey) {
     io.to(roomKey).emit('upvote')
   });
   socket.on('comment', function(data) {
     io.to(data.roomKey).emit('comment', data)
   });
});

在客户端,利用客户端socket.io swift 客户端(https://github.com/socketio/socket.io-client-swift),,

逻辑也很简单:

创建,加入或关闭一个房间

1
2
3
4
5
6
7
8
9
10
11
socket.on("connect") {data, ack in
     self.socket.emit("create_room", self.room.key)
}
socket.on("connect") {data, ack in
     self.socket.emit("join_room", self.room.key)
}
socket.emitWithAck("close_room", room.key)(timeoutAfter: 0) {data in
     self.socket.disconnect()
}

发布喜欢和评论事件:

1
2
3
4
5
socket.emit("upvote", room.key)
socket.emit("comment", [
     "roomKey": room.key,
     "text": text
])

监听喜欢和评论事件:

1
2
3
4
5
6
7
8
9
socket.on("upvote") {data ,ack in
     self.emitterView.emitImage(R.image.heart()!)
}
socket.on("comment") {data ,ack in
     let comment = Comment(dict: data[0] as! [String: AnyObject])
     self.comments.append(comment)
     self.tableView.reloadData()
}


本文固定链接: http://www.jiandaima.com/blog/archives/612.html | 源码分享网

Live:主流技术构建即时聊天室演示应用,直播源码相关推荐

  1. Java基于局域网(LAN)的聊天室软件-内附源码

    程序简介 一款基于Java的局域网下实时通信软件(聊天室).界面使用swing. 功能描述 提供"聊天主题"进入相应聊天室. ​ 用户登录时输入任意主题名称即可进入对应主题. 提供 ...

  2. php 开发一个聊天系统,ajax+php 实现一个简单的在线聊天室功能(附带源码)

    通过ajax和setInterval()函数,配合php+mysql实现一个简单的在线聊天室的功能.附带详细源码案例.这个聊天室是一个简单的聊天室,通过javascript setInterval() ...

  3. 云豹直播2022带货语音聊天室三端app源码

    2021版云豹直播app源码免费分享-附开发文档 更新 语音聊天室 整体UI更新 动态话题分类 app内置商城

  4. C语言实现QQ聊天室小项目 [完整源码]

    聊天小项目用于练习Windows下的 tcp socket编程和线程同步,其中send 和 recv 使用,对tcp数据传输时经常遇到的中文乱码.数据残缺等问题有示范和纠正作用. 项目效果图 客户端代 ...

  5. [项目] Vue+Element-Plus+SpringBoot+WebSocket 简洁好看的聊天室项目(附源码)

  6. 只需五步,快速构建Python聊天室

    在本文中,我们来谈一谈如何构建一个Python聊天室. 注意:你不需要安装任何额外的Python包. 作者 |  Dark Soulz 译者 | 弯月,责编 | 郑丽媛 头图 | CSDN 下载自东方 ...

  7. pusher 创建新应用_基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用

    基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用 由 学院君 创建于2年前, 最后更新于 3个月前 版本号 #3 前言:学院君之前有说过要整理出一篇事件广播手把手教程 ...

  8. springboot+websocket构建在线聊天室(群聊+单聊)

    系列导读: 1.springboot+websocket构建在线聊天室(群聊+单聊) 2.Spring Boot WebSocket:单聊(实现思路) 3.Websocket Stomp+Rabbit ...

  9. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3.3 哪个聊天室 3.3 加入 ...

最新文章

  1. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
  2. boost::lambda::is_instance_of_1用法的测试程序
  3. 深度学习资料汇总(满满的干货)
  4. SQL Server连接中的常见错误
  5. 熊猫数据集_熊猫迈向数据科学的第二部分
  6. POJ 3683 Priest John's Busiest Day(2-ST)
  7. 十、CSS三行代码实现 溢出的文字省略号显示(white-space: nowrap;overflow: hidden;text-overflow: ellipsis;)
  8. 【SICP练习】71 练习2.42
  9. 使用thrift做c++,java和python的相互调用 - jinghong - ITeye技术网站
  10. linux路由表的查看和含义
  11. Python(十九):比较、深浅拷贝
  12. 百度网盘——下载限速问题解决方案(油猴(Tampermonkey)+PanDownload网页版+IDM)
  13. 科技论文格式和写作技巧
  14. 游戏王计算机兽,游戏王电脑堺卡牌——影依刺猬,影依兽,融合,幽鬼兔,三叉龙...
  15. 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )
  16. kmspico_setup.exe运行提示系统资源不足,无法完成请求的服务
  17. 帮你解剖Python的一个轻量级桌面GUI开发第三方库:Eel,让它体无完肤
  18. MICCAI 2019 Proceeding 论文集part1-6
  19. iphone鉴权,idps,iPhone蓝牙回控,iphone键盘,iphone手机互联,USB外设开发
  20. XmlDocument使用

热门文章

  1. 一个在线编辑可视化LaTex的网址
  2. Matlab 并行计算学习初步
  3. vs2010中臃肿的ipch和sdf文件
  4. 如何实现一个虚拟路由器(2)
  5. 感情危机,朋友的网恋女友要和他闹分手,问我怎么办
  6. 盘点:恋爱一族约会英语词汇
  7. C语言 数组倒序输出数字
  8. 惊!阿里双11数据中心来了一位顶级“刺客”?
  9. python延时一秒_python – 每个请求延迟1秒,不足以达到每小时3600
  10. 每日自动重启 TP-Link 路由器