我正在尝试从我的应用程序中的URL播放音频.一切都在iOS 8(模拟器和物理设备)中按预期发生.对于iOS 9,它可以在模拟器中工作,但在设备上,音频根本无法播放.流式传输出现,如果我点击播放,进度条也会显示音频正在加载和播放,但声音没有出现.此问题发生在iOS 9物理设备中.它适用于iOS 8物理设备.
我创建了一个简单的按钮.单击按钮,将加载AVPlayerViewController,并使用给定的URL初始化AVPlayer.代码如下:
#import "ViewController.h"
#import <AVKit/AVKit.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)playAudio:(id)sender {
NSURL *url = [NSURL URLWithString:@"https://path/to/my.mp3"];
[self performSegueWithIdentifier:@"playSegue" sender:url];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
AVPlayerViewController *viewController = (AVPlayerViewController *)segue.destinationViewController;
viewController.player = [AVPlayer playerWithURL:(NSURL *)sender];
}
@end
Run Code Online (Sandbox Code Playgroud) 我有一个AVPlayerViewController播放直播内容的实例,我将其作为子视图添加到我的viewController视图中.
切换AVPlayerViewController到全屏模式并点击完成按钮退出全屏后,播放器停止播放.
完成按钮动作后有没有办法让玩家继续玩?
我有一个AVPlayerViewController我用一个AVPlayer和一些AVPlayerItem(iOS 10,Xcode 8,Objective C)初始化的。将AVPlayerViewController呈现“内联”的一些子视图里面,一切都与本机播放控制完美的作品。
当我按下本机全屏按钮时,它也可以正常工作并切换到全屏模式(左上角有“完成”按钮)。
我的问题是当我按下完成按钮从全屏返回时,播放器出于某种原因停止播放,自行重置,如果我检查.currentItem,我看到它是nil.
这里发生了什么事?为什么不能在从/到全屏切换之间AVPlayerViewController保持它AVPlayerItem?
objective-c ios avplayer avplayeritem avplayerviewcontroller
我正在AVPlayerViewControlleriPad-App上播放视频文件(H.264,AAC,MP4-Container).一切都在iOS 10中运行.而且在iOS 11中它正确播放视频.
但是在iOS 11中,当我开始向任何方向滑动时,它会立即使视频变黑并使音频静音.它还显示底部时间轴旁边的加载指示器.
它也忽略了allowsPictureInPicturePlayback属性,因此它不会在iOS 11上显示PIP-Button.
这是我使用的代码:
avPlayerController = AVPlayerViewController()
avPlayerController?.showsPlaybackControls = true
avPlayerController?.allowsPictureInPicturePlayback = true
avPlayerController?.player = AVPlayer(url: videoUrl as URL)
avPlayerController?.player?.play()
self.present(self.avPlayerController!, animated: true, completion: nil)
avPlayerController?.player?.actionAtItemEnd = AVPlayerActionAtItemEnd.none
NotificationCenter.default.addObserver(self, selector: #selector(onVideoCompleted), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.avPlayerController!.player?.currentItem)
Run Code Online (Sandbox Code Playgroud)
此功能可在视频结束时关闭视频播放器:
func onVideoCompleted(notification:Notification) {
self.avPlayerController?.player = nil
self.avPlayerController?.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
当屏幕黑屏时,我在控制台中看到了这个:
AVOutputDeviceDiscoverySession (FigRouteDiscoverer)
>>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl
outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery
mode to DiscoveryMode_Presence (client: MyAppName)
Run Code Online (Sandbox Code Playgroud) 我正在尝试播放本地视频文件并继续获取以下日志:
[framework] CUICatalog:提供的资产名称无效:'(null)'
我的视频文件位于项目目录中,也位于主捆绑资源中.我尝试了多种语法版本来播放视频.这是我现在在测试项目中的代码:
@IBAction func buttonAction(_ sender: Any) {
if let path = Bundle.main.path(forResource: "slipMovement", ofType:
"mp4") {
let video = AVPlayer(url: URL(fileURLWithPath: path))
let videoPlayer = AVPlayerViewController()
videoPlayer.player = video
present(videoPlayer, animated: true, completion: {
video.play()
})
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用AVplayer和PlayerLayer时,我没有收到'null'消息.它只发生在我使用AVPlayerViewController时.
我对编程很新,任何帮助都会非常感激,因为我在网上找不到合适的解决方案.
我有一个用于外部屏幕的 UISceneConfiguration,当外部显示器连接到 iOS 设备时会触发该配置。
// MARK: UISceneSession Lifecycle
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
switch connectingSceneSession.role {
case .windowApplication:
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
case .windowExternalDisplay:
return UISceneConfiguration(name: "External Screen", sessionRole: connectingSceneSession.role)
default:
fatalError("Unknown Configuration \(connectingSceneSession.role.rawValue)")
}
}
Run Code Online (Sandbox Code Playgroud)
我在链接到外部显示器的新 UIScene 中以这种方式在外部屏幕中显示自定义视图。但现在的问题是,如果我在应用程序流程中也有一个 AVPlayerViewController,它不再显示(播放)到外部屏幕。我想 AVPlayerViewController 可能会为外部显示播放做它自己的配置,但现在我有一个嵌入在外部屏幕上的自定义视图,它无法覆盖它。我需要做什么才能使 AVPlayerViewController 可以按其方式将内容显示到外部屏幕? …
我正在使用AVPlayer播放视频.我无法播放.mp4视频.我得到了这个黑屏.这是我的代码.
`NSString *filePath = [self.videoArray objectAtIndex:index];
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:filePath ofType: @"mp4];
url = [[NSURL alloc] initFileURLWithPath: soundFilePath];
playerViewController = [[AVPlayerViewController alloc] init];
playerViewController.videoGravity = AVLayerVideoGravityResize;
playerViewController.view.frame = self.view.bounds;
playerViewController.showsPlaybackControls = NO;
video=[AVPlayer playerWithURL:url];
playerViewController.player = _video;
playerViewController.view.userInteractionEnabled = false;
[video play];
[self.view addSubview:playerViewController.view];`
Run Code Online (Sandbox Code Playgroud) 我已经以编程方式添加了AVPlayerViewController一个UIViewController.我可以在玩家完成游戏时收到通知(playerDidFinishPlaying).我还想知道用户是否在播放视频时触摸了屏幕,但我没有找到任何相关的通知.
目前,我们使用标准的AVPlayerviaAVPlayerViewController来播放视频。我们正在以https://ourdomain/media/mediaid?jwt=authTokenHere格式从 url 流式传输视频。如您所见,该 url 没有扩展名;但是,在有效负载上设置了标头以指示响应是视频。
虽然链接导致视频在桌面 Safari 和 Chrome 中播放良好,但它不会AVPlayer在我们的应用程序中通过 iOS 播放。是否有一些特定的格式AVPlayer?
使用 时AVPlayerViewController,用户可以选择字幕是使用特定语言off,还是设置为auto。设置requiresFullSubtitles属性我可以强制显示字幕,但这不是我想要的。
有没有办法检测用户为字幕设置选择了什么,是选择了语言off,还是auto?
avplayer ×7
ios ×6
objective-c ×4
swift ×4
video ×3
avfoundation ×1
avplayeritem ×1
debugging ×1
ios11 ×1
ios9 ×1
mime-types ×1
tvos ×1
uikit ×1
xcode7 ×1