質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1939閲覧

【AVplayer】API上の.cafファイルを再生したい

kaorimanabe

総合スコア13

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/07/19 05:53

編集2017/07/19 06:02

apiの音声ファイルをiOSで再生したいのですが、
下記のコードだと、API上のmp3ファイルは再生できるものの、API上のcafファイルは再生できません。解決方法を教えていただけませんでしょうか?

※ログにはエラーメッセージが吐き出されません。cafを再生しようとするとsumilatorが落ちて、debag navigatorが開きます。AutdioFileStreamPackets(void* unsigned int, unsigned int, void const*, AudioStreamPacketDescription*)という部分がハイライトされており、あるthreadにEXC_BAD_ACCESSと表示されています。
※ API上(server上)のcafファイルを手動で手元にダウンロードし、bundleディレクトリに配置した場合は再生できました。

  • code
@IBAction func playButton(_ sender: Any) { // AVplayerの準備 // mp3だと再生できる let url = "https://hogeapi.com/hogehoge.mp3" // cafだと再生できない // let url = "https://hogeapi.com/hogehoge.caf" let audioURL = NSURL(string: url) let avAsset = AVURLAsset(url: audioURL! as URL) let playerItem = AVPlayerItem(asset: avAsset) let player = AVPlayer(playerItem: playerItem) // 音声再生 let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = self.view.bounds self.view.layer.addSublayer(playerLayer) player.play() }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ykws

2017/07/19 08:34

サーバ側 API はオープンなものではなく、載せることはできないでしょうか?
kaorimanabe

2017/07/19 10:35

はい。残念ながら、自分で作成した非公開APIです。
guest

回答2

0

ベストアンサー

content-typeについて回答します。

APIを介さず、サーバ上のcafファイルを直接指定した場合は、動作することは確認されていると思います。
私の環境では、直リンした際のレスポンスヘッダは以下のようになりました。

cafの場合

HTTP/1.1 200 OK date: Wed, 19 Jul 2017 11:25:19 GMT server: Apache/2.4.7 (Ubuntu) last-modified: Wed, 19 Jul 2017 08:25:18 GMT etag: "226ae00-554a75f447ef8" accept-ranges: bytes content-length: 36089344 keep-alive: timeout=5, max=100 X-BACKEND: apps-proxy

content-typeは無くても動いているようですが、APIで付与してやるならaudio/x-cafでしょうかね。

参考: mp3の場合

HTTP/1.1 200 OK date: Wed, 19 Jul 2017 11:24:45 GMT server: Apache/2.4.7 (Ubuntu) last-modified: Wed, 19 Jul 2017 08:25:18 GMT etag: "31f14e-554a75f49fd38" accept-ranges: bytes content-length: 3273038 keep-alive: timeout=5, max=100 content-type: audio/mpeg X-BACKEND: apps-proxy

投稿2017/07/19 11:46

izkn

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaorimanabe

2017/07/19 13:04

audio/x-cafでひとまず試してみようと思います。ありがとうございます。 djangoのrest_frameworkでaudio/x-cafの設定がうまくいかずにはまってますが、試行錯誤してみます。
ykws

2017/07/19 13:12

django のタグで新しく質問し直してみては。
guest

0

このとき API 経由でダウンロードしていないなら、サーバ側の処理の問題だと思います。

API上(server上)のcafファイルを手動で手元にダウンロードし、bundleディレクトリに配置した場合は再生できました。

投稿2017/07/19 08:35

ykws

総合スコア1236

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaorimanabe

2017/07/19 10:38 編集

そうですね。このときは、API経由せずにcafファイルをダウンロードさせました。 サーバ側の設定で、mimeTypeを `audio/mp3`にしていることが問題なのかとも思っていましたが、mimeTypeにcafがないのでどうして良いかわからずでして。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問