2013-04-19 5 views
14

Nel mio codice devo utilizzare URLWithString per riprodurre video in streaming (HLS) e fileURLWithPath per riprodurre video locali.Qual è la differenza tra URLWithString e fileURLWithPath di NSURL?

Qual è la differenza tra questi due metodi? Come dovrei usare il metodo singolo per riprodurre entrambi i video.

Inoltre, ho bisogno di mostrare l'ultimo fotogramma come fermo immagine quando il video HSL termina. Ora mostra lo schermo vuoto quando finisce. Come devo raggiungere questo?

+0

"Inoltre, ho bisogno di mostrare l'ultimo fotogramma come immagine fissa quando il video HSL termina" Non correlato alla prima parte della domanda. Chiedilo come una domanda diversa! Due al prezzo di uno. – matt

risposta

15

+URLWithString: produce un NSURL che rappresenta la stringa come indicato. Quindi la stringa potrebbe essere @"http://www.google.com" e l'URL rappresenta http://www.google.com.

+fileURLWithPath: prende un percorso, non un URL e produce un NSURL che rappresenta il percorso utilizzando un URL file://. Quindi se lo dai a /foo/bar/baz l'URL rappresenterebbe file:///foo/bar/baz.

Ovviamente si può costruire una stringa URL file manualmente e passarlo al +URLWithString:, ma +fileURLWithPath: è più semplice da utilizzare quando si dispone già di un percorso, in quanto non si ha a che fare con la fuga la corda e costringere ad un Formato URL

+4

Solo per espandere l'ultima parte: un URL di file non è semplicemente un percorso con la parola "file" bloccata sul lato anteriore. Funzionano in modo molto diverso, ed è improbabile che un essere umano possa trattare correttamente le differenze. Il computer sì. – matt

1

La stessa cosa è successo nella mia app che utilizza AVAudioPlayer. Ho provato con [NSURL URLWithString:path] e ho scoperto che non riesce ad aprire determinati file mp3. Ho guardato in errore da una riga come [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] fileTypeHint:AVFileTypeMPEGLayer3 error:&error], ma l'errore era semplicemente nil

Tuttavia è stato risolto sostituendo l'url con [NSURL fileURLWithPath:path].

In entrambi i casi, il percorso path NSString * @"/var/mobile/Containers/Data/Application/4D96D4AE-2ED4-40B0-85D2-230E1AFA90E7/Documents/01-AudioTrack 01.mp3" 0x1457a8f0 Ancora non ne conosco il motivo, ma ora dovrei stare attento a utilizzare [NSURL URLWithString:].

PS. Nel documento NSURL di riferimento, Apple ha detto, come di seguito:

IMPORTANTE per creare oggetti NSURL per i percorsi di file system, utilizzare fileURLWithPath: isDirectory: invece.

che indica chiaramente [NSURL fileURLWithPath:] dovrebbe essere utilizzato per aprire il file, anche se [NSURL URLWithString] funziona anche per alcuni casi.