音视频开发
文章平均质量分 88
普通网友
这个作者很懒,什么都没留下…
展开
-
WebRTC实现简单音视频通话功能
本文介绍如何基于WebRTC快速实现一个简单的实时音视频通话。在开始之前,您可以先了解一些实时音视频推拉流相关的基础概念:流:一组按指定编码格式封装的音视频数据内容。一个流可以包含几个轨道,比如视频和音频轨道。推流:把采集阶段封包好的音视频数据流推送到 ZEGO 实时音视频云的过程。拉流:从 ZEGO 实时音视频云将已有音视频数据流拉取播放的过程。房间:是 ZEGO 提供的音视频空间服务,用于组织用户群,同一房间内的用户可以互相收发实时音视频及消息。原创 2023-03-27 20:21:48 · 1661 阅读 · 0 评论 -
WebRTC手记之本地视频采集
WebRTC创建了一个VideoTrack实现VideoTrackInterface接口,在此之前我一直有个疑问,VideoTrackInterface对外暴露的视频输出接口是VideoRendererInterface,而视频源接口VideoSourceInterface对外暴露的视频输出接口是VideoRenderer,两套接口是如何适配的。这部分不打算细说,如果细说就很可能混淆到目前为止建立的仅有的一点点概念了,本节主要是介绍的是Chromium对WebRTC视频采集接口的定制。原创 2023-03-27 17:42:50 · 671 阅读 · 0 评论 -
HTML躬行记(2)——WebRTC基础实践
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,在 2011 年由 Google 提出,经过 10 年的发展,W3C 于 2021 年正式发布 WebRTC 1.0 标准。WebRTC 标准概括介绍了两种不同的技术:媒体捕获设备和点对点连接(P2P,Peer-to-Peer),可让用户无需安装任何插件或第三方软件的情况下,实现共享桌面、文件传输、视频直播等功能。下图是给出的一张 WebRTC 整体架构设计图:紫色部分是前端开发所使用的 API。原创 2023-03-27 17:41:49 · 287 阅读 · 0 评论 -
HTML躬行记(4)——Web音视频基础
一个原始视频,若没有编码,则体积会非常大。假设图的分辨率是 1920*1080,帧率为 30,每像素占 24b,那没张图占 6.22MB左右,1 秒的视频大小是 186.6MB左右,1 分钟就是 11G了。M3U8 是使用 HLS 协议格式的基础,文件内容是一个播放列表(Playlist),采用 UTF-8 编码,记录了一些列媒体片段资源,顺序播放片段即可完整展示资源,如下所示。音频格式是指要在计算机内播放或处理的音频文件的格式,是对声音文件进行数、模转换的过程,常见的有 MP3、WAV、AAC 等。原创 2023-03-27 17:03:12 · 662 阅读 · 0 评论 -
HTML躬行记(3)——WebRTC视频通话
WebRTC 在创建点对点(P2P)的连接之前,会先通过信令服务器交换两端的 SDP 和 ICE Candidate,取两者的交集,决定最终的音视频参数、传输协议、NAT 打洞方式等信息。在完成媒体协商,并且两端网络连通之后,就可以开始传输数据了。本文示例代码已上传至,有需要的可以随意下载。原创 2023-03-27 16:57:41 · 224 阅读 · 0 评论 -
iOS开发:通过第三方分析工具对dSYM文件进行分析
4、在友盟工作台里面创建新建app应用之后,如果没有app里面没有集成友盟的sdk,会提示“未集成”,点击app列表对应的右侧的“集成”按钮,进入集成友盟sdk的设置引导步骤界面,此时友盟在你创建app的时候就会生成app对应的appkey,获取到集成友盟U-APM的appkey,然后根据引导提示把友盟的sdk集成在自己的iOS项目工程里面,根据友盟官方集成文档步骤来操作即可,这里不再多说;3.crash 文件内第一行 Incident Identifier 就是该crash文件的 UUID。原创 2023-03-26 15:45:00 · 557 阅读 · 0 评论 -
【如何快速的开发一个完整的iOS直播app】(原理篇)
个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。直播的数据,其实是一组图片,包括I帧、P帧、B帧,当用户第一次观看的时候,会寻找I帧,而播放器会到服务器寻找到最近的I帧反馈给用户。B帧:(双向差别帧)保留的是本帧与前后帧的差别,解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。原创 2023-03-25 21:28:15 · 2140 阅读 · 0 评论 -
iOS完整文件拉流解析解码同步渲染音视频流
首先根据文件地址初始化FFmpeg以实现parse音视频流.这里首先根据文件中实际的音频流数据构造ASBD结构体以初始化音频解码器,然后将解码后的音视频数据分别渲染即可.这里需要注意的是,如果要拉取的文件视频是H.265编码格式的,解码出来的数据的因为含有B帧所以时间戳是乱序的,我们需要借助一个链表对其排序,然后再将排序后的数据渲染到屏幕上.循环接收解码后的音视频数据: int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);原创 2023-03-25 21:16:21 · 552 阅读 · 0 评论 -
iOS: FFmpeg编译和使用问题总结
网上有很多FFmpeg编译配置的资料,大部分都是关于FFmpeg最新的版本(2.0)的,我一开始也想着编写一个2.0版本的,可以放到接手的那个项目中,发现各种问题(无法快进,没有声音),再看一下代码一堆警告,原因很简单,使用的FFMpeg库太新了,很多接口变动了。由于手上没有多少信息,不知道那个项目使用的是哪个版本的FFmpeg库,一点点找,终于知道原来使用的是0.7.x的。FFMpeg作为一个跨平台的库,不同的平台,不同的人的计算机上编译器的路径都可能不尽相同,所以我们需要为编译脚本指定编译器的路径。原创 2023-03-25 21:00:40 · 360 阅读 · 0 评论 -
【发烂渣】iOS - ijkplayer集成【一】
基本上则就可以保证,在功能的开发上,基本能保证功能的一致性,则也可以让用户在使用APP的时候有比较好的使用体验。简答的来说,就是如果需要支持https的视频连接,请使用SSL版本,否则,反之。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。正如刚刚也说,ijkPlayer是基于FFMpeg进行封装的,所以在进行使用ijkPlayer之前,我们需要把核心【FFMpeg】进行编译。原创 2023-03-26 14:15:00 · 609 阅读 · 0 评论 -
基础篇:objective-c与iosSDK
每个类对象内部都有一个retainCount的引用计数,它代表着被引用次数,对象刚被创建时,retainCount为1,调用release方法后此属性减一,减到0时dealloc方法被自动调用,系统进行内存回收操作。协议(protocol):使用这个协议后便要遵守协议,协议要求实现的方法就一定要实现。例如:某个主函数创建了一个autorelease pool,然后又调用了创建了autorelease pool实例的其他方法,根据嵌套的机制,最外层pool实力释放后,他的所有内部pool也将释放。原创 2023-03-25 20:08:50 · 200 阅读 · 0 评论 -
iOS音视频播放指南(三)
如果你取消了一个下载任务,你在程序中删除已经下载的数据。下载完成或者下载任务被取消的时候URLSession:assetDownloadTask:didFinishDownloadingToURL:会被调用。// 如果字典中没有保存mediaSelection,不进行下载。在下载字幕之前,我们需要判断字幕文件是否已经被下载过,只对没有下载过的资源进行下载。App有可能会被系统终止,如果我们还有下载任务,在重新启动的时候需要进行任务恢复。// 如果还有没下载完成的媒体文件。// 5. 恢复状态,下载进度等。原创 2023-03-25 16:28:23 · 199 阅读 · 0 评论 -
iOS音视频播放指南(二)
一般情况下,在用户插入耳机的时候,音频会继续播放,在用户拔出耳机的时候,音频停止播放,这一切都由系统为你自动完成。当你完成后台播放设置以后,如果你播放的是音频文件,你退到后台的时候系统会自动继续播放。但是当你播放的是视频文件,默认情况下进入后台系统会自动停止播放。如果你的App支持后台音频播放,你可能还需要支持远程控制(耳机控制等)以及在锁屏界面的控制。但是当你想还原画中画视频的时候,AVKit在默认情况下会停止视频的播放(系统不知道如何处理你App的用户界面),我们需要自己实现代理来完成视频的恢复。原创 2023-03-25 16:27:15 · 796 阅读 · 0 评论 -
iOS音视频播放指南(一)
可以简单的理解AVAsset提供给我们一套统一的接口用于处理不同格式的视频。AVKit构建在 AVFoundation之上,可以简单的理解使用AVKit能够及其方便的使用系统为你提供的音视频播放界面。// 10秒的第一帧。AVAsset是媒体对象的抽象类 , AVMetadataItem是元数据的抽象类,提供了媒体文件关联的一些元数据,例如电影的标题或专辑的插图。如果你想对视频的播放时间进监听,首先肯定想到的是KVO,但KVO不不适合用来对时间进行监听,因为时间是连续变化的(想象一下KVO一直回调)。原创 2023-03-25 16:26:07 · 2013 阅读 · 0 评论 -
iOS性能新工具detox(一)
则是一款开源的第三方性能分析工具,有别于 Apple 官方的 Instruments 的各个单独的模板,Detox 提供了较为统一的体验,仅在一个看板里就包含了 CPU、内存、FPS 及 Disk Activity 等多种功能,无需测试者像开发者那样具备完备的 iOS 开发能力,就可以去使用 detox 分析 app 的各项性能指标。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。原创 2023-03-24 21:48:56 · 334 阅读 · 0 评论 -
iOS音频篇:使用AVPlayer播放网络音乐
(1) 离线播放:这里并不是指应用不联网,而是指播放本地音频文件,包括先下完完成音频文件再进行播放的情况,这种使用AVFoundation里的AVAudioPlayer可以满足(2) 在线播放:使用AVFoundation的AVPlayer可以满足(3) 在线播放同时存储文件:使用AudioFileStreamer + AudioQueue 可以满足(4) 在线播放且带有音效处理:使用AudioFileStreamer + AudioQueue + 音效模块(系统自带或者自行开发)来满足。原创 2023-03-24 21:24:05 · 2167 阅读 · 0 评论 -
iOS】AVPlayer 播放音视频
在使用 AVPlayer 时需要注意的是,由于播放状态、缓冲状态等是通过 KVO 监控 AVPlayerItem 的 status、loadedTimeRanges 等属性来获得的,在使用 - (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem *)item 切换视频后,当前的 AVPlayerItem 实际上已经被释放掉了,所以一定要及时移除观察者并重新添加,否则会引起崩溃。原创 2023-03-24 21:16:14 · 9587 阅读 · 0 评论 -
iOS视频播放器之ZFPlayer剖析
和AVPlayer一样,直接调用play方法来播放,queue player顺序播放队列中的item,如果想要跳过一个item,播放下一个item,可以调用方法advanceToNextItem。当tolerance=0的时候,framework需要进行大量解码工作,比较耗性能,所以,只有当你必须使用的时候才用这个方法,比如开发一个复杂的多媒体编辑应用,这需要精确的控制。ZFPlayer是对AVPlayer的封装,有人会问它支持什么格式的视频播放,问这个问题的可以自行搜索AVPlayer支持的格式。原创 2023-03-24 21:08:40 · 1373 阅读 · 0 评论 -
iOS解码关于视频中带B帧排序问题
下面是从FFmpeg parse H.265文件得到的时间戳,我们可以看到,parse出来的时间戳总体是递增的,除了第一帧时间戳为0的数据外,剩下的时间戳均以4个一组,每组内时间戳不是递增的,因为解码时我们仍需按照Parse出来的数据送去解码,所以,我们只能对解码后的数据做一个排序,即将每组数据装入一个线性表,然后使用任一一种排序算法对其排序。考虑内存开销,我们每次缓存4帧视频数据,将其放入线性表中,然后使用排序算法对这4帧数据根据pts做一个排序,排好序后即可传给渲染模块将其渲染到屏幕上.原创 2023-03-24 21:07:45 · 247 阅读 · 1 评论 -
IOS 屏幕适配(一)理论篇
自动适配原则上UILabel都是不设置高度的,根据文字内容自动适配高度。《*注意运算顺序 -60.i6PBigModel(-30) 等价于 -(60.i6PBigModel(-30)) 结果为 -(-30) 或者 -60》《*注意运算顺序 -60.i6PBigModel(-30) 等价于 -(60.i6PBigModel(-30)) 结果为 -(-30) 或者 -60》《*注意运算顺序 -60.ipad(-30) 等价于 -(60.ipad(-30)) 结果为 -(-30) 或者 -60》原创 2023-03-23 17:10:30 · 2769 阅读 · 0 评论 -
iOS App后台保活
现象上来看就是隔一段时间,我们再打开App 的时候可以发现,首页的按钮颜色改变了,相应的日志中追加了,调起相关方法的时间记录。此属性的默认值为NO。对于需要下载资源的App,需要后台下载资源,如我们在某App下载资源的时候,我们希望在切换App时候,或者App退出后台后,资源仍然继续下载,这样当我们打开App的时候,资源已经下载好了。NSLog(@"App刷新====================================================================");原创 2023-03-23 14:48:25 · 2422 阅读 · 0 评论 -
iOS 的 Code Signing 体系
因为Provisioning Profile里面是有多张证书的,所以无法确定用哪张证书对应的私钥L用来签名,所以这些证书只能用于判断Mac电脑里有没有符合条件的证书,如果Mac电脑里有多张符合条件的证书,则默认用其中最新的证书里面的私钥L进行签名,这样就可以限制了只有获得符合条件的证书的Mac电脑,才能进行签名。本文会引用一些比较好的文章中的内容和图片,加上一些我个人的理解进行分析,有些内容本文不再重复,有需要的请阅读本文最后的参考文章。准备工作已经完成,现在就可以开始重签名,步骤其实是跟初次签名一样的。原创 2023-03-23 14:37:59 · 352 阅读 · 0 评论 -
IOS技术分享| 互动连麦场景实现
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。互动连麦的场景,演示了如何通过云服务,并配合 anyRTC RTC SDK、anyRTC RTM SDK,快速实现连麦社交的场景。//------------ 客户端推流到 CDN ------------------//------------ RTC 实时互动 ------------------App Store 体验。原创 2023-03-23 14:21:36 · 231 阅读 · 0 评论 -
iOS 音频篇:使用 AVPlayer 播放网络音乐
通常音乐播放并展示到界面上需要我们实现的功能如下:1、(核心)播放器通过一个网络链接播放音乐2、(基本)播放器的常用操作:暂停、播放、上一首、下一首等等3、(基本)监听该音乐的播放进度、获取音乐的总时间、当前播放时间4、(基本)监听改播放器状态: (1)媒体加载状态 (2)数据缓冲状态 (3)播放完毕状态5、(可选)Remote Control控制音乐的播放6、(可选)Now Playing Center展示正在播放的音乐。//本次缓冲的时间范围。原创 2023-03-22 20:58:40 · 1429 阅读 · 0 评论 -
iOS--React Native视频播放器插件
RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。在React Native移动平台项目开发中,除了React Native 提供的封装好的部分插件和原声组建外,在实际的项目中还需要使用到很多其他的插件,比如网络请求、数据库、相机、相册、通讯录、视频播放器、浏览器、蓝牙连接、图片处理、消息推送、地图、统计、埋点等等APP开发中需要用到的功能,都为IDE开发平台提供封装好的插件,以便项目开发使用。原创 2023-03-22 15:55:53 · 586 阅读 · 0 评论 -
iOS短视频播放缓存之道
业务分析,公司APP主业务是电商,短视频作为为电商引流业务,提高APP活跃度的业务模块,同时在APP其他业务功能中也存在视频播放,例如商品详情页面商品介绍,基于此设计之初并不打算将所有的播放业务耦合在一起,因为短视频的播放概率远远大于其他长视频,依次业务需求大致分为2类逻辑,短视频和在线播放,对于短视频统一按照短视频播放模块来执行边播变缓存,而其他的相对比较长一些的视频则直接在线播放也不缓存,此处也不做过多介绍。所有文件命名使用的是视频资源的url md5值保证唯一性。原创 2023-03-22 15:40:20 · 1039 阅读 · 0 评论 -
iOS使用FFmpeg命令行
注意:当前全部改成ffmpeg_cleanup会出现的一些情况,比如执行查看视频信息的命令,这个命令里面没有设置输出路径,原来的代码里走到判断没有输出路径的分支直接调用exit_program就退出了进程,改成调用ffmpeg_cleanup后代码会继续往下走导致一些访问空指针的崩溃,这种个别情况自己再针对进行处理就好了,不过一般使用场景中都会有输入和输出。看到一些文章里说修改cmdutils.c中的exit_program函数,注释掉退出进程的代码,本人实测还是有问题,这行代码前添加重置计数的代码。原创 2023-03-22 15:19:14 · 405 阅读 · 0 评论 -
iOS 音视频ffmpeg入门~编译ffmpeg
如果遇见此问题,如图添加 --disable-audiotoolbox,如有其他问题,可参开。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。ffmpeg-5.1.2、FFmpeg-iOS 、scratch、thin 等这些文件夹。,下载编译脚本文件FFmpeg-iOS-build-script.表示FFmpeg版本,脚本中会根据此版本去下载对应的FFmpeg。原创 2023-03-22 15:14:16 · 333 阅读 · 1 评论 -
iOS编解码入门篇(FFMPEG环境搭建)
目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法, 产出二进制,ELF32 , ELF64 , COFF , Mach - O的( 32和64 ),RDOFF2 ,的Win32和Win64对象的格式, 并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。macOS下使用ffplay,按下s键可单帧播放视频,配合一个显示文字的视频滤镜即可显示当前画面的帧序号,命令示例如下所示。软编解码 | FFmpeg | CPU | 支持 | ------------- |原创 2023-03-22 15:06:32 · 1196 阅读 · 0 评论 -
iOS UI绘制原理
例如,画一条1个像素宽度的直线(1,1)到(1,10),得到的是一条灰色的先。一般来说,如果不调整它们的位置,使它们完全覆盖像素,那么与宽度为偶数的物理像素的宽度相比,奇数个物理像素宽的线显得更浅。在iOS中,当你在屏幕上绘制东西时,图形子系统使用一种叫做反锯齿的技术,在低分辨率的屏幕上近似一个高分辨率的图像。当使用原生绘制列如Quartz,UIKit和Core Animation,绘制坐标西和试图坐标系都是逻辑坐标系(译者注:这里说的逻辑坐标系也就是指的不与设备像素点对应),坐标系数值表示的是。原创 2023-03-21 20:27:19 · 199 阅读 · 0 评论 -
iOS渲染解析(1)持续更新
但是这种情况下,视频控制器在接受到 Vsync 之后,就要将下一帧的位图传入,这意味着整个 CPU+GPU 的渲染流程都要在一瞬间完成,这是明显不现实的。因为 CPU 面临的情况更加复杂,因此从上图中也可以看出,CPU 拥有更多的缓存空间 Cache 以及复杂的控制单元,计算能力并不是 CPU 的主要诉求。如果在电子束开始扫描新的一帧时,位图还没有渲染好,而是在扫描到屏幕中间时才渲染完成,被放入帧缓冲器中 ---- 那么已扫描的部分就是上一帧的画面,而未扫描的部分则会显示新的一帧图像,这就造成屏幕撕裂。原创 2023-03-21 17:35:46 · 264 阅读 · 0 评论 -
iOS视频硬编码技术
这种方法的兼顾了以上两种方法的优点:在图像内容静止时,节省带宽,有Motion发生时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的。通俗地理解,例如一个视频中,前一秒画面跟当前的画面内容相似度很高,那么这两秒的数据是不是可以不用全部保存,只保留一个完整的画面,下一个画面看有哪些地方有变化了记录下来,拿视频去播放的时候就按这个完整的画面和其他有变化的地方把其他画面也恢复出来。软编码:使用CPU进行编码,如常见C/C++代码,编译生成二进制文件,速度相对较慢。原创 2023-03-21 17:32:41 · 740 阅读 · 0 评论 -
中高级 iOS 必备知识点之 RunLoop
最后面那个 _modes,这个是个集合来着,CFMutableSetRef 我们能想到我们自己用的 set 也是一个集合来着,比如 NSMutableSet 也是一个集合,所以这个 _modes 里面是存着一堆的 mode。retVal 这个等于 0,当没有事件处理的时候,RunLoop 就会 sleep 就是类似睡觉,一旦有事件需要处理,比如点击、刷新事件等 process_message 就会去处理这个事件,处理完了继续休息,retVal=0,程序就会一直执行,不会退出,这就是 RunLoop 作用。原创 2023-03-21 15:16:11 · 223 阅读 · 0 评论 -
iOS进阶-Runloop源码探究
可以看到在调用__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__之前调用了__CFRunLoopDoTimer、__CFRunLoopDoTimers、__CFRunLoopRun这三个方法,那就去源码查下看看。可以看到确实是先调用__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__,再调用timer回调函数func(timer,info)。原创 2023-03-21 15:06:16 · 409 阅读 · 0 评论 -
iOS——解密RunLoop原理
当中),通过代码并不难发现其实只有当我们使用线程的方法主动get Runloop时才会在第一次创建该线程的Runloop,同时将它保存在全局的Dictionary中(线程和Runloop二者一一对应),默认情况下线程并不会创建Runloop(主线程的Runloop比较特殊,任何线程创建之前都会保证主线程已经存在Runloop),同时在线程结束的时候也会销毁对应的Runloop。Observer的作用是可以让外部监听RunLoop的运行状态,从而根据不同的时机,做一些操作。所以,我们就有了RunLoop。原创 2023-03-21 14:54:35 · 392 阅读 · 0 评论 -
iOS底层原理 - alloc & init & new 详解
一般在开发中,初始化除了init,还可以使用new,两者本质上并没有什么区别,以下是objc中new的源码实现,通过源码可以得知,new函数中直接调用了callAlloc函数(即alloc中分析的函数),且调用了init函数,所以可以得出new 其实就等价于 [[Person alloc] init]的结论。接下来我们分别看一下这三个函数。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。原创 2023-03-20 22:06:13 · 297 阅读 · 0 评论 -
iOS开发之Runtime常用示例总结
本篇博客的内容是依托于实例的,所以我们在本篇博客中先构建我们的测试类,Runtime将会对该类进行相关的操作。下方就是本篇博客所涉及Demo的目录,上面的RuntimeKit类是讲Runtime常用的功能进行了简单的封装,而下方的TestClass以及相关的类目就是我们Runtime要操作的对象了。下方会对TestClass以及类目中的内容进行详细介绍。下方这几个截图就是我们的测试类TestClass的主要部分,因为TestClass是专门用来测试的类,所以其涉及的内容要尽量的全面。TestClass遵循了原创 2023-03-20 20:35:43 · 542 阅读 · 0 评论 -
快速集成iOS基于RTMP的视频推流
rtmp成了未知指令. 我赶紧Google, 将其中的答案都试了一遍, 这个bug涛声依旧. 最后实在没办法了, brew list查看所有安装的模块, 才发现是自己手动敲命令的时候, 将nginx-full变成了nginx -full.这篇blog是iOS视频直播初窥:的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有很多朋友简信和微博上问我推流这部分怎么实现的. 所以, 我重新集成了RTMP的推流, 合并到了之前的项目中.如图, 找到nginx.conf文件所在位置。原创 2023-03-20 20:26:45 · 416 阅读 · 0 评论 -
ios音视频开发路线及技术点
首先根据文件地址初始化FFmpeg以实现parse音视频流.这里首先根据文件中实际的音频流数据构造ASBD结构体以初始化音频解码器,然后将解码后的音视频数据分别渲染即可.这里需要注意的是,如果要拉取的文件视频是H.265编码格式的,解码出来的数据的因为含有B帧所以时间戳是乱序的,我们需要借助一个链表对其排序,然后再将排序后的数据渲染到屏幕上.:采取主动平滑丢帧的策略,将输入帧率降低到编码器实际输出帧率以上,如实际输出帧率15fps,输入帧率调整成18fps,以降低编码器压力;原创 2023-03-20 20:17:07 · 951 阅读 · 0 评论 -
iOS VideoToolbox 硬编指南
后来我们进行了线下的测试找到了必现的手机,起初怀疑是跟系统版本和机型相关,尝试用相同机型和系统版本都没有复现,说明和系统版本、机型无关,接着我们用 WebRtc demo 进行测试发现输入 30 帧最终丢到了 5 帧,对比和我们使用方式的不同点在于 RealTime 的开启,而在直播 demo 上如果开启 RealTime 也会遇到丢帧问题,通过不断排查最终找到了解决方案。一般码流里面含有B帧的时候才会出现Open-GOP,Open-GOP以一个或多个B帧开始,参考之前GOP的P帧和当前GOP的I帧。原创 2023-03-20 17:53:26 · 480 阅读 · 0 评论