AVPlayer Can't Play - objective-c

I want to play a remote mp3 with AVPlayer. I can't make it work and I can't see the reason why it doesn't work. Code:
NSString *urlstr=#"..some link to a mp3"
NSURL *url=[NSURL URLWithString:urlstr];
self.player = [[[AVPlayer alloc] initWithURL:url] retain];
[player play];
The link is valid. If I load it in a webView it plays right away.
Please help.

I have get a solution. Please try the following code:
NSString *urlstr=#"http://www.3rdeyelab.com/mp3/mp3/tailtoddle_lo.mp3"
NSURL *url=[NSURL URLWithString:urlstr];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
player = [[AVPlayer playerWithPlayerItem:playerItem] retain];
[player play];
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
Hope it will work for you!!!

If you use a local link as URL, so you should initiate url with fileURLWithPath method:
NSURL *url = [NSURL fileURLWithPath:urlstr];

The NSURLConnection class, regardless of whether the URL is local or remote, should always be used whenever a URL is concerned. It's the only thread-safe, non-intrusive means of loading a AVPlayerItem or AVAsset. Remember: your app shares the iPhone with other apps; and, this is the way to be responsible insodoing.

Related

AVAudioPlayer or PlaySystemSoundID?

I have an iOS app which is going to provide a sound pad for the user - i.e. when they tap a button a short sound clip is played.
At the moment, the app is designed around using SystemSoundID.
Would it now be advised to use AVAudioPlayer now over this? If so, what would be the ideal code to use? Would it be the standard:
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:#"yoursoundfile"
ofType:#"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
[audioPlayer play];

Force youtube video from UiView to play

I'm creating an app which include youtube videos. For this app i need a way to force the youtube video to open. how can i force it to start?
i've looked at this:
webView.userInteractionEnabled = NO;
But cant seem to figure out how to use it.
This is the code:
stringUrl = [NSString stringWithFormat:#"http://www.youtube.com/watch?v=%#", youtubeId[0]];
headerTitle.text = [NSString stringWithFormat:#"%#", theTitle[0]];
NSURL *url = [NSURL URLWithString:stringUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
Here you will get working example project in which it is using HCYoutubeParser to parse the youtube url
https://github.com/hellozimi/HCYoutubeParser
form here you can down load working code and you can check it on simulator and iphone both
even it will explain how to use it.

Airdrop: not able to see nearby devices

I'm trying to implement Airdrop feature in my app but I'm not able to see any nearby device even if Airdrop is enabled on both the e the devices. But if I go to Safari/Mail or any other app to use Airdrop, then the devices start appearing everywhere (INCLUDING MY APP also). I'm using the following code:
NSString *path = [[NSBundle mainBundle] pathForResource:#"Untitled" ofType:#"pdf"];
NSURL *url = [NSURL fileURLWithPath:path];
NSData *data = [NSData dataWithContentsOfURL:url];
NSArray *arr = [NSArray arrayWithObject:data];
UIActivityViewController *actVC = [[UIActivityViewController alloc] initWithActivityItems:arr applicationActivities:nil];
[self presentViewController:actVC animated:YES completion:nil];
Below is the image showing the no devices are detected.
I'm not getting what may be the problem for this. Do I need to have some specific settings in my app so that I can see near-by devices without using Safari or any other app.

AVAudioPlayer not playing any sound

I'm working on an iOS application that needs to play some sounds using the AVFoundation framework. The workspace structure in Xcode 4 contains two projects:
Workspace
The application itself (main project)
A utility library
After building the utility library, it results in a static library which is used in the main application as a framework.
So, when trying to play a sound inside the main application by using the code below, it works as expected.
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:#"%#/sound.mp3", resourcePath];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
[audioPlayer play];
In contrast, when trying to play exactly the same sound (or any other) inside the utility library using the same code as above, no sound is played at all, even though error is nil and the audioPlayer property values are the right ones (number of channels, duration).
I've made sure the AVFoundation framework is in both projects.
Also, my class uses the AVAudioPlayerDelegate protocol and implements these two methods:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
None of these methods is called after trying to play the sound.
If I use the AudioToolbox framework instead, then it plays the sound. But I'm interested in using AVFoundation for several reasons.
Any idea of what is going on? Am I missing something about AVFoundation? Could it be related to using AVAudioPlayer from inside a static library?
Thanks in advance.
I found the solution and it's related to something I didn't mention and didn't think about: I'm compiling with Automatic Reference Counting (ARC).
ARC inserts a release call to the audio player, so it's deallocated right after leaving the method where it is created. It has nothing to do with AVAudioPlayer but with ARC.
In order to solve this issue, I just created an AVAudioPlayer attribute to the class that deals with sounds so that it is not released anymore by ARC. Well, at least, it's not released until the instance of this class is released.
For more information about ARC, refer to Automatic Reference Counting: Zeroing Weak References with details on why I had this issue.
Yes, absolutely; ARC was the reason with my code as well.
I introduced a property:
#property (strong, nonatomic) AVAudioPlayer *audioPlayer;
and that made everything work out fine.
use this it will work definitely....
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
NSURL *url = [NSURL fileURLWithPath:#"path of the sound file :)"];
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[_player setDelegate:self];
[_player prepareToPlay];
[_player play];
Have you configured the AVAudioSession?
I had a similar problem and fixed it using something like this:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:NULL];
or
[audioSession setCategory:AVAudioSessionCategoryPlayback error:NULL];
Hope it helps.
Even having audioPlayer var declared in the class scope, it won't play.
At least on iOS 10 iPhone 5c physical device.
play() result is true so no errors appear to happen.
Had to add this (Swift 3, 4) and now it plays the sound correctly.
let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayback)
I have created open source project for simple audio player. Take a look at it if you have any problems with playing audio in iOS (in background too) : https://github.com/wzbozon/DKAudioPlayer
I had the same issue. I had resolved it by adding below line in .h file:
#property (strong, nonatomic) AVAudioPlayer *audioPlayer;
And in .m file :
NSError *error;
NSString *soundFilePath = [NSString stringWithFormat:#"%#/dancepechance.mp3",
[[NSBundle mainBundle] resourcePath]];
NSURL *url = [NSURL fileURLWithPath:soundFilePath];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
NSLog(#"Error %#",error);
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
You can use AVPlayerViewController from AVKit instead for both audio and video. Code is available for both swift and objective c here.
for me this did the job
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
} catch {
assertionFailure("Failed to configure `AVAAudioSession`: \(error.localizedDescription)")
}
Please stay on the page for some time, I was facing same issue. and use sleep to resolve it.
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:#"sounds-1027-are-you-kidding"
ofType:#"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
[audioPlayer play];
sleep(2);

How to Stop UIWebView from playing mp3?

I am loading a MP3 file into UIWebView control on an iPad Application, I have a UIButton called done the user expected to dismiss the UIWebView and stop the music, here is a code snippet:
// points to the mp3 file path
NSURL *url = [NSURL fileURLWithPath:self.sFilePath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[web loadRequest:request];
When the user hit done I do the following:
[self.webview removeFromSuperview];
[self.webview release];
But that does not stop the music from playing, I noticed that loading mp3 files on UIWebView opens the QuickTime player is that correct way?
I am greatly appreciative of any guidance or help.
Looks like a dupe of Video/audio streaming does not stop even if UIWebView is closed - iPad
The solution there:
[self.webContent loadRequest:NSURLRequestFromString(#"about:blank")];
I suggest that you play the sound yourself using for example AVAudioPlayer (probably the easiest way to play and control sounds in iOS).
Something like this:
NSURL *url = [NSURL fileURLWithPath:self.sFilePath];
NSData *mySound = [NSData dataWithContentsOfURL:url];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:mySound error:NULL];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];
You can then stop the sound as simple as:
[audioPlayer stop];
or
[audioPlayer pause];
Don't forget to include the AVFoundation.framework in your project.