ios


AVAsset not recognising NSURL - Crashing - iOS


I am making an iOS app. One of its features is that it can save record and save audio files.
In order to save the URL's of the recorded audio files, I storing them in NSUserDefaults as filePaths like so:
file:///var/mobile/Containers/Data/Application/17F8E799-D7E1-4B3C-9DFE-7BA48E346314/Documents/recordName.aif
I am using a library called "FVSoundWaveDemo" to try and display a sound wave for the recorded file. But I have a problem with URL's...
The example in "FVSoundWaveDemo" loads a locally imported file like so:
NSString* filename = [NSString stringWithFormat:#"song1.m4a"];
NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:filename ofType:nil]];
_soundWaveView.soundURL = url;
You see the bit with "song1.m4a", well I want to replace that and get the app to use a filePath URL instead. Like the filePath URL I displayed above in my question.
I have tried all sort of things like trying to "convert" the filePath into a normal URL and trying to use AVAssets and so on. But everything I try just comes up with this error:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
And this is because the library I am using, uses AVAssets like so:
AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:songAsset error:&error];
AVAssetTrack* songTrack = [songAsset.tracks objectAtIndex:0];
NSDictionary* outputSettingsDict = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kAudioFormatLinearPCM],AVFormatIDKey,
[NSNumber numberWithInt:1],AVNumberOfChannelsKey,
[NSNumber numberWithInt:8],AVLinearPCMBitDepthKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsNonInterleaved,
nil];
So how an earth do I get an AVAsset to just work with a filePath URL?
Remember I am trying to get it to view a recorded audio file saved by the app, NOT a locally imported audio file which a developer can add into the Xcode project.
I have been stuck on this for days now, if you can help me, that would be much appreciated, thanks.
Thanks for your time, Dan.
Figured it out in the end. I made the following changes to get it to work:
1) I used fileURLWithPath instead of URLWithString like so:
NSURL *assetURL = [NSURL fileURLWithPath:passURL];
AVURLAsset *asset = [AVURLAsset assetWithURL:assetURL];
2) Before when I was saving the audio file URL, I got it to save as a NSString like so:
file:///var/mobile/Containers/Data/Application/17F8E799-D7E1-4B3C-9DFE-7BA48E346314/Documents/recordName.aif
This doesn't work when you want to use something like AVPlayer. Instead you have to make sure you save the URL so that it does NOT include "file:///" bit at the start of the string. In order to do this, make sure you save the string path value and not an NSURL of the string path like so:
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath_ = [searchPaths objectAtIndex:0];
NSString *pathToSave = [documentPath_ stringByAppendingPathComponent:#"audioName.aif"];
Now save "pathToSave" NSString to wherever you want and use that when you want to load the file. Doing this will result in the audio file URL being saved like so:
/var/mobile/Containers/Data/Application/45ABF4BD-FA0E-43F7-B936-7DE29D8F28ED/Documents/23Feb2015_074118pm.aif
You see it doesn't have the "file:///" bit at the start. This string will now work with part 1 of this answer.
Hope this helps anyone having similar issues to me.
something like this?
NSURL* assetURL = [NSURL URLWithString:#"file://your-file.aif"];
AVURLAsset* asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];

Related Links

Uploading video using AFNetworking causes memory issue
How whatsapp calling works in IOS?
Navigating to UITableViewController embedded with UINavigationController
Swift - return variable from within closure
CoreData: Observing Property Changes Behaves Differently
App sometimes crashed on start
How can I avoid the preview of password UITextField? [duplicate]
How to change background color of UIWebBrowserView in UIWebView in iOS8 Objective C
Store a variable in a conversation in iMessage Apps
IOS 10 UIImagePickerController Delegate Not Being Called
Podfile not downloading latest Swift 3 version of pods
Navigation Controller Shows Root View in Any Case
MKPolyline displays artifact/pixelation on map after zoom-in
Custom UITableViewCell isn't released or reused after navigation, memory leak
How to load image from camera or photo library in Swift [closed]
Query Session class with cloud code Parse

Categories

HOME
performance
asp.net-identity
redirect
whatsapp
coffeescript
copy
streaming
active-directory
spi
restsharp
build.gradle
coded-ui-tests
add-in
cross-compiling
rebus
ssrs-tablix
prerender
jquery-selectors
html-email
cmusphinx
rational
game-maker-language
spark-graphx
django-autocomplete-light
mlr
aspdotnetstorefront
scalability
sql-server-2014-express
plm
clappr
magento2.0.2
toastr
html-select
lifecycle
double-click-advertising
word-embedding
karnaugh-map
uservoice
zbar
android-touch-event
curly-braces
zenity
business-logic
jasny-bootstrap
turnjs
ckcontainer
balsamiq
rsh
webclient-download
sql-server-2016-express
duration
ota
occam-pi
text-alignment
symbian
crosswalk
polygons
selectsinglenode
bonfire
linegraph
culture
typesafe-activator
razor-2
prettyfaces
publish-actions
asp.net-apicontroller
requiredfieldvalidator
ramdisk
pdf-scraping
nawk
programmers-notepad
rte
memoization
visual-assist
kmz
memento
hiphop
rpn
vim-fugitive
ruby-1.9.2
openid4java
mdi
gemstone
process.start
boost-gil
datatemplate
paredit
xtratreelist
wmd
help-authoring

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App