AVQueuePlayer的挫折(缓冲区未运行处理)。
我和Avqueeplayer一起度过了一段时间.很简单,我正在使用PlayerItemwithurl构建的一系列AvplayerItem进行制作:并指向网上服务器上的视频资产. 如果我尝试在刺激器(SIC)中运行此功能,它将通过第一个资产播放,开始播放第二个资产,然后死去.有时甚至没有通过第一个资产. 现在,我知道SIM的行为与设备的行为不同,因此我在设备上也尝试了同样的问题. 当我记录项目上的各种状态时,我会看到缓冲区耗尽,并且玩家死了.对于一个正在播放项目队列的构造对我来说,这似乎有点愚蠢...当然,缓冲区可能会降低,但是为什么它会死去呢? 我做错了什么,还是应该如何表现? 我通过观察加载的属性属性以及更改向玩家发送播放时解决了这个问题.但这会导致口吃的播放,也很烂. 这是我的代码.有人可以告诉我如何在不完整的播放中做到这一点吗? - (void)viewDidLoad { [super viewDidLoad]; [[NS
12 2024-04-04
编程技术问答社区
循环的SKVideoNode的内存泄漏(仅在实际设备上)。
我有一个无法诊断的内存泄漏.我已经尝试了多种方法来创建一个无缝循环的视频 - 除了Avplayerlooper,我遇到的所有方法都涉及创建观察者观看AVPlayerItemDidPlayToEndTimeNotification,然后才能寻求视频的开始(在Avplayer的情况下)或将视频插入视频队列(以Avqueeplayer为例).两者似乎都具有相似的性能,但两者都具有与SeekTotime方法相关的一致内存(在Avplayer的情况下)和插入方法(对于AvqueUeplayer).我的最终目标是创建一个默认情况下循环的Skvideonode子类.以下是我的子类的代码: #import "SDLoopingVideoNode.h" #import @interface SDLoopingVideoNode() @property AVQueuePlayer *avQueuePlayer; @property AVP
16 2024-03-21
编程技术问答社区
AVPlayerItemDidPlayToEndTimeNotification只有在强制的情况下才起作用。
我到处都在搜索,但我仍然找不到解决这个问题的解决方案.我为正在制作的无线电应用程序有一个AVQueuePlayer.它一次有大约20 AVPlayerItems.我在其中一个项目中添加了AVPlayerItemDidPlayToEndTimeNotification观察者.该通知会发射并执行代码以删除元数据和状态的关键观察者,因此它不会崩溃,并且会在队列中前进.但是它不想玩.没有错误,状态就可以发挥作用,AVPlayer URL已完美加载.如果我单击按钮调用AdvanceNextItem,它可以完美地工作,并且播放也可以很好地发挥作用. 现在,最奇怪的是:如果我手动发布通知,通知代码效果很好.当我正在尝试所有工作以使此工作时,我会很感激任何帮助或投入. if (playlist != nil) { playlistInterval = [playlist count]/4.0; NSMutableArray *playerItems = [[NSMutableArr
8 2024-03-21
编程技术问答社区
AVQueuePlayer在后台播放多个音轨 iOS5
我使用avqueeplayer在背景中播放多个项目.代码在ios4中的工作非常完美.在ios5中,avqueeplayer改变了其行为,因此播放器在第一项结束后停止玩. 马特·加拉格尔(Matt Gallagher)在此 post 中. "从iOS 5开始,看来Avqueueplayer不再预先抢劫.它确实在iOS 4中的下一个曲目进行了预言." 所以我的问题是如何在ios5中使用Avplayer或AvqueEplayer在后台播放多个项目. 解决方案 马特·加拉格尔(Matt Gallagher)的答案在他的." 实际上,这对我没有帮助. 所以我的解决方案是: [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 我无法解释原因,但是在添加新的AvplayerItem之前提出的这一代码使我的代码工作. 对于那些在背景中添加下一个曲目并使用方法 的人也适用
8 2024-03-21
编程技术问答社区
如何在AVPlayer中使用AVQueuePlayer
目前我正在使用以下代码播放歌曲 playerItem = [AVPlayerItem playerItemWithURL:[song valueForProperty:MPMediaItemPropertyAssetURL]]; [_avPlayer replaceCurrentItemWithPlayerItem:playerItem]; 在这里,我正在使用avplayer播放音频文件,但是我的要求是连续播放歌曲的组(NSarray)(目前播放一首歌后播放器停止).我听到了有关Avqueueplayer的信息,但不知道该如何使用是如果有人知道这一点,请与Avplayer一起帮助 解决方案 查看以下苹果文档: https://developer.apple.com/library/ios/documentation/avfoundation/Reference/Refereph/avqueueplayer_class/reference/reference/re
8 2024-03-21
编程技术问答社区
检测AVQueuePlayer中的当前项目并知道它何时改变?
我目前有一个avqueeplayer按顺序播放一些.AIF文件.当它通过每个音频时,我想执行与该特定声音有关的动作(例如,更改ImageView的UIImage). 我的问题是正确设置NSNOTIFIENT.我将其设置为通知我,当队列用最后一个对象结束时,但是我在收到每个当前项目的通知时遇到了麻烦.这是我拥有的: //Setting Up My Queue List yellowVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/YellowVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; orangeVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWi
16 2024-03-21
编程技术问答社区
在AVQueuePlayer中重复播放上一次的项目
我需要在AVQueuePlayer中创建类似无限循环的内容.特别是,我想在最后一个组件完成播放后重播AVPlayerItem s的整个NSArray. 我必须承认,我实际上不知道如何实现这一目标,并希望您能给我一些线索. 解决方案 在Avqueeplayer中循环一系列视频的最佳方法. 在Avqueueplayer中观察每个播放器. queuePlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; for(AVPlayerItem *item in items) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nextVideo:) name:AVPlayerItemDidPlayToEndTimeNotification
8 2024-03-21
编程技术问答社区
AVPlayer在开始缓冲一个音频流时 "冻结 "了应用程序
我使用的是AVQueuePlayer的子类,当我使用流媒体URL添加新的AVPlayerItem时,应用程序将冻结约一两秒钟.通过冻结,我的意思是它不会响应UI的涉及.另外,如果我已经播放了一首歌,然后在队列中添加另一首歌曲,AVQueuePlayer自动开始在歌曲仍在流式传输第一首歌的同时开始预紧.这使该应用程序在UI上不响应UI两秒钟,就像添加第一首歌一样,但这首歌仍在播放.因此,这意味着AVQueuePlayer正在在主线程中做一些引起明显"冻结"的事情. 我正在使用insertItem:afterItem:添加我的AVPlayerItem.我测试并确保这是导致延迟的方法.也许AVPlayerItem在将其添加到队列时被AVQueuePlayer激活时会做到. 必须指出我使用的是Dropbox API V1 Beta通过使用此方法调用来获取流URL: [[self restClient] loadStreamableURLForFile:metadata.path
20 2024-03-21
编程技术问答社区
在AVQueuePlayer上跳到上一个AVPlayer项目/从队列中播放选定的项目
我正在使用Avqueueplayer进行电视节目,该电视节目已将其切成不同的章节. 我还想提供跳到上一章/下一章或在avqueeplayer上选择其他章节的可能性. 跳到下一个项目是Avqueeplayer提供的advanceToNextItem没有问题的,但是跳过或从队列中播放DESELITEM没有什么相似的. 所以我不太确定这里最好的方法是什么: 使用avplayer而不是avqueueplayer,请replaceCurrentItemWithPlayerItem: at actionAtItemEnd播放NextItem,然后只使用'reportaceCurrentItemWithPlayerItem'来让用户选择某个章节 或 通过使用" interertitem:afterItem:''和'removeAllitems' ,将队列或当前播放器重组 其他信息: 我以应在nsarray中出现的顺序存储不同视频的路径 用户应该通过按下代表本章的按
6 2024-03-21
编程技术问答社区
AVFoundation播放连续的视频片段
我正在开发一个iOS应用程序,该应用程序涉及从Web服务器中获取是流中流的一部分并在应用程序中连续播放的视频片段. 经过一番研究,我决定使用Avqueueplayer.每当我从服务器获取MP4文件并将其存储在NSDATA对象中时,我都会创建一个AvplayerItem并将其附加到队列中.另外,我会收听avplayeritemdidplaytoendtimenotification通知,然后再向下一个项目. 我面临的问题是每次我从电影片段转向另一个片段时,一个令人讨厌的小滞后.我尝试将iMovie上的碎片结合在一起,无法分辨片段何时结束,另一个片段开始. 我如何摆脱连续片段之间的小暂停/滞后? 这是我的代码: import UIKit import MediaPlayer import AVFoundation class WatchStream: UIViewController, StreamManagerDelegate { var subscriber : Subs
6 2024-03-21
编程技术问答社区
使用AVPlayerLooper来循环播放多个视频
我一直在试图弄清楚如何使用AVPlayerLooper循环多个视频,但是他们的templateItem参数AVPlayerItem而不是[AVPlayerItem].我目前正在使用AVQueuePlayer显示视频,但我需要循环浏览. 到目前为止,这是我的代码: class MyVC: UIViewController { @IBOutlet weak var playerView: UIView! lazy var backgroundVideoPlayer = AVQueuePlayer() // View Controller related code (viewDidLoad, etc.) is taken out for brevity. private func loadBackgroundVideosRandomly() -> [AVPlayerItem] { let mainBundle = B
4 2024-03-21
编程技术问答社区
AVQueuePlayer播放时无间隙和冻结现象
我使用AVQueuePlayer播放一系列从URL加载的电影. 我试图用我需要播放的所有AVPlayerItems的数组来初始化player实例. player = [[AVQueuePlayer queuePlayerWithItems:playerItemsArray] ,但是在这种情况下,AVQueuePlayer在开始播放之前,会加载每个AVPlayerItem的某些初始部分.它导致令人沮丧的冻结和应用程序不会响应一秒钟. 有可能仅在播放器队列中添加第一个AVPLayerItem,观察其状态并仅在第一次到达结束时才在队列中添加第二项,但是在这种情况下,在初始化引起的两个项目的播放之间会有差距和第二AVPlayerItem的缓冲. 有什么办法可以组织几个没有冻结视频的无间隙播放? 我应该将其他一些玩家用于此目的吗? 预先感谢. 解决方案 找到了解决方案. 在AVQueuePlayer队列中添加新AVPlayerItem时,播放器将同步等
20 2024-03-21
编程技术问答社区
从一个音频流中获取元数据
我想获取文件名,并在可能的情况下从流媒体URL的AvplayerItem中使用AvqueEplayer播放的专辑映像,但我不知道该怎么做. 还事实证明,我的流媒体URL没有任何元数据,我可以将元数据放在NSURL*中,然后再将其传递给AvplayerItem吗? 谢谢. 解决方案 我很惊讶没有人回答这个问题. 实际上,没有人回答我的其他任何问题. 让我想知道这里的人们真正拥有多少知识. 无论如何,我会继续回答自己的问题. 我通过执行以下操作发现了如何获得元数据: AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; NSArray *metadataList = [playerItem.asset commonMetadata]; for (AVMetadataItem *metaItem in metadataList) { NSLog(@"%@",[metaItem c
10 2024-03-19
编程技术问答社区
iOS xcode4 AVQueuePlayer不能播放声音
我试图在iPhone4上使用avqueeplayer播放.m4a声音文件,但没有声音. 如果我尝试使用同一文件的AudioServicesPlaysystemsound,所有这些都可以. 这是代码. (AVFoundation framework is installed.) #import -(void) play_sound_file: (NSString *) sound_file_m4a { printf("\n play_sound_file 1: '%s' ", [sound_file_m4a UTF8String] ); AVPlayerItem *sound_file = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:s
6 2024-03-19
编程技术问答社区
一个AVPlayerItem一次只能在玩家的队列中占据一个位置?
我已经看过许多问题关于此问题,没有一个解决方案.我得到: AvplayerItem一次只能在玩家队列中占据一个位置 快速录制一个应具有两个状态之一的视图按钮后,在控制台中: 成功预加载视频 只有一张视频将加载到另一个VC中. 为什么会发生这种情况?我该如何修复? 这是我的代码,它在过渡到VC的过渡中掌握了这一点: if numberMedia == 0 { if selectedPost!.interimMedia[numberMedia].playerLayer != nil { playCurrentMediaVid(currentMedia: selectedPost!.interimMedia[numberMedia]) } else { let videoURL = selectedPost!.interimMedia[num
28 2023-10-08
编程技术问答社区
用AVQueuePlayer做跳到上一个的更好方法?
我在应用程序中使用AVQueuePlayer.我有两个滑动手势可以跳到接下来,然后跳到以前的avplayeritems.现在要跳过接下来,我只是在AvqueEplayer上打电话给AdvancetOnextitem. 但是,跳过以前的我正在删除所有项目并将它们添加到以前的视频中,这在跳到以前的多次时确实很慢.我该如何使这个更快地使这个速度像打电话advanceToNextItem? 我的代码看起来像这样: func skipToPrevious() { queuePlayer.removeAllItems() // move the previous playerItem to the front of the list then add them all back in for playerItem in playerItems: queuePlayer.insertItem(playerItem, afterItem: nil
12 2023-10-07
编程技术问答社区
'一个AVPlayerItem不能与一个以上的AVPlayer实例相关联'。
我知道这个问题遍布堆叠溢出,但仍然,其中大多数是旧的,并且与我要在这里问的内容没有关系. 所以我有一个带有AVPlayerItems和AVQueuePlayer的数组.首先,我将AvqueEplayer设置为播放数组项目: func mediaPicker(mediaPicker: MPMediaPickerController!, didPickMediaItems mediaItemCollection: MPMediaItemCollection!) { mediaItems = mediaItemCollection.items for thisItem in mediaItems as [MPMediaItem] { var itemUrl = thisItem.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL var playerItem = AVP
8 2023-10-07
编程技术问答社区
AVQueuePlayer。循环播放队列中的最后一个项目(并消除打嗝)或循环播放视频的最后几秒钟
我正在使用avqueeplayer按顺序播放视频(尽管我在戏剧之间有打ic). 现在我想: 1)循环该序列中的最后一项(不是完整的). 2)这样做,我也想消除打ic. 以下是我播放视频序列的代码.我如何实现我的2个目标? [super viewDidLoad]; NSString *secondVideoPath = [[NSBundle mainBundle] pathForResource:@"vid_1" ofType:@"mov"]; NSString *firstVideoPath = [[NSBundle mainBundle] pathForResource:@"vid_2" ofType:@"mov"]; AVPlayerItem *firstVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:firstVideoPath]]; AVPlayerItem *se
34 2023-08-28
编程技术问答社区
播放/暂停/停止本地存储的多个音频文件
我有20个音轨,这些音轨存储在我的项目中. 我想依次播放所有这些文件.为此,我使用了Avqueeplayer.请检查以下代码以获取参考. 声明: - @interface ViewController () { AVAudioPlayer *player; NSMutableArray *arrPlayData; AVPlayerItem *item; } @property (nonatomic, retain) AVQueuePlayer *queuePlayer; 按下按下的按钮, -(IBAction)click_Play:(id)sender { for (int j = 0; j
28 2023-06-03
编程技术问答社区
当AVQueuePlayer完成最后一个playeritem时,如何做一些事情?
我有一个正在从4个AvplayerItems的数组中创建的AvqueEplayer,而且一切都很好. 我想在队列完成比赛中的最后一项时要做一些事情,我在这里看了很多答案,这是我想要的最有前途的东西: 是执行代码后执行代码的最佳方法声音已经完成 在我的按钮处理程序中,我有此代码: static const NSString *ItemStatusContext; [thePlayerItemA addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd)
26 2023-06-02
编程技术问答社区