問題タブ [nsurlsessiondownloadtask]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - NSURLSessionDataTask と NSURLSessionDownloadTask の違いは何ですか?
最新のアップルNSURLSession
では、 の代わりに新しいものを導入しているため、異なるタスクがあり、NSURLConnection
の違いは何ですか?NSURLSessionDataTask
NSURLSessionDownloadTask
どのシナリオNSURLSessionTask
で、どこで使用しNSURLSessionDownloadTask
ますか?
ios - iOS のダウンロード中にビデオをストリーミング
iOS 7 を使用しており、アプリにダウンロードする必要がある .mp4 ビデオがあります。ビデオはサイズが大きい (~ 1 GB) ため、アプリの一部として含まれていません。ダウンロードが開始されるとすぐに、ユーザーがビデオの視聴を開始できるようにしたいと考えています。また、ユーザーが後で再度ダウンロードする必要がないように、ビデオを iOS デバイスにキャッシュできるようにしたいと考えています。ビデオを再生する通常の方法 (プログレッシブ ダウンロードとライブ ストリーミング) の両方で、ビデオをキャッシュできないようです。そのため、ビデオ ファイルをチャンクアップしてバイトをクライアントにストリーミングする独自の Web サービスを作成しました。NSURLConnection を使用してストリーミング HTTP 呼び出しを開始します。
データ チャンクを受信したら、ファイルのローカル コピーの末尾に追加します。
デバイスを実行すると、ファイルが正常にダウンロードされ、MPMoviePlayerViewController を使用して再生できます。
ただし、ファイルが完全にダウンロードされる前にプレーヤーを起動すると、ビデオは問題なく再生されます。上部のスクラバー バーに正しいビデオの長さが表示されます。しかし、ユーザーがビデオの開始前にダウンロードを完了したビデオの位置に到達すると、ビデオがハングします。MPMoviePlayerViewController を閉じて再度開くと、MPMoviePlayerViewController を再度起動したときの場所に到達するまでビデオが再生されます。ビデオ全体がダウンロードされるまで待つと、ビデオは問題なく再生されます。
これが発生したときにイベントが発生したり、エラー メッセージがコンソールに出力されたりしません (ビデオの開始後に MPMoviePlayerPlaybackStateDidChangeNotification と MPMoviePlayerPlaybackDidFinishNotification が送信されることはありません)。スクラバーが使用しているもの以外に、ビデオの長さをコントローラーに伝えているものが他にあるようです...
この問題の原因を知っている人はいますか? 私は MPMoviePlayerViewController を使用することに縛られていないので、この状況で別のビデオ再生方法が機能する場合は、それで十分です。
関連する未解決の質問:
AVURLAssets を使用した AVPlayer およびプログレッシブ ビデオ ダウンロード
更新 1 ビデオの再生が開始されたときのファイル サイズが原因で、実際にビデオが停止することがわかりました。この問題は、ダウンロードを開始する前にゼロ化されたファイルを作成し、途中で上書きすることで回避できます。私はビデオ ストリーミング サーバーを制御できるので、カスタム ヘッダーを追加して、ストリーミングされるファイルのサイズがわかるようにしました (ストリーミング ファイルのデフォルトのファイル サイズ ヘッダーは -1 です)。次のように、didReceiveResponse メソッドでファイルを作成しています。
これはうまく機能しますが、トランケートによってディスク上に ~1GB のファイルが作成される間、アプリが約 10 秒間ハングすることを除きます (シミュレーターでは瞬時に発生し、実際のデバイスでのみこの問題が発生します)。これは私が今行き詰まっている場所です-ファイルをより効率的に割り当てる方法、または実際に割り当てる必要なしにビデオプレーヤーにファイルのサイズを認識させる別の方法を知っている人はいますか? 一部のファイルシステムは「ファイルサイズ」と「ディスク上のサイズ」を2つの異なるプロパティとしてサポートしていることを知っています... iOSにそのようなものがあるかどうかわかりませんか?
afnetworking-2 - AFNetworking 2 で POST + パラメータを使用して認証済みファイルをダウンロードするにはどうすればよいですか?
認証済みのファイルをダウンロードする必要があります。私はこれをpython側に持っています:
Pythonリクエストライブラリ/ブラウザを使用すると、これはうまく機能します。
それから私はiOSでこれを持っています:
リクエストはパスしましたが、responseObject はnil
.
だから私は試してみます:
これはかなりの繰り返しです。そう:
1) NSURLSessionDownloadTask を使用して、パラメーターを送信することは可能self.session POST
ですか?
2) またはself.session POST
、ファイルを取得しますか?
php - PHP でディレクトリ一覧を返す
以下を使用して、サーバー上のすべてのテキスト ファイルのリストを返します。
私が抱えている問題は、アプリからこのphpファイルを実行すると、ディレクトリにテキストファイルが1つしかない場合、期待どおりにファイル名のJSONが返されますが、そのテキストファイルの名前を変更するか、追加のものを追加すると、引き続き元の実行時に存在したファイルの名前のみを返します。
私は PHP に非常に慣れていないので、毎回更新するのではなく、キャッシュされたデータを返すのか、それともアプリ側でそれが起こっているのか疑問に思っています。
アプリのコードは次のとおりです。
ありがとう!
cocoa-touch - アプリのバックグラウンドでもサポートされている NSURLSessionDownloadTask 同時ダウンロードが期待どおりに機能しない
要件:
コレクションビューを表示しているView Controllerクラスがあります。セルごとに、画像がローカルに既に存在するかどうかを確認しています。存在しない場合は、サーバーから画像をダウンロードして同じものを表示しようとしています。
実装:
以下は同じコードです。
セッション コントローラー クラスには、新しいダウンロード タスクを開始するための以下のメソッドがあります。
上記の方法では、successHandler と failureHandler ブロックをディクショナリに格納し、タスク識別子を使用してダウンロード タスクにマッピングしています。
以下は、didFinishDownloadingToURL メソッドの実装です。
私の問題は、上記の方法で downloadTask が setupAndStartDownloadTaskForProduct で開始されたものとは異なる識別子を返すことがあるため、successCompletionHandler が nil として取得され、ハンドラー ブロックを呼び出そうとするとアプリがクラッシュすることです。
今私の質問は次のとおりです。
didFinishDownloadingToURL で、setupAndStartDownloadTaskForProduct で開始されたものとは異なる識別子を取得するのはなぜですか?
これが予想される動作である場合、私の要件を実装する最良の方法は何ですか?
ios - NSURLSession を使用してイメージ ダウンロードの進行状況を取得したい場合、データに対してダウンロード メソッドを使用する必要がありますか?
ファイル システムからデータを取得する必要がないため、NSURLSession はデータのファンNSURLSessionDataTask
です。NSURLSessionDownloadTask
NSURLSessionDownloadTaskDelegateには、ダウンロードの進行状況を取得するためのメソッドがありますが、対応するデータにはないようです。ダウンロードの進行状況が必要な場合、使用する必要がありますNSURLSessionDownloadTask
か?
もしそうなら、私NSURLSessionDownloadTask
はダウンロードしたファイルを保存し、あなたがそれを取得することを理解しています. ファイルが保存されているこのディレクトリは時々空にする必要がありますか、それともアクセスするとすぐに (またはすぐに) 削除される一時ストアですか?
ios - NSData blob が NSURLSessionDownloadTask の resumeData として有効であることを確認するにはどうすればよいですか?
NSURLSession
新しいAPIでバックグラウンド ダウンロードを使用するアプリがあります。提供されている方法でダウンロードがキャンセルまたは失敗した場合、NSURLSessionDownloadTaskResumeData
後で再開できるようにデータ BLOB を保存します。ごくわずかな時間ですが、実際にクラッシュしていることに気付きます:
ここでエラーが発生します。ここで、resumeData
はNSData
ブロブで、session
は のインスタンスですNSURLSession
。
データは Apple API によって提供され、シリアル化され、後で逆シリアル化されます。壊れているかもしれませんが、(if ステートメントがチェックするように) nil になることはありません。
resumeData
アプリがクラッシュしないように、 が無効であることを事前に確認するにはどうすればよいですか?
ios - iOS downloadTaskWithRequest が iPhone のバックグラウンド セッションで呼び出されると nil を返し、シミュレーターで動作する
何か案は?
更新 9/12/14: この問題が再び発生し、グーグルで検索してこの SO 投稿を見つけたところ、私が質問の作成者であることがわかりました! 今回-URLSession:task:didCompleteWithError
は呼ばれることすらありませんでした。解決策は、電話を再起動することでした。これは Apple のバグに違いありません。iPhone 5sでiOS7を実行しています。