热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一次RTMP的实践

之前在理解音视频的过程中学习了落影的文集,能够理解直播传输的每个部分,从摄像头获取视频,麦克风获取音频,视频硬编码为H264

之前在理解音视频的过程中
学习了落影的文集,能够理解直播传输的每个部分,
从摄像头获取视频,麦克风获取音频,视频硬编码为H264,音频硬编码为AAC
再推流到服务器去,服务器有推流使用的协议,推流需要按照协议来推
播放端从服务器拉流,拉流也要遵照服务器的协议啦进行拉流。拉流下来的
数据是H264 和aac 硬解码为 一帧一帧的数据用openGL绘制出来,aac的音频
转换为pcm 然后放入音频缓冲中播放

文集中主要是对这些过程进行了一一分解。转换也只是转换为文件。或者再把文件转换为流,真实的直播过程是一边转 一边传输,其实要求的是 流的转换与展示。于是又找了摄像头捕捉,转换为H264,转换成帧的时候就直接传出来 通过OPENGL绘制在视图上

然后就是需要考虑无音频 有视频 音频和视频都有的时候。音视频同步的问题。人听到音频一般都是连续不断的。所以都会以音频为主,视频为辅,音频接收到数据的时候,把时间戳传给视频播放层,视频播放数据的时间戳小于或者等于音频时间戳的部分,就正常播放,其他就不做操作。保证视频和音频对的上。当视频数据缓冲大于30帧的时候,一直没有收到音频的代理回应,就认为没有音频。将时间戳置空,就会播放无音频的处理。无音频情况下,是不需要视频时间戳等待的,就拿到一帧buffer 就传给openGL的View,就能够实时显示了。等到再接收到音频数据,就又会进入音视频同步的状态。这部分是公司的经验

除此之外。视频的推拉流也有许多协议。比如TUTK的方案,还有直播流标准的RTMP/HLS方案,像tutk的协议是C写的,拿到的数据是H264 的buffer 和pcm。
就直接解析播放的部分即可, HLS 是苹果的点播技术,因为分片的原因和HTTP一个通道。不会被墙。RTMP则是广泛应用的直播技术方案,是Adobe公司提供的。但是Adobe公司并没有完全开源协议。

然后我就想尝试推流一下,结果很难找到相关文章。
后来找到了雷神的文章。ffmpeg的ios编译是网上随便找的,集成好了不要忘了包含头文件就可以了。然后就是雷神的文章主要有rtmp的推流部分,所以就尝试了集成进去,也能成功。只要关注最下面的oc代码,其他的不是很重要。RTMp的本地服务器的搭建,参考的是一篇简书的文章。

目前ios端的大部分应用都是采用的第三方来做这件事。LFLiveKit.(推流、硬编、软编) + HLS/RTMP/RTSP(协议)+ijkplayer(拉流-硬解、软解、播放)+GPUImage(美颜)

于是推流就变成了加一行推流网址的事,拉流也变成了加一行网址的事情,美颜也是一件美颜化的,这样不是不好,可以让程序员更多的功夫花费在业务逻辑上,去写送个礼物,刷个弹幕,来个特效什么的。但这样的弊端也很明显,就是无法了解直播的原理和本质。像 LFLiveKit.和ijkplayer 都是需要编译的 里面还包含了ffmpeg,还有看不见源码的静态库,要是公司不采用这套方案,要你自己写其中的一部分,就只能GG 了。还有一些要优化的细节,要怎么处理,那也只能GG了。

所以掌握并理解直播的整个流程才是最关键的。硬解也好,软解也好,都要自己去调,自己去试,掌握了传输的话,换协议也能做。不然就始终只能做一个api调用者罢了。

拉流部分我找了挺久也没找到,相关文章也没看到。后来在github上翻了挺久,发现了这篇全开源的的rtmp流源码,还有他的文章博客,确实是完全开源的,从推流到拉流都是全的。我试了一下把流推到本地服务器并用VLC播放完全没问题,然后拉了他自带的视频,也是非常出彩。
后续就研究一下他的代码,逐字逐句的分析他的代码,争取尽快掌握这些内容。


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 不可或缺的Windows管理工具有哪些呢?
      1win10管理工具。Keepass一般的IT管理员都要维护大量的密码,并保证它们的准确性,这对于他们来说确实是一个艰巨的任务。Keepass就是为此 ... [详细]
  • 用c语言实现线画、填充图元生成算法多边形_【游戏场景剔除】剔除算法综述...
    之前在做场景优化的过程中,看了不少论文和博客阐述不同剔除算法的原理和过程,自己参照着算法去实现了Hiz和软件剔除。一直想写一篇关于剔除算法的综述 ... [详细]
  • 说明:主要是基于ghostyu网友整理的《 armmini2440基于v4l2ffmpegx264的视频远程监控》。自己做了一遍,遇到不少问题,就整理记录下来。 1、平台硬件:ar ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • ffmpeg  spydroid jrtplib
    2019独角兽企业重金招聘Python工程师标准手机上采用Spydroid程序。https:github.comfyhertzspydroid-ipcamera先用libcu ... [详细]
author-avatar
新起点新娘妆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有