2017-08-03 6 views
1

私はSwift 3でiOSラジオアプリを作っています!今、それはうまくいっているすべてのurlアドレスオーディオを動かして再生しています。しかし私が職場にいるとき、WifiはPlayオーディオのストリーミングに制限があるため、アプリはMobile Dataで動作します。iOSデバイスでオーディオストリーミングURLを再生できない場合、どうすれば検出できますか? - swift3

再生ボタンをクリックすると、一時停止に変わり、サウンドは送信されません。再生されず、コンソールに接続エラーなどが表示されません。私はいくつかのWIFIネットワークのファイアウォールやプロキシが何らかのUIAlertを送信するために私のアプリをブロックしていることを知りたいのですが、PauseアイコンをPlayに変更したいのですが(もし私がそれをしなければ、ユーザーは音楽を待っています)。

私はSwift 3.0 Xcode 8、AVPlayerを使用してオーディオを再生しています。 .addPeriodicTimerObserverを試してみましたが、私はURLを検証して多くのことをしましたが、私が探している結果を得ることができませんでした。誰かが私を助けることができますか?

var urlStreaming:String = "http://someurl" 
playerStreaming = AVPlayer(url: URL(string: url)!) 
playerLayer = AVPlayerLayer(player: playerStreaming) 
playerLayer.frame = CGRect(x:0, y: 0, width:1, height: 10) 
self.view.layer.addsublayer(playerLayer) 

playerStreaming?.play() 

playerStreaming?.play()は私にそれを再生しようとしたが、いくつかの秒後に止まる起動し、それが何かを送信しないので、それを再生することはできません何も送信していないされていません。私は私の職場のWIFI接続を使用するときに起こりますが、私はそれをモバイルデータに変更すると、私はオーディオを聞くことができます。私は別の無線LAN接続、例えば私の家、公園またはスターバックスのコーヒーwifiから再生する場合、私は問題なくそれも聞くことができます。

私の職場でのWifi接続には、オーディオストリーミングの制限(ファイアウォールまたはプロキシによってブロックされていますが実際はわかりません)があることがわかりました。

私は多くのオプションを探していましたが、すべてを試しましたが、私が探している結果が得られました。

私を助けることができますか?

答えて

0

あなたはオブザーバー

deinit { 
    NotificationCenter.default.removeObserver(self) 
} 
+0

ありがとうございました!私は今それをチェックするつもりです!私はすでにそれを使用したと思うが、私は再びそれをテストするつもりです! :)私はviewDidLoad funcでそれを記述する必要がありますか?またはafter playerStreaming?.play() – Cristofer

+0

@Cristoferは、演奏を開始する前に、適切なときはいつでもオブザーバーを追加するだけで、イベントを受け取ることができます。 – zombie

+0

私は仲間と仕事しませんでした!とにかくありがとうございました!私は私の現在のソリューションの下に投稿しました、私は別のより良いものを見つけることを試みるつもりです! @ zombie – Cristofer

0

を削除するために取得しないために、私は私はそれを確認するために何かを見つけたと思う

NotificationCenter.default.addObserver(self, selector: #selector(playerItemFailedToPlay(_:)), name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime, object: nil) 

NotificationCenter.default.addObserver(self, selector: #selector(playerItemFailedToPlay(_:)), name: NSNotification.Name.AVPlayerItemPlaybackStalled, object: nil) 

func playerItemFailedToPlay(_ notification: Notification) { 
    let error = notification.userInfo?.first(where: { $0.value is Error }) as? Error 

} 

でエラーのために聞くことができます。あなたは@ゾンビって何? URLが有効かどうか、または再生にどれくらいかかるかを確認しました。

P.S.多分私はタイムアウト値を変更します、今それは多くの時間がかかります。

コンソールには示しています

エラー情報: - >エラードメイン= NSURLErrorDomainコード= -1001 "要求タイムアウト"。私は私のエラーがnullであるかどうかを検証することができると思う。 nullの場合はUIAlertを表示できます

let urltest = URL(string: yourul) 
    let task = URlSession.shared.dataTask(with: urlTest!){ 
    data, response, error in 

    if(error != nil){ 
    print("Error info: -> \(error!)") 

    //I think here I can changes the Image if i found a error 
    } 
    else{ 
    print("It is going to be play without problem") 
    } 
} 
+0

Iあなたが本当に – zombie

+0

@zombieはい!今、私はそれを開いたが、それはnilエラー==がする場合、私は、検証を追加することを何をする必要がありますあなたがデータをチェックするためにURLSessionを持つ2つの接続1を開いていると思うとAVPlayerと1再生しない場合は再生しようとするとすべて再生が停止し、再度再生するように画像が表示されます! – Cristofer

+0

それがうまくいくならば、それを保存しておきますが、avplayerから別のエラー通知があったことを覚えています。 int ernetが遅いと、リンクが有効であればアプリの応答が遅くなります – zombie

関連する問題