трепетать аудио плеер воспроизводить звук не работает в IOS - PullRequest
0 голосов
/ 14 октября 2018

Я использую плагин флаттера аудиоплееры: ^ 0.7.8, приведенный ниже код работает в Android, но не работает в IOS.Я запускаю код в реальном устройстве IOS и нажимаю кнопку.Предполагается, что воспроизведение файла mp3, но нет звука вообще.Пожалуйста, помогите решить эту проблему.

Я уже настроил info.plist

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Здесь с распечаткой из консоли:

  • флаттер:загрузка завершена, uri = file: ///var/mobile/Containers/Data/Application/E3A576E2-0F21-44CF-AF99-319D539767D0/Library/Caches/demo.mp3
  • Синхронизация файлов на устройстве iPhone ...
  • трепетание: _platformCallHandler вызывает audio.onCurrentPosition {playerId: 273e1d27-b6e8-4516-bb3f-967a41dff308, значение: 0}
  • трепетание: _platformCallHandler вызывать audio.eed: 271d6: b1-4516-bb3f-967a41dff308, значение: AVPlayerItemStatus.failed}

Здесь с моим кодом:

class _MyHomePageState extends State<MyHomePage> {
  AudioPlayer audioPlugin = AudioPlayer();
  String mp3Uri;

  @override
  void initState() {
    AudioPlayer.logEnabled = true;
    _load();
  }

  Future<Null> _load() async {
    final ByteData data = await rootBundle.load('assets/demo.mp3');
    Directory tempDir = await getTemporaryDirectory();
    File tempFile = File('${tempDir.path}/demo.mp3');
    await tempFile.writeAsBytes(data.buffer.asUint8List(), flush: true);
    mp3Uri = tempFile.uri.toString();
    print('finished loading, uri=$mp3Uri');
  }

  void _playSound() {
    if (mp3Uri != null) {
      audioPlugin.play(mp3Uri, isLocal: true,
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Audio Player Demo Home Page'),
      ),
      body: Center(),
      floatingActionButton: FloatingActionButton(
        onPressed: _playSound,
        tooltip: 'Play',
        child: const Icon(Icons.play_arrow),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 28 октября 2018

Если вы хотите использовать локальный файл, вы должны использовать AudioCache.

Глядя на документацию, внизу написано:

AudioCache

Для воспроизведения локальных активов вы должны использовать класс AudioCache.

Flutter не предоставляет простой способ воспроизведения аудио на ваших активах, но этот класс очень помогает.Он фактически копирует ресурс во временную папку на устройстве, где он затем воспроизводится как локальный файл.

Он работает как кэш, поскольку отслеживает скопированные файлы, так что вы можете воспроизвести их без задержки.

Чтобы воспроизвести звук, я понял, что нам нужно сделать:

import 'package:flutter/material.dart';
import 'package:audioplayers/audio_cache.dart';

AudioCache audioPlayer = AudioCache();

void main() {
  runApp(new MyApp());
}




class MyApp extends StatefulWidget {
  @override _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override initState(){
    super.initState();
    audioPlayer.play("Jingle_Bells.mp3");
  }
  @override Widget build(BuildContext context) {
    //This we do not care about
  }
}

Важно:

Он автоматически размещает «активы /» перед вашим путем.Это означает, что если вы хотите загрузить assets/Jingle_Bells.mp3, вы просто положите audioPlayer.play("Jingle_Bells.mp3");.Если вы введете audioPlayer.play("assets/Jingle_Bells.mp3"); вместо этого, AudioPlayers фактически загрузит вместо него assets/assets/Jingle_Bells.mp3.

``

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...