AVPlayer 可以从 API 端点正确传输视频文件吗?

2024-03-24

我有一个 Xamarin iOS 应用程序,我想从支持 HTTP 范围请求的 API 端点流式传输视频。我已经在这里查看了许多类似的问题,但无论我尝试什么,我似乎都无法让 AVPlayer 在完全下载之前开始播放视频文件。 我试过了:

  • KVO on playbackLikelyToKeepUp, playbackBufferEmpty and playbackBufferEmpty尽快播放视频ReadyToPlay
  • set AutomaticallyWaitsToMinimizeStalling= 在 AVPlayer 上为 false
  • set CanUseNetworkResourcesForLiveStreamingWhilePaused= 正确,并且PreferredForwardBufferDurationAVPlayerItem 上 = 1
  • called PlayImmediatelyAtRate(1)在 AVPlayer 上

但文件仍然在视频开始播放之前完全下载,这会导致用户延迟。

是否可以让 AVPlayer 在完成下载之前开始播放视频文件,类似于 HTML 视频标签的做法?

这是我当前的代码:

    private void SetUpPlayer()
    {
        if (ViewModel.VideoStreamUrl == null)
        {
            return;
        }

        // See https://stackoverflow.com/questions/38865797/how-to-play-video-with-avplayerviewcontroller-avkit-in-xamarin-ios
        _aVPlayerItem = new AVPlayerItem(ViewModel.VideoStreamUrl)
        {
            CanUseNetworkResourcesForLiveStreamingWhilePaused = true,
            PreferredForwardBufferDuration = 1,
        };

        // See https://stackoverflow.com/questions/38867190/how-can-i-check-if-my-avplayer-is-buffering/38867386#38867386
        _playbackLikelyToKeepUpObserver?.Dispose();
        _playbackLikelyToKeepUpObserver = (NSObject)_aVPlayerItem.AddObserver("playbackLikelyToKeepUp",
            NSKeyValueObservingOptions.New,
            AVPlayerItem_BufferUpdated);

        _playbackBufferEmptyObserver?.Dispose();
        _playbackBufferEmptyObserver = (NSObject)_aVPlayerItem.AddObserver("playbackBufferEmpty",
            NSKeyValueObservingOptions.New,
            AVPlayerItem_BufferUpdated);

        _playbackBufferFullObserver?.Dispose();
        _playbackBufferFullObserver = (NSObject)_aVPlayerItem.AddObserver("playbackBufferFull",
            NSKeyValueObservingOptions.New,
            AVPlayerItem_BufferUpdated);

        _aVPlayer = new AVPlayer(_aVPlayerItem)
        {
            AutomaticallyWaitsToMinimizeStalling = false,
        };

        var playerViewController = new AVPlayerViewController
        {
            Player = _aVPlayer,
        };

        AddChildViewController(playerViewController);
        View.AddSubview(playerViewController.View);
        playerViewController.View.Frame = View.Frame;
        playerViewController.ShowsPlaybackControls = true;

        _aVPlayer.PlayImmediatelyAtRate(1);
    }

    private void AVPlayerItem_BufferUpdated(NSObservedChange obj)
    {
        ReportVideoBuffering();
    }

    private void ReportVideoBuffering()
    {
        bool isBufferEmpty = _aVPlayerItem != null && _aVPlayerItem.PlaybackBufferEmpty;
        Console.WriteLine($"Buffer empty? {isBufferEmpty}");
        Console.WriteLine($"Player status? {_aVPlayer.Status}");

        if (_aVPlayer.Status == AVPlayerStatus.ReadyToPlay)
        {
            Console.WriteLine($"Playing video.");
            _aVPlayer.Play();
        }
    }

这个问题的简单答案是否定的,AVPlayer 不支持使用 http 范围请求和部分内容 (206) 响应的流式传输。在我们的例子中,我们决定使用 Azure 媒体服务来提供流端点,然后我们可以在 iPad 应用程序以及 Web 上使用该端点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVPlayer 可以从 API 端点正确传输视频文件吗? 的相关文章

  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 当 isUserInteractionEnabled false 时,SKSpriteNode 不会让触摸通过

    我正在尝试在 SpriteKit 中创建一个覆盖层 方法是使用SKSpriteNode 但是 我希望触摸穿过覆盖层 所以我设置isUserInteractionEnabled为假 然而 当我这样做时 SKSpriteNode似乎仍然吸收所有
  • 错误消息:您输入的捆绑包 ID 已被使用

    我正在尝试发布一个 iPhone 应用程序 这不是第一个 我过去已经发表过其他的 因此 我在第一个和第二个表单中输入了所需的信息 然后填写了第三个大表单 您还可以在其中上传图标和屏幕截图 好吧 我在上传屏幕截图之前按下了 保存 按钮 因为我
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • 如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色

    iOS 13 对 UISegmentedControl 进行了一些更改 包括切换所选片段时的非常漂亮的动画 但是我注意到它没有显示backgroundColor属性正确 它似乎总是有一点色彩 我见过回答如何设置的问题selectedSegm
  • Xamarin.forms 长时间运行的后台工作

    我是 Xamarin 平台的新手 我正在使用 Xamarin forms 为所有三个主要平台 WP iOS Android 开发应用程序 如何在后台与我的服务器同步数据 gt 我需要类似于 Android Service 的东西 即使用户转
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • 通过 Button Swift 中的标签发送行和部分

    我里面有这个cellForRowAtIndexPath cell plusBut tag indexPath row cell plusBut addTarget self action plusHit forControlEvents U
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一

随机推荐

  • 由 Android 应用程序和网站共享的关系数据库 - 最简单的方法

    我有一个项目 我将开发一个 Android 应用程序和一个网站 他们都应该共享相同的数据库 我正在尝试探索所有选项 但我真的很困惑 这是我的要求 1 我需要一个非常简单且EASY方式 我并不是想学习 我只是想学习 我只是想把事情做好 2 数
  • microk8s 连接到端口 16443 被拒绝

    我收到以下错误消息 root master 1 microk8s kubectl get no The connection to the server 127 0 0 1 16443 was refused did you specify
  • 使用 Storyboard 与编程方式进行 iOS 开发的速度?

    作为初级 iOS 开发人员 哪种方法可以实现更快 更高效的开发 这个问题没有正确的答案 对于使用 Xcode 进行开发 2 3 年的人来说 旧的编程方式更高效 而且故事板感觉很陌生 这就是我个人的处境 对于今天刚刚开始使用 Xcode 或
  • 如何向 NSDate 添加 1 天?

    基本上就如标题所说 我想知道如何添加 1 天NSDate 所以如果是 21st February 2011 它将变成 22nd February 2011 或者如果是 31st December 2011 它将变成 1st January
  • Powershell:作为本地系统运行时向登录用户发送 toast 通知

    我有一个作为本地系统运行的脚本 它执行一些操作 包括检查用户是否已登录 如果是 它会运行 PowerShell 代码片段来显示 toast 通知 如下所示 如果 PS 以当前用户身份运行 则可以正常工作 如果它作为 LocalSystem
  • Python对一个列表从另一个列表进行排序[重复]

    这个问题在这里已经有答案了 我已经在这个程序上工作了一段时间 但不知道如何从第二个列表中的内容对我的一个列表进行排序 对于这个程序 我有一个单词列表 还有一个单词在我打开的文件中出现的次数的列表 我需要根据单词出现的频率降序对单词列表进行排
  • NSFontAttributeName 与 NSAttributedStringKey.font

    我在使用我已经使用了一段时间的库中的 Swift 代码时遇到了一些问题 这似乎与某种版本冲突有关 但我不确定 这是代码 let attribMsg NSAttributedString string msg attributes NSAtt
  • ggplot 中的欧洲/法国千位分隔符

    我正在尝试格式化 ggplot 图中的 y 轴 并使用空格 而不是逗号 作为千位分隔符 大约是 10 000 而不是 10 000 我在 中找不到它scale y continuous help 感谢您的任何提示 正如 David 和 jo
  • Xcode 4 调试

    自从迁移到 Xcode 4 以来 我对调试视图完全感到困惑 因为我无法看到数组 字典等的值 在 Xcode 3 下我可以查看调试控制台并查看存储的实际值 调试信息现在出现在调试导航器 http developer apple com lib
  • 在 Visual Studio 中删除折叠区域和摘要周围的框

    我正在使用 VS2010 我想在压缩区域和 或摘要时更改它们的字体样式 主要是为了删除这些部分周围的边框 因为在滚动代码时它会变得分散注意力 我浏览了 字体和颜色 和其他选项 但找不到任何明显可以让我更改它的内容 这个字体可以自定义吗 如果
  • 如何在不使用 strlen() 的情况下查找 php 中的字符串长度?

    如何在不使用 php 的情况下找到字符串的长度strlen 我知道这是一个很老的问题 但这段代码对我有用 s string i 0 while s i i print i
  • 将 void 函数模板专门化为 const char[N]

    我有一个我想要专门化的模板化函数foo to const char N 硬编码字符串 template
  • 购物车和各种折扣。将折扣存储在数据库中并将其应用于订单计算

    目前 我正在寻找对购物车 订单 应用折扣 的最佳实践 因此 我计划实施此类折扣 固定用户折扣 例如 我想给我最喜欢的客户 10 的折扣 商品数量折扣 例如 您购买 10 支不同颜色的钢笔 您将获得 1 5 的折扣 优惠券折扣 例如 在促销活
  • CanCan :read 和 [:index, :show] 之间的区别吗?

    根据所有文件 read动作是两者的别名 index and show alias action index show to gt read 但是 请考虑以下使用嵌套资源的场景 resources posts resources commen
  • 类型错误:无法解压不可迭代的 int 对象

    运行我的代码后 如何解决此错误 如下所示 我正在使用下面的函数并在其上实现运行窗口 for 循环 但最终出现以下错误 for 循环工作并在某个时刻挂起 def get grps s thresh 1 Nmin 3 Nmin int gt 0
  • 使用 jQuery 删除仅包含空格的元素

    有没有办法删除这个 p p 使用 jQuery Try p filter function return trim this text this children length 0 remove 它的作用是找到所有 p 其中没有任何内容 并
  • Linux 检索监视器名称

    情况 我正在使用多个监视器 并且我想在 bash 中获取它们的名称 目前我使用的是 Ubuntu 10 04 我知道xrandr 从中我只能得到统计数据 我想要的是读取数组中的所有监视器名称以使用它们 有没有一种明确的方法可以做到这一点 而
  • 将 Mercurial hgsubversion 扩展与 SVN 外部结合使用

    我正在使用 Mercurial 与 Subversion 存储库进行通信 并且该存储库当前正在使用 SVN 外部来拉入另一个存储库 hgsubversion与存储库通信的效果非常好 但它似乎不适用于 SVN 外部 有没有办法配置它来处理这个
  • 当我的脚本导入模块 pikepdf 和 pdfminer3 时,如何修复 pyinstaller“无名为...”的错误?

    我使用 PikePDF 和 PDFminer3 构建了一个有效的 py 脚本 它将从我的桌面上获取 PDF 并根据可用的单词创建一个 txt 文件 这样做的目的是帮助我的工作团队修改通常无法复制粘贴修改 因此必须手写 的法律文件 由于我的大
  • AVPlayer 可以从 API 端点正确传输视频文件吗?

    我有一个 Xamarin iOS 应用程序 我想从支持 HTTP 范围请求的 API 端点流式传输视频 我已经在这里查看了许多类似的问题 但无论我尝试什么 我似乎都无法让 AVPlayer 在完全下载之前开始播放视频文件 我试过了 KVO