#ios #swift #flutter #libvlc
#iOS #быстрый #трепетать #libvlc
Вопрос:
Я пытаюсь создать приложение в flutter(для Android и IOS), которое может запускать несколько экземпляров VLC. Я выбираю vlc-плеер, потому что он может запускать как файл rtsp, так и файл.ts(требуется для моего проекта). В настоящее время я использую два экземпляра VLCPlayer в своем приложении flutter. И это прекрасно работает в Android, но это дает плохой доступ к памяти во время работы на симуляторе. Более подробная информация приведена ниже. Я хочу знать, можно ли запустить 2 или более экземпляров vlc-плеера в IOS, и если да, то как?
[✓] Flutter (Channel unknown, 2.5.3, on macOS 12.0.1 21A559 darwin-arm, locale en-IN) [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0) [✓] Xcode - develop for iOS and macOS [✓] Chrome - develop for the web [✓] Android Studio (version 2020.3) [✓] Android Studio (version 3.6) [✓] VS Code (version 1.62.3) [✓] Connected device (3 available)
Кое-что из моего кода флаттера
class _VlcPLayerInstance extends Statelt;VlcPLayerInstancegt; { late VlcPlayerController _controller; late VlcPlayerController _controller1; @override void initState() { // TODO: implement initState super.initState(); _controller = VlcPlayerController.asset("assets/images/video.mp4"); _controller1 = VlcPlayerController.asset("assets/images/video1.mp4"); } @override Widget build(BuildContext context) { return Container( child: Column( children: [ VlcPlayer(controller: _controller, aspectRatio: 1.78), VlcPlayer(controller: _controller1, aspectRatio: 1.78), ], ), ); } }
Вывод кода в Android выглядит следующим образом: Вывод на Android
Но приложение выходит из строя и выдает следующее исключение для того же кода в симуляторе IOS.
Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000030 Exception Codes: 0x0000000000000001, 0x0000000000000030 VM Region Info: 0x30 is not in any region. Bytes before following region: 4366811088 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---gt; __TEXT 104484000-1044b8000 [ 208K] r-x/r-x SM=COW ...er.app/Runner Exception Note: EXC_CORPSE_NOTIFY Termination Reason: SIGNAL 11 Segmentation fault: 11 Terminating Process: exc handler [15755] Triggered by Thread: 2 Thread 2 Crashed:: Dispatch queue: com.apple.opengl.cvmDoWork 0 libCoreVMClient.dylib 0x1ac31a82c cvmsServerElementBuild 432 1 libCoreVMClient.dylib 0x1ac31ab20 cvmsServerElementBuild 1188 2 libCoreVMClient.dylib 0x1ac316aec cvms_element_build_from_source 132 3 libCVMSPluginSupport.dylib 0x1ac30d680 cvm_deferred_build_modular(void*) 396 4 libdispatch.dylib 0x18010a6c8 _dispatch_client_callout 16 5 libdispatch.dylib 0x180111800 _dispatch_lane_serial_drain 652 6 libdispatch.dylib 0x180112384 _dispatch_lane_invoke 400 7 libdispatch.dylib 0x18011cb44 _dispatch_workloop_worker_thread 744 8 libsystem_pthread.dylib 0x1c7fdad58 _pthread_wqthread 284 9 libsystem_pthread.dylib 0x1c7fd9b10 start_wqthread 8
Кто-нибудь может помочь мне решить эту проблему? Для справки VLCPlayerPlugin во flutter использует MobileVLCKit(~gt; 3.3.17).
Комментарии:
1. Я думаю, что VLCKit применяет одноэлементный шаблон
2. Вы должны использовать один экземпляр VLCKit с несколькими экземплярами VLCMediaPlayer. Это хорошо поддерживается для одновременного воспроизведения нескольких носителей.