首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HLS音频流后台超时恢复播放失败(AVPlayer拒绝缓冲)

基础概念

HLS(HTTP Live Streaming)是一种由苹果公司开发的流媒体传输协议,主要用于实时或点播的流媒体传输。它通过将视频和音频数据分割成小的HTTP文件,并下载播放,从而实现流畅的播放体验,尤其是在网络条件不佳的情况下。

AVPlayer是iOS和macOS平台上用于播放音频和视频的高级媒体播放器。它可以处理多种媒体格式,包括HLS流。

相关优势

  1. 自适应比特率:HLS支持自适应比特率流,可以根据网络条件自动调整视频质量,保证流畅播放。
  2. 跨平台兼容性:HLS是一种基于HTTP的协议,可以在多种设备和平台上播放。
  3. 可靠性:HLS通过分段传输数据,即使部分数据丢失,也可以从断点继续播放。

类型

HLS流主要分为两种类型:

  1. 直播流(Live Streaming):实时传输的流媒体数据。
  2. 点播流(On-Demand Streaming):预先录制好的视频和音频数据。

应用场景

HLS广泛应用于在线视频、直播、教育、会议等领域。

问题分析

HLS音频流后台超时恢复播放失败(AVPlayer拒绝缓冲),通常是由于以下原因导致的:

  1. 网络问题:网络不稳定或带宽不足,导致数据传输中断或延迟。
  2. 服务器问题:服务器响应超时或数据传输中断。
  3. 客户端问题:AVPlayer缓冲区设置不当或处理逻辑错误。

解决方案

  1. 检查网络连接
    • 确保设备连接到稳定的网络。
    • 使用网络诊断工具检查网络延迟和丢包情况。
  • 优化服务器配置
    • 增加服务器带宽,确保数据传输的稳定性。
    • 配置服务器超时时间,避免长时间等待响应。
  • 调整AVPlayer缓冲区设置
    • 增加缓冲区大小,确保有足够的数据进行播放。
    • 设置合理的缓冲策略,避免频繁的缓冲和播放中断。
  • 实现断点续传
    • 在客户端记录播放进度,当网络恢复后,从断点继续播放。

示例代码

以下是一个简单的示例代码,展示如何在iOS中使用AVPlayer播放HLS流,并处理缓冲问题:

代码语言:txt
复制
import AVFoundation

class HLSPlayerViewController: UIViewController {
    var player: AVPlayer?
    var playerLayer: AVPlayerLayer?

    override func viewDidLoad() {
        super.viewDidLoad()
        
        guard let url = URL(string: "https://example.com/path/to/your/stream.m3u8") else { return }
        
        let playerItem = AVPlayerItem(url: url)
        player = AVPlayer(playerItem: playerItem)
        playerLayer = AVPlayerLayer(player: player)
        playerLayer?.frame = view.bounds
        view.layer.addSublayer(playerLayer!)
        
        player?.play()
        
        // 监听缓冲状态
        NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEndTime), name: .AVPlayerItemDidPlayToEndTime, object: playerItem)
    }
    
    @objc func playerItemDidPlayToEndTime(notification: Notification) {
        if let playerItem = notification.object as? AVPlayerItem {
            playerItem.seek(to: .zero, completionHandler: { [weak self] _ in
                self?.player?.play()
            })
        }
    }
    
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}

参考链接

通过以上方法,可以有效解决HLS音频流后台超时恢复播放失败的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何像抖音直播一样,从 App 直播间到桌面画中画实现画面无缝切换?丨有问有答

目前 App 内使用腾讯云的播放器播放 flv 的流,切到桌面画中画小窗时必须使用系统的 AVPictureInPictureController + AVPlayer,AVPlayer 不支持 flv...,所以只能播放 hls 的流。...在 App 的直播间依然使用腾讯云的播放器播放 flv 的流,同时在 flv 的首帧渲染成功后,再拉起一个 AVPlayer 来播放一路占位的 hls 流(可以静音、全黑、小尺寸画面)。...需要注意的是: 1)App 要开启后台播放音频,继续播放 flv 流的声音; 2)支持后台渲染的能力,支持退后台后,旁路渲染 view 能平滑渲染 flv 流,这需要设置好 MPNowPlayingInfoCenter.nowPlayingInfo...如果 hls 那路流一直不出问题还好,画中画始终依赖 flv 的流状态控制 UI 就好,但是如果 hls 那路流出错导致 AVPlayer 报错就会直接影响到画中画的状态。

1.8K30

基于 HTTP 的低延迟流媒体播放器的性能

我们的实验捕获并报告了几个性能指标,例如平均流比特率、下载的媒体数据量、流延迟以及缓冲和流切换统计数据。这些结果随后用于描述观察到的 LL-HLS 和基于 LL-DASH 的播放器的性能差异。...低延迟自适应算法的其他变体可以在 LL-HLS 流播放器中找到,例如 HLS.js、Shaka 播放器 和 Apple 的 AVPlayer。...当第一个主要带宽波动发生时(即图 3 中的时间间隔 [250 - 340]),AVPlayer 遇到缓冲区变空的情况,并且在重新缓冲和恢复播放后无法保持低延迟。...在流比特率方面(参见图 4),我们注意到 Shaka 播放器在 10 分钟的会话中达到了最高的平均值 (1228 kbps),其次是 AVPlayer (1136 kbps) 和 HLS.js (849...HLS.js 和 Shaka 播放器更接近流的实时边缘,因此,它们比 AVPlayer 更容易重新缓冲(HLS.js 为 36 次,Shaka 播放器为 12 次)。

8.8K40
  • HarmonyOS 开发实践——基于AVPlayer的视频播放

    当使用setVolume()调节播放音量后,如果setVolume操作成功,将上报该事件。bitrateDone响应API调用,用于HLS协议流,监听setBitrate()请求完成情况。...availableBitrates用于HLS协议流,监听HLS资源的可选bitrates,用于setBitrate()。bufferingUpdate用于网络播放,监听网络播放缓冲信息。...videoSizeChange用于视频播放,监听视频播放的宽高信息,可用于调整窗口大小、比例。audioInterrupt监听音频焦点切换信息,搭配属性audioInterruptMode使用。...如果当前设备存在多个媒体正在播放,音频焦点被切换(即播放其他媒体如通话等)时将上报该事件,应用可以及时处理。...('AVPlayer state initialized called.');        avPlayer.surfaceId = this.surfaceID; // 设置显示画面,当播放的资源为纯音频时无需设置

    26920

    HarmonyOS 开发实践 —— 基于AVPlayer音频后台播放

    场景一:使用 avPlayer 进行后台播放音乐想要实现应用后台播放,那么接入AVSession是必须的,否则业务的正常功能会同时受到限制,也必须有 BackgroundTasks Kit (后台任务管理...当其他应用创建的音频流与该应用的音频流并发播放时,才会触发音频打断策略的管控。...独立焦点模式(INDEPENDENT_MODE):应用创建的每一个音频流均会独立拥有一个音频焦点,当多个音频流并发播放时,会触发音频打断策略的管控。...:      // 此分支表示系统已将音频流停止(永久失去焦点),为保持状态一致,应用需切换至音频暂停状态      // 永久失去焦点:后续不会再收到任何音频打断事件,若想恢复播放,需要用户主动触发。...:      // 此分支表示系统已将音频音量恢复正常,为保持状态一致,应用需切换至正常音量播放状态        isDucked = false; // 此句为简化处理,代表应用切换至正常音量播放状态的若干操作

    18810

    直播推流优化丨音视频工业实战

    在推流端发生断流,在各级缓冲没有消耗完音视频数据之前,如果能恢复数据生产,还是有希望避免播放端出现断播或卡顿的。这样一来,实现推流断流重连还是很有必要的。...对于这种情况,可以支持退后台继续推流,不过有几点需要注意: 1)退后台如果继续采集音频可能涉及到隐私问题。对于这个问题,可以退后台停止采集,但是保持推静音音频数据。...当然,如果产品上可以退后台继续采集音频,就使用系统的能力持续采集就好了。 2)退后台无法继续采集视频,这时候如果不推视频数据,那么可能会引起 CDN 和播放器的不兼容的问题。...3)由于退后台时间较长后,App 的网络请求可能被系统中断,甚至 App 可能被杀死。对于这个问题,可以尝试一些后台保活的方案,比如 iOS 可以在退后台后播放静音音频来保活。...主流直播技术延时 HLS:延时主要来自编码解码时产生延时、网络延时、CDN 分发延时。由于它是切片协议,延时分两大块,一个是服务端有切片缓冲延时,另一个是在播放端防抖缓冲会有延时。

    1.3K20

    编码,打包,CDN交付和视频播放器端的延迟优化

    就编码阶梯而言,建议在阶梯的下端添加一个轻量级流,切片的大小比通常的要小一些,以便在困难网络条件下,移动设备仍然能够访问流。...视频播放器通常经过优化,可为最终用户提供不间断的播放,这意味着播放器会优先考虑缓冲区长度而不是降低流延迟。但并不意味着完全缺乏启用低延迟的选项,而是在每个播放器的初始化设置中默认不启用这些选项。...实时边缘时间粘性(Live Edge-Time stickiness):即使播放器以预期延迟开始播放,也可能在重新缓冲的情况下,在重新缓冲之前的最后已知时刻恢复播放。...这通常是默认情况下在所有播放器中发生的情况,但是一些播放器提供了在空缓冲区后重新加载播放列表/清单的选项(当音频或视频轨道的缓冲区变为零秒并且卡在其上时),或者及时向前寻求播放并且同时关注实时边缘时间。...对不可用切片的恢复能力(Resilience to segments unavailability):可能是某个特定的媒体切片根本不可用,或者与播放器的期望相比有一些延迟。

    2K40

    企鹅电竞直播关键技术大揭秘

    (企鹅电竞Android终端目前就是采用FLV) HLS HTTP LiveStreaming (HTTP协议传输)---常见H5页面播放视频都采用HLS协议; HLS是苹果推出的解决方案,将视频分成...推流:主播将本地采集的视频源和音频源通过编码器编码后,推送到后台推流服务器(腾讯云),目前企鹅电竞推流端,Android和IOS端使用腾讯云RTMP推流,PC端使用OBS推流,所以经常也称为“RTMP发布...腾讯云后台:腾讯云后台收到上传的流(upload流)后,后台会对该流进行转码操作,比如转码为H265/h264的流,转码后的流也被称为转码流,转码流再经过DC源的分发,分发扩散到CDN中,最终提供用户播放拉流使用...(这部分内容在推流出流类型章节详细描述) 播放端:用户在Android、IOS、PC、H5、游戏内置页面等渠道拉流后,进行硬解/软解码,目前企鹅电竞主流播放协议移动终端使用FLV、H5页面使用HLS两种播放协议...创建直播间:推流开始前,先要给主播创建一个直播间,否则创建直播间失败,推流也会终止; 第七步:开始推流:以上步骤完成,及进入推流状态,完成主播的一次直播请求;以上任何一个步骤失败,开播则不能成功。

    5.2K30

    新知 | 流媒体源流常见问题与延迟分析处理

    播放端常见的问题主要集中在播放失败,播放没声音,音画不同步或者画面卡住不动,出现延迟很高等等。造成这些问题的常见原因有几类,这里结合案例展开讲一下。...在这个案例中,视频的GOP过大引发CDN下发的缓存过长,播放器缓存过多,导致延迟过大。 右边的案例中,客户原始流地址播放是失败的,但转码流可以正常播放。分析了这个客户的播放文件,发现它下发没有关键帧。...第四类,音视频内容存在设备兼容性问题 左边的案例中,内容在其他平台,比如说PC、Web、安卓等播放都是正常的,但是在iOS上的HLS流播放不了。...例如客户端发送了一段数据之后,等待服务器和ACK,如果超时200毫秒还没收到,那么下一次客户端会进行重试。但是如果下一次的ACK再次丢失,超时时间有可能会扩大到400毫秒。...当RTT较长时,快直播可以提高FEC的冗余,使得不需要借助重传,直接通过冗余的数据包就可以进行恢复。另外通过带宽估计算法动态调整jitterbuffer,使得缓冲更适应当前网络的状态。

    1.8K30

    【Android 高性能音频】AAudio 状态机 ( 创建 | 打开 Open | 开始 Started | 暂停 Paused | 刷写 Flushed | 停止 Stopped | 关闭 )

    : // 设置音频格式 AAudioStreamBuilder_setFormat(builder, sampleFormat_); 设置 AAudio 音频流缓冲区大小 : 这里的缓冲区是播放器的缓冲区...状态下 , 如果调用 AAudioStream_requestPause() 方法 , 就会进入该状态 ; 此时播放器是暂停的 , 可以随时恢复播放 , 调用 AAudioStream_requestStart...() 方法 , 可以恢复播放 , 进入 Started 状态 ; ④ Flushed : 刷写状态 , 在 Paused 状态下 , 调用 AAudioStream_requestFlush() 方法..., 就会进入该状态 , 这是将播放器缓冲区中的数据播放完毕 , 可以清空缓冲区 ; 调用 AAudioStream_requestStart() 方法 , 可以恢复播放 , 进入 Started 状态...: 如果成功 , 返回 AAUDIO_OK , 如果失败会返回对应的错误码 ; IV .

    76020

    如何快速搭建完整的视频直播系统?| 码云周刊第 69 期

    项目简介:HTML5 播放器、M3U8 直播和点播、RTMP 直播、低延迟、推流/播流地址鉴权、优化浏览器兼容性,HLS+扩展。...项目地址:Tinywan/html5-dash-hls-rtmp 3、项目名称:yjPlay ?...旧版实现的视频推流功能。 自定义介绍字幕、歌词滚动显示,同时滚动显示翻译歌词、切歌。 显示排队播放歌曲,渲染视频。 通过弹幕获取实时cpu温度。 闲时随机播放预留歌曲。 播放音乐时背景图片随机选择。...项目简介:SGPlayer 是一款基于 AVPlayer、FFmpeg 的媒体资源播放器框架。...支持 RTMP、RTSP 等直播流。 支持选择音频轨道。 支持控制音频输出音量。 支持无损视频截图。 支持近所有常用媒体格式。 极简的事件通知机制。 项目地址:Single/SGPlayer

    2.4K20

    HLS 协议:直播回放首选这个协议?丨音视频基础

    对于 HLS 直播,相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件(如 MPEG-TS...格式),客户端不断的下载并播放这些小文件。...HLS 作为苹果公司提出的协议,在 iOS 客户端上得到了很好的支持,比如 AVPlayer 和 Safari 都支持对 HLS 流媒体的播放;再加上 M3U8/TS 封装格式可以在直播中持续处理和存储流媒体数据...HLS 协议的整体框架如下图所示: HLS 协议涉及到 3 个部分: 1)服务端组件 服务端组件主要的职责是处理上传链路的媒体流,并对齐进行编码和格式封装,为资源分发做好准备。...在典型的 HLS 协议实现中,一般是采集音频和视频输入,将它们编码为 H.264 和 AAC 格式,最终经过服务端组件处理成 MPEG-2 的传输流。

    1.5K20

    HLS

    RTMP,实时消息传输协议,Real Time Messaging Protocol,是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。...HLS 的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的 ts 文件,同时服务器会建立一个 m3u8 的索引文件来维护最新几个 ts 片段的索引...相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断的下载并播放这些小文件。...HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。...正在上传…重新上传取消 RTMP 相对于 HLS 来说,采用 RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。

    4K41

    你问我答 | 云直播CSS(2021年5月-7月)

    目前混流后台暂此支持2000及以下的分辨率,遇到 -10021 报错时,一般是混流输入某条流分辨率宽或高超过2000。可以使用 FFplay 播放直播流,查看源流分辨率,是否超过2000。...编码/解码的延时主要来自于编解码器的 buffer 控制策略,一般是由 QoS 策略来控制,当编码器中数据产生后,如果协议栈不能及时把数据发送出去,网络产生了阻塞,会在推流端的缓冲空间里产生累积,从而导致推流的延时增加...,同样的,播放器如果没有收到足够多的数据给解码器解码,也会导致解码器的缓冲空间一直无法填满,从而产生渲染延时增加。...目前海外播放支持 HTTP-FLV、HLS、RTMP、WebRTC 播放。对于播放异常的问题,可以通过以下方式逐步排查: ping 域名是否能通? 如果不通,检查当前的网络环境。...如果非200,区分不同的失败情况,403通常是播放鉴权失败,检查防盗链计算格式是否符合要求,404通常是播放的流不在平台上,检查推流是否正常。

    78140

    视频直播基础知识

    Rtmp协议,proxy回复推流端ack失败 Proxy send timeout Send() timeout Send超时,内部异常 Proxy send() return error Send(...,动态调整码率 播放端: -- oc多吐数据,播放端多缓冲数据,播放端缓冲的数据越多,在播放过程中卡顿越少,但是缓冲数据多了,会引起较大的延迟,因此需要合理设置缓冲区大小。...大部分播放器都是拿到一个完整的GOP后才能解码播放,基于FFmpeg移植的播放器甚至需要等待音画时间戳同步后才能播放(如果一个直播里边没有音频只有视频相当于要等待音频超时后才能播放画面)。...例如,播放端临时断网了,但又快速恢复了,针对这种场景,播放端如果不做容错处理,很难不出现黑屏或是重新加载播放的现象。...,如果超时时间设置的比较短,就会出现播放失败的现象,遇到这种现象,多试几次就可以了。

    8K93

    鸿蒙开发实战案例:视频悬浮窗

    介绍本示例主要介绍视频小窗口播放场景,利用媒体的AVPlayer实现视频播放以及相关操作,利用PiPWindow开启悬浮窗从而实现小窗口播放视频。效果图预览使用说明等待视频加载完成,视频会自动播放。...将应用隐藏到后台,自动拉起悬浮窗继续播放视频。点击悬浮窗恢复图标,恢复到原始播放界面,视频继续正常播放。原始播放界面视频暂停不会拉起悬浮窗。悬浮窗视频暂停后,再点击恢复图标,原始播放界面视频继续播放。...AVPlayer实现视频播放。...= url; // 播放hls网络直播码流}使用PiPWindow开启悬浮窗从而实现小窗口播放视频。...false; } PipManager.getInstance().player.isPiPWindowRestore = false; break; // 表示画中画将从小窗播放恢复到原始播放界面

    7610

    一文看完 WWDC 2022 音视频相关的更新要点丨音视频工程示例

    HLS_start_offset 用于获取广告已播时长;HLS_primary_id 用于标识播放片段和广告以避免重复播放相同广告。...2)使用 AVKit 和 AVFoundation 如果需要简单的播放 HDR 视频媒体渲染到 EDR,可以使用 AVPlayerViewController 渲染 AVPlayer,也可以使用 AVPlayer...3)视觉智能 新的播放器可以支持像处理其他文本一样获取视频帧中的文字: 获取视频画面中的文字 4)插片广告 新的 iOS 播放器开始支持插片广告了,其中 HLS 流协议对插片广告的支持在前面 HLS...像素格式;这些配置可以在不重新创建流的情况下即时修改。...此外,ScreenCaptureKit 支持:捕获由 GPU 内存支持的缓冲区以减少内存副本;支持硬件加速的内容捕获、缩放、像素和颜色格式转换,以降低 CPU 使用率来实现高性能捕获;支持视频和音频捕获

    2.6K10

    低广播延迟及实现协议

    同样,使用TCP进行广播的应用程序本身对协议本身没有任何控制(超时,重新广播的窗口大小),因为TCP传输被实现为单个连续流,并且在错误发生之前,应用程序可能会“冻结”无限期 而且更高级别的协议没有配置TCP...RTMP仅包含根据帧速率计算的标签,因此解码器无法确切知道何时解码此流。这就需要接收组件均匀地生成用于解码的样本,因此必须通过数据包抖动的大小来增加缓冲区。...通常,Apple的HTTP Live Streaming(HLS)使用MPEG传输流,而MPEG DASH使用分段的MP4。2017年7月,发布了CMAF规范。...但是,在不兼容的情况下,播放器仍可以使用CMAF规范内的内容,并且具有HLS或DASH典型的标准延迟时间。 低延迟HLS 苹果在2019年6月发布了低延迟HLS规范。...SRT在每个数据包内部都包含时间戳,从而允许以等于流编码率的速率播放,而无需进行大的缓冲,同时使抖动(不断变化的数据包到达率)和传入的比特率对齐。

    1.6K50

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    稍后,您将学习如何从服务器播放视频流。...2) 在这里,您获取 url 并创建一个 AVPlayer 对象。 AVPlayer 是在 iOS 上播放视频的核心。 播放器对象可以启动和停止您的视频,更改其播放速率,甚至可以调高和调低音量。...唯一的区别是第二个 URL表示 HTTP live stream (HLS)。 HLS 的工作原理是将视频分成 10 秒的块。 这些然后一次一个块地提供给客户端。...通过将速率设置为 0.0 来停止视频剪辑播放: embeddedVideoRate = 0.0 要在全屏视频关闭时恢复播放,请在 VideoFeedView 主体中找到 fullScreenCover...接下来,您需要更改音频会话类别。 PiP 视频无法在环境模式下播放。

    7K10

    使用 AudioTrack 播放音频轨道

    01 前言 大家好,本文是 iOS/Android 音视频开发专题 的第七篇,该专题中 AVPlayer 项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址...另外,WAV 文件其实就是 PCM 格式,因为播放 PCM 裸流时,我们需要知道 PCM 的采样率, 声道数, 位宽等信息,WAV 只是在文件头前添加了这部分描述信息,所以 WAV 文件可以直接播放。...「WAV 文件头/图片来自Google」 PCM 是音频处理中频繁接触的格式,通常我们对音频的处理都是基于 PCM 流,如常见的音量调节, 变声, 变调等特性。...刷新缓冲区数据 public void flush() 刷新当前排队等待播放的数据,已写入当未播放的数据将被丢弃,缓冲区将被清理。...04 MediaCodec 解码并播放音频轨道 如果我们要播放一个音频轨道,需要将音轨解码后才可以播放,之前我们一直在说如何解码视频,如果你看过 AVPlayer Demo ,你一定对如何创建视频轨道解码器很熟悉了

    2.1K31
    领券