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. 新公司官网项目优化实践(Vue)

    入职后接手website-html和website-mobile项目,发现项目加载速度不太理想,于是结合自己之前的经验对项目做了优化.此篇文章主要记录这次优化详情. 原始项目:开发环境:website ...

  2. ajax常用请求方式

    1.JAVA @RequestMapping(value = "testAjax") @ResponseBody public Map<String, Object> ...

  3. iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply

    只执行一次  (多用于单例模式) dispatch_once(dispatch_once_t *predicate, dispatch_block_t block); dispatch_once_t ...

  4. 深度增强学习--A3C

    A3C 它会创建多个并行的环境, 让多个拥有副结构的 agent 同时在这些并行环境上更新主结构中的参数. 并行中的 agent 们互不干扰, 而主结构的参数更新受到副结构提交更新的不连续性干扰, 所 ...

  5. 从0x00到0xFF的含义以及二进制到10进制的转换(转)

    转载自: http://www.cnblogs.com/brice/p/5343322.html 对于二进制来说,8位二进制我们称之为一个字节,二进制的表达范围值是从0b00000000-0b1111 ...

  6. Swing的GUI组件得到焦点

    Swing的GUI组件如JButtin,JTextArea,JRadioButton,JComboBox等,可以使用requestFocus()方法来获得焦点.

  7. Java死锁举例

    死锁: 在多线程竞争使用共享资源的情况下.就有可能出现死锁的情况.比方,当一个线程等待还有一个线程所持有的锁时.那个线程又可能在等待第一个线程所持有的锁.此时.这两个线程会陷入无休止的相互等待状态.这 ...

  8. linux中升级jdk的方法

    先查看java的安装情况: # rpm -qa|grep java 卸载: rpm -e --nodeps ******* 然后再安装就可以了

  9. has been modified since the precompiled header地图错误

    添加高德地图的一个错误 has been modified since the precompiled header 解决方案: xcode---product----clean  清理重新编译一下就 ...

  10. STL源代码剖析 容器 stl_map.h

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie map ------------------------------------------ ...