我目前正在开发一个 Flutter 项目,在该项目中我使用 VlcPlayerController 实现了一个视频播放器组件来流式传输 RTSP 视频源。虽然一切似乎在 iOS 和 Android 模拟器上都能完美运行,但我在物理设备上测试时遇到了问题,在 iOS 和 Android 上观察到不同的行为:
iOS 设备:包含视频播放器的页面已加载,但播放器本身从未出现,只留下播放器应在的空白区域。 Android 设备:应用程序甚至在到达视频播放器页面之前就突然崩溃。 我已确保控制台中没有任何错误消息可以提供有关可能出现问题的提示。这让我很困惑为什么模拟器和物理设备行为之间存在这种差异。
鉴于该组件在模拟器上按预期工作,我倾向于认为这可能与硬件加速、权限或某种仅在物理设备上强制执行的网络安全策略有关。
还有其他人在物理设备上的 Flutter 中遇到过 VlcPlayerController 或 RTSP 流的类似问题吗?任何有关潜在原因的见解或故障排除步骤的建议将不胜感激。
这是我的代码的简化版本供参考:
class RTSPVideoPlayer extends StatefulWidget {
@override
_RTSPVideoPlayerState createState() => _RTSPVideoPlayerState();
}
class _RTSPVideoPlayerState extends State<RTSPVideoPlayer> {
late VlcPlayerController _vlcPlayerController;
@override
void initState() {
super.initState();
_vlcPlayerController = VlcPlayerController.network(
'rtsp://example.com/stream',
autoPlay: true,
options: VlcPlayerOptions(),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: VlcPlayer(
controller: _vlcPlayerController,
aspectRatio: 16 / 9,
placeholder: Center(child: CircularProgressIndicator()),
),
);
}
@override
void dispose() {
_vlcPlayerController.dispose();
super.dispose();
}
}
您需要在 Apple 开发者帐户的证书区域中向 Apple 开发者计划请求多播。它是一个网络表单。然后苹果最终会做出回应,然后你就可以将其添加到 Xcode 中。它对我有效,但仅适用于 WiFi 网络,不适用于 4G/5G。