Flutter VideoPlayer初始化及播放时TCP输出抑制方法咨询
关于VideoPlayerController初始化后出现网络日志的问题
这是预期现象吗?
没错,这类日志是完全正常的预期输出!它并不是video_player插件本身打印的内容,而是iOS系统底层CFNetwork框架输出的网络连接状态诊断信息,用来记录网络连接的路径、耗时、数据包传输等细节。在初始化网络视频控制器和播放过程中,系统会自动触发这类网络状态上报,所以会多次出现。
能不能抑制这类输出?
当然可以,这类日志主要出现在iOS平台(Android端一般不会有这类问题),给你几种可行的方法:
通过Xcode项目配置全局关闭:
- 打开Flutter项目下的iOS子项目(
ios目录) - 找到
Info.plist文件,添加一组新的键值对:- 键:
OS_ACTIVITY_MODE - 值:
disable
这个设置会全局关闭iOS系统的活动日志输出,包括这类CFNetwork的网络日志。不过要注意,这会关闭所有系统层面的活动日志,可能会影响其他场景的调试,调试完成后可以再改回来。
- 键:
- 打开Flutter项目下的iOS子项目(
通过Xcode Scheme临时关闭:
- 在Xcode中打开项目的Scheme(顶部工具栏的Scheme选择框,点击
Edit Scheme) - 切换到
Run标签页,选择Arguments选项卡 - 在
Environment Variables区域,点击+号,添加OS_ACTIVITY_MODE,值设为disable
这种方式是临时生效的,只针对当前Scheme的运行实例,不会修改项目配置文件,适合临时调试时使用。
- 在Xcode中打开项目的Scheme(顶部工具栏的Scheme选择框,点击
Flutter命令行运行时指定参数:
如果用Flutter命令行启动项目,可以直接添加环境变量参数:flutter run --ios-env OS_ACTIVITY_MODE=disable这种方式也是临时生效,适合快速测试时快速屏蔽日志。
附你的代码与日志参考
你提到的控制台输出日志:
[43.1 9320C4C3-349A-420C-B60D-4074259E7BF1 10.0.0.7.63778<->52.72.148.144:80] Connected Path: satisfied (Path is satisfied), interface: en0 Duration: 30.601s, DNS @0.000s took 0.041s, TCP @0.042s took 0.001s bytes in/out: 638/386, packets in/out: 1/1, rtt: 0.066s, retransmitted packets: 0, out-of-order packets: 0
你的示例代码:
class _MyHomePageState extends State<MyHomePage> { VideoPlayerController _controller; bool _isPlaying = false; @override void initState() { super.initState(); _controller = new VideoPlayerController.network( 'http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_20mb.mp4', )..addListener(() { final bool isPlaying = _controller.value.isPlaying; if (isPlaying != _isPlaying) { setState(() { _isPlaying = isPlaying; }); } })..initialize(); // <-- This is the line that first prints the output } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text(widget.title), ), body: new Center( child: new Padding( padding: const EdgeInsets.all(10.0), child: new AspectRatio( aspectRatio: 1280 / 720, child: new VideoPlayer(_controller), ), ), ), floatingActionButton: new FloatingActionButton( onPressed: _controller.value.isPlaying ? _controller.pause : _controller.play, child: new Icon( _controller.value.isPlaying ? Icons.pause : Icons.play_arrow, ), ), ); } }
内容的提问来源于stack exchange,提问作者Mike Miller
相关产品推荐
相关产品推荐

