美文网首页ios直播
iOS 直播专题5-推流

iOS 直播专题5-推流

作者: 浪人残风 | 来源:发表于2021-03-23 15:16 被阅读0次

常用的推流协议有:

协议 内容
RTP 实时流传输协议,但不保证服务质量
RTCP RTP数据流协议的一个姐妹协议,为RTP提供服务质量反馈
SRTP & SRTCP RTP和RTCP的安全版本,提供数据加密、消息认证功能
RTSP 控制声音或影像的多媒体数据串流协议
RTMP ADOBE公司播放器与服务器之间多媒体数据传输的开放协议
HLS 苹果公司实现的基于HTTP的流数据传输协议,边下载边播放

RTP

  • 流数据具有数据量大、实时传输等特点,它对网络传输有高带宽、低时延、同步和高可靠性的要求。为了保证好的QoS质量,传输模式、协议栈和应用体系控制等问题就显得非常重要。下面我们先来讨论RTP协议。

  • RTP英文全称Real-time Transport Protocol实时流传输协议。在RFC中定义为RFC3550/RFC3551。RTP由IETF(Internet Engineering Task Force,互联网工程任务组)工作组制定。

  • 该协议主要实现实时数据的传输,它在数据包头中提供编码类型,包中数据的采样时刻、数据包的序号,依据这些信息传输双方可以协商编码类型,可以对数据包进行排序。

  • RTP 本身并没有服务质量保证机制,它依赖于低层服务去实现这一过程。

RTCP

  • RTCP英文全称Real-time Transport Control Protocol,实时传输控制协议,该协议是RTP数据流协议的一个姐妹协议。RTCP为RTP数据流提供信道外控制。RTCP并不传输数据,它和RTP协作将多媒体数据打包和发送。RTCP的主要功能是保证服务质量,为RTP提供服务质量反馈。

SRTP & SRTCP

  • SRTP英文全称为Secure Real-time Transport Protocol安全实时传输协议,该协议是在实时传输协议RTP基础上定义的一个协议,旨在为RTP数据提供加密、消息认证、完整性保证和重放保护。可以参考文档RFC3711。

  • RTCP同样也有一个伴生协议,它被称为安全实时传输控制协议Secure RTCP或SRTCP。在使用实时传输协议或实时传输控制协议时,是应用安全传输协议还是明文传输在数据传输过程中是可以选择的。

RTSP

  • RTSP英文全称Real Time Streaming Protocol实时串流协议,该协议由Real Networks和Netscape共同提出的,它是用来控制流数据串的协议。该协议定义了一对多应用程序如何有效地通过IP网络传送流数据。RTSP提供了一个可扩展框架,使实时数据,如音视频的受控、点播成为可能。

  • 它允许同时对多个串流控制,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,能容忍网络延迟。详情可以参考文档RFC2326。

RTMP和RTMPS

  • RTMP英文全称Real Time Messaging Protocol实时消息传送协议。它是Adobe Systems公司为Flash播放器和服务器之间流数据传输开发的开放协议。RTMP协议既可以传输AMF格式数据,也可以传输FLV格式数据。

  • RTMP协议有三个分支,
    第一种是工作在TCP协议上的明文传输,它使用的端口是1935;
    第二种是RTMPT,RTMPT被封装在HTTP请求之中,可以穿越防火墙进行传输;
    第三种是RTMPS,它也是封装在HTTP之中,不过与RTMPT不同的是,它使用HTTPS安全连接,可以保证传输的安全。

  • 目前,大多数互联网数据流传输使用该协议。

HLS

  • HLS英文全称HTTP Live Streaming在线流传输协议,该协议是由美国苹果公司实现的基于HTTP的流数据传输协议,可以实现流媒体的直播和点播。该协议主要为iOS系统服务。

  • HLS实际上并不是真正的实时流协议,HLS协议在服务器端将数据流存储为连续的、短时长的MPEG-TS格式文件,客户端不断下载并解析播放这些小文件从而实现实时流效果。可以认为,HLS是以点播流技术方式来实现实时流的协议。这样的缺点是延时高。

RTMP VC HLS

  • RTMP是APP中最常用的数据流传输协议,它可以做到低延时。RTMP协议进行数据传输时,它将一整条数据流封装成FLV通过HTTP打包、TCP长连接分发出去,在服务器端不产生落地文件,延时通常为 1至3秒,远超HLS。

  • HLS协议通过切片传输数据,边下载边传输,所以传输延时要比RTMP长。但是,HLS基于HTTP/80 传输,很少会被防火墙拦下。HLS基于无状态协议(HTTP)支持平滑扩展,RTMP对视频服务器进行平滑扩展困难。

  • 做APP数据流时一般会选择RTMP而不是HLS,特殊情况是微信端不支持RTMP,所以HLS表现良好。

这里代码主要介绍RTMP流媒体协议-推流

rtmp创建连接过程:


image.png

连接代码:

- (NSInteger)RTMP264_Connect:(char *)push_url {
    //由于摄像头的timestamp是一直在累加,需要每次得到相对时间戳
    //分配与初始化
    _rtmp = PILI_RTMP_Alloc();
    PILI_RTMP_Init(_rtmp);

    //设置URL
    if (PILI_RTMP_SetupURL(_rtmp, push_url, &_error) == FALSE) {
        //log(LOG_ERR, "RTMP_SetupURL() failed!");
        goto Failed;
    }

    _rtmp->m_errorCallback = RTMPErrorCallback;
    _rtmp->m_connCallback = ConnectionTimeCallback;
    _rtmp->m_userData = (__bridge void *)self;
    _rtmp->m_msgCounter = 1;
    _rtmp->Link.timeout = RTMP_RECEIVE_TIMEOUT;
    
    //设置可写,即发布流,这个函数必须在连接前使用,否则无效
    PILI_RTMP_EnableWrite(_rtmp);

    //连接服务器
    if (PILI_RTMP_Connect(_rtmp, NULL, &_error) == FALSE) {
        goto Failed;
    }

    //连接流
    if (PILI_RTMP_ConnectStream(_rtmp, 0, &_error) == FALSE) {
        goto Failed;
    }

    if (self.delegate && [self.delegate respondsToSelector:@selector(socketStatus:status:)]) {
        [self.delegate socketStatus:self status:LFLiveStart];
    }

    [self sendMetaData];

    _isConnected = YES;
    _isConnecting = NO;
    _isReconnecting = NO;
    _isSending = NO;
    return 0;

Failed:
    PILI_RTMP_Close(_rtmp, &_error);
    PILI_RTMP_Free(_rtmp);
    _rtmp = NULL;
    [self reconnect];
    return -1;
}

音视频编码后上传数据:

#pragma mark -- EncoderDelegate
- (void)audioEncoder:(nullable id<WSAudioEncoding>)encoder audioFrame:(nullable WSAudioFrame *)frame {
    // 上传  时间戳对齐
    if (self.uploading){
        self.hasCaptureAudio = YES;
        if(self.AVAlignment) [self pushSendBuffer:frame];
    }
}

- (void)videoEncoder:(nullable id<WSVideoEncoding>)encoder videoFrame:(nullable WSVideoFrame *)frame {
    // 上传 时间戳对齐
    if (self.uploading){
        if(frame.isKeyFrame && self.hasCaptureAudio) self.hasKeyFrameVideo = YES;
        if(self.AVAlignment) [self pushSendBuffer:frame];
    }
}

项目源码下载

相关文章

  • iOS 直播专题5-推流

    常用的推流协议有: 协议内容RTP实时流传输协议,但不保证服务质量RTCPRTP数据流协议的一个姐妹协议,为RTP...

  • Demo

    IOS视频直播 + 推流实现 采用开源框架ijkplayer 以及LFLiveKit实现推流,主要完善关注,分享和登录

  • iOS 直播 —— 推流

    推流,就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器。 推流前的工作:采集,处理,编码压缩 推流中做...

  • iOS 直播 —— 推流

    *推流,就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器。*推流前的工作:采集,处理,编码压缩*推流中...

  • iOS 直播 —— 推流

    推流,就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器。 推流前的工作:采集,处理,编码压缩 推流中做...

  • iOS直播推流实现-推流

    将最近学习的直播推流技术做个笔记。iOS推流的主要流程如下: 视频音频采集[https://www.jianshu...

  • 直播---iOS直播推流/拉流

    工作空闲之余, 闲来无事, 弄了个直播的项目, 基本上主流的功能都有了... 直播推流(主播端直播/美颜/切换摄...

  • iOS直播推流实现-采集

    将最近学习的直播推流技术做个笔记。iOS推流的主要流程如下: 视频音频采集[https://www.jianshu...

  • iOS直播推流实现-音视频编码

    将最近学习的直播推流技术做个笔记。iOS推流的主要流程如下: 视频音频采集[https://www.jianshu...

  • iOS直播推流实现-滤镜

    将最近学习的直播推流技术做个笔记。iOS推流的主要流程如下: 视频音频采集[https://www.jianshu...

网友评论

    本文标题:iOS 直播专题5-推流

    本文链接:https://www.haomeiwen.com/subject/kfuwcltx.html