iOS直播-基于RTMP的视频推送

所谓的视频推送就是把摄像头和麦克风捕获到视频和音频推送到直播服务器上.我们这里使用推送协议是RTMP协议. 扩展:腾讯直播平台,阿里直播平台,百度直播平台提供均为RTMP的推流和HLS/RTMP等拉流.
我们使用GDLiveStreaming来实现iOS的端的视频推送

GDLiveStreaming简介

GDLiveStreaming是对开源框架VideoCore简单封装.提供视频录制,推送与存储. 你可以下载GDLiveStreaming源码来学习和研究. 我们这里讲解如何通过GDLiveStreaming实现RTMP的推流

集成GDLiveStreaming步骤

  1. 创建项目
  2. 打开终端cd到项目目录
  3. 执行pod init 生成 Profile文件
  4. target 你的项目名称 doend直接添加
    pod 'GDLiveStreaming', :git => 'https://github.com/goodow/GDLiveStreaming.git'
    pod 'VideoCore', :git => 'https://github.com/goodow/VideoCore.git'
    pod 'glm', :podspec => 'https://raw.githubusercontent.com/goodow/GDLiveStreaming/master/glm.podspec'
  5. 执行 pod install 命名,等待其安装完毕,打开白底的你的名称.xcworkspace文件. 到此GDLiveStreaming安装完毕.

GDLiveStreaming基本使用

  1. 导入如下头文件

    #import <GPUImage/GPUImageVideoCamera.h>
    #import <GPUImage/GPUImageView.h>
    #import <GDLiveStreaming/GDLRawDataOutput.h>
  2. 实现思路
    • 创建视频摄像头
    • 设置摄像头帧率
    • 设置摄像头输出图片的方向
    • 创建用于展示视频的GPUImageView
    • 添加GPUImageView为摄像头的的输出目标
    • 创建GDLRawDataOutput对象
    • 添加数据输出对象为摄像头输出目标
    • 开始捕获视频
    • 开始上传视频
  3. 代码实现
//  1. 创建视频摄像头
self.camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720
cameraPosition:AVCaptureDevicePositionBack];
// 2. 设置摄像头帧率
self.camera.frameRate = 25;
// 3. 设置摄像头输出视频的方向
self.camera.outputImageOrientation = UIInterfaceOrientationPortrait;
// 4.0 创建用于展示视频的GPUImageView
GPUImageView *imageView = [[GPUImageView alloc] init];
imageView.frame = self.view.bounds;
[self.view addSubview:imageView];
// 4.1 添加GPUImageView为摄像头的的输出目标
[self.camera addTarget:imageView];
// 5. 创建原始数据输出对象 GDLRawDataOutput *output = [[GDLRawDataOutput alloc] initWithVideoCamera:self.camera withImageSize:CGSizeMake(720, 1280)]; // 6. 添加数据输出对象为摄像头输出目标
[self.camera addTarget:output]; // 7.开始捕获视频
[self.camera startCameraCapture]; // 8.开始上传视频
[output startUploadStreamWithURL:@"rtmp://192.168.41.35:1935/gzhm" andStre amKey:@"room"];

GDLiveStreaming扩展

  • GPUImageVideoCamera常见用方法
/** 开始捕获
*/
- (void)startCameraCapture;
/** 停止捕获
*/
- (void)stopCameraCapture;
/**暂停捕获
*/
- (void)pauseCameraCapture;
/**恢复捕获
*/
- (void)resumeCameraCapture;
///前置摄像头与后置摄像头切换
- (void)rotateCamera
  • GDLRawDataOutput常见用方法
///开始上传视频流, streamKey是拼接在rtmpUrl后面的路径名称,可以理解为视频的直播中的房间编号.
- (void)startUploadStreamWithURL:(NSString *)rtmpUrl andStreamKey:(NSString *)streamKey;
///停止上传视频流
- (void)stopUploadStream;

iOS直播-基于RTMP的视频推送的更多相关文章

  1. iOS:基于RTMP的视频推流

    iOS基于RTMP的视频推流 一.基本介绍 iOS直播一出世,立马火热的不行,各种直播平台如雨后春笋,正因为如此,也同样带动了直播的技术快速发展,在IT界精通直播技术的猴子可是很值钱的.直播技术涉及的 ...

  2. (转)基于libRTMP的流媒体直播之 AAC、H264 推送

    参考: 1,基于libRTMP的流媒体直播之 AAC.H264 推送 http://billhoo.blog.51cto.com/2337751/1557646

  3. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  4. Android、iOS和Windows Phone中的推送技术

    推送并不是什么新技术,这种技术在互联网时代就已经很流行了.只是随着进入移动互联网时代,推送技术显得更加重要.因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示 ...

  5. Knative 实战:基于 Kafka 实现消息推送

    作者 | 元毅 阿里云智能事业群高级开发工程师 导读:当前在 Knative 中已经提供了对 Kafka 事件源的支持,那么如何基于 Kafka 实现消息推送呢?本文作者将以阿里云 Kafka 产品为 ...

  6. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

  7. 基于Web的数据推送技术(转)

    基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...

  8. Android 基于Netty的消息推送方案之对象的传递(四)

    在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...

  9. Android 基于Netty的消息推送方案之字符串的接收和发送(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

随机推荐

  1. ylbtech-LanguageSamples-Indexers_2(索引器)

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Indexers_2(索引器) 1.A,示例(Sample) 返回顶部 Indexers ...

  2. Linux中文乱码问题终极解决方法

    方法一: 修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030该文件在用户目录下,对于其他用户,也必须相应修改该文件. 使用该方法时putty能显示中 ...

  3. flask上传图片或者文件

    在flask unittest自动化测试中如何上传图片或者文件 import StringIO picture = StringIO.StringIO(open('/home/admin/Pictur ...

  4. [Python爬虫] Selenium +phantomjs 模拟下拉滚动条

    在爬虫中,有时会遇到这种情况,数据的展示是不是一页一页的,而是通过不断的下拉滚动条来加载数据.例如一点咨询(http://www.yidianzixun.com/)和微博(在未登录的状态下:http: ...

  5. Java中PriorityQueue详解

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  6. [Algorithm] Fibonacci problem by using Dynamic programming

    vThere are three ways to solve Fibonacci problem Recursion Memoize Bottom-up 'First Recursion approa ...

  7. Node.js mzitu图片批量下载爬虫1.00

    又攻下一座山头. //====================================================== // mzitu图片批量下载爬虫1.00 // 2017年11月19 ...

  8. MyEclipse 集成 Gradle开发环境

    一.上Grandle官网下载Gradle,地址:http://www.gradle.org/downloads 如果只是运行只下载gradle-2.6-bin.zip 就可以了,如果为了扩展开发的话就 ...

  9. 解决:mysql5.7 timestamp默认值‘0000-00-00 00:00:00’报错

    mysql5.7 运行sql脚本时报错 - Invalid default value for 'UPDATE_TIME' [Err] CREATE TABLE `V_TBL_AMOUNT_REASO ...

  10. AWS RDS mysql无法连接的问题

    rds创建后,无法连接mysql 检查安全组规则是否配置了 1. 2. 这样你的EC2就可以访问了.如果还不行,检查数据库是否和EC2在同一 VPC内. 官方文档:https://docs.amazo ...