当前位置: 首页 > 知识库问答 >
问题:

使用视频播放器的文件构造函数的权限被拒绝

姜烨伟
2023-03-14

好的,我有一个相对简单的颤振程序来测试视频播放器插件(https://pub.dartlang.org/documentation/video_player/0.5.1/.)

当我为控制器使用“网络”或“资产”构造函数时,该播放器工作正常,但当我尝试使用“文件”构造函数时,会遇到权限拒绝错误。我指向的文件是一个mp4文件,它位于应用程序文档文件夹中。。。

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'dart:async';
import 'dart:io';
import 'package:path_provider/path_provider.dart';

void main() => runApp(new MyApp());

//WILL NOT CHANGE
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

//WILL CHANGE
class _MyAppState extends State<MyApp> {
  String _title = 'App Bar Demo';
  String _myState = 'NO STATE';

  VideoPlayerController _controller;
  bool _isPlaying = false;


  void setControllerDir() async{

  }

  Future<String> appDir() async{
  final directory = await getApplicationDocumentsDirectory();

  return directory.path;
  }


  void _pressed(String message) async {
    //CORRECT
    setState(() {
        _myState = message;
      }
    );
    var testPath = await appDir();
    print(testPath);
    //WRONG
    //_myState = message;
    print(_myState);
  }

  @override
  void initState() {
    super.initState();
    //_controller = new VideoPlayerController.network('http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_20mb.mp4',)

    //_controller = new VideoPlayerController.asset('assets/test.mp4')
    var file = new File('/data/user/0/com.example.videotest/app_flutter/test.mp4');
    //_controller = new VideoPlayerController.asset('assets/test.mp4')
    //final directory = await getApplicationDocumentsDirectory();

    _controller = new VideoPlayerController.file(file)

      ..addListener(() {
        final bool isPlaying = _controller.value.isPlaying;
        if (isPlaying != _isPlaying) {
          setState(() {
            _isPlaying = isPlaying;
          });
        }
      })
      ..initialize();
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: _title,
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text(_title),
          actions: <Widget>[
            new Text('text'),
            new IconButton(icon: new Icon(Icons.add_alert), onPressed: () {_pressed('Alert Pressed');}),
            new IconButton(icon: new Icon(Icons.print), onPressed: () {_pressed('Print Pressed');}),
            new IconButton(icon: new Icon(Icons.people), onPressed: () {_pressed('People Pressed');}),
            new RaisedButton(child: new Text('Button'),onPressed: () {_pressed('Button Pressed');}),

          ],
        ),
        body: new Container(
          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,
          ),
        ),       
      ),
    );
  }
}

我对Android和颤振开发还不熟悉。我尝试将外部存储权限添加到清单中,但没有帮助。无论如何,我正在运行颤振测试2和颤振医生检查良好。我在Android Studio的设备文件浏览器中使用上传程序添加了视频文件,我可以在那里看到该文件。任何线索都将不胜感激。谢谢:-D

共有1个答案

秦俊发
2023-03-14

好吧,让我澄清一下这里发生了什么,以防有人偶然发现这个问题,需要一些澄清。因此,我有一个简单的video_player应用程序示例,当我试图访问已上传到模拟器中使用Android Studio中的设备文件资源管理器的 /data/user/0/com.example.videotest/app_flutter目录中的视频文件时,该示例不起作用。我得到了许可拒绝错误。原来,我需要打开一个终端,并使用“adb”工具将视频文件“推送”到该目录,以便在文件上获得正确的权限,并获得视频控制器对象的文件构造函数来处理该文件。但是首先,我必须将adb deamon设置为root运行,以获得推送文件的权限。所以归结为...

adb root
adb push test.mp4 /data/user/0/com.example.videotest/app_flutter/
 类似资料:
  • 我想玩。iPhone应用程序中的mpd文件,为此我尝试了VLC播放器,但它没有按照预期工作,播放视频花费了太多时间。我还有其他选择吗。像Android中的exoplayer这样的mpd文件。 我已经为此目的实现了VLC媒体播放器,但现在我正在寻找另一种选择。如果有人对此有任何想法,请帮助。

  • 函数名称: 播放音频 函数功能: 在后台播放指定的声音文件 函数方法 media.playAudio(path,vol,flag) 参数 类型 必填 说明 path string 是 音频文件名,支持 mp3、m4a、m4r、ogg、wav vol string 否 音频音量,不写默认,使用当前设置的音量 flag string 否 是否循环播放,不写默认为 false - 不循环,true -

  • 我想使用html5视频标签嵌入一个视频: https://dl.dropboxusercontent.com/u/64454818/TMP/P6135199.MOV 我使用对其进行了转换: FFMPEG输出: 我尝试将其嵌入如下: 然而,Chrome不播放视频,只提供下载(和我转换视频之前一样)。Firefox也有同样的问题。 我已经测试和其他mp4文件(从我的手机)播放得很好。 有什么问题吗?我

  • 我一直试图在ShakaPlayer中播放加密的。WebM媒体文件,但没有太多成功,我在这里寻求任何经历过这一点的人的建议。如果这个很棒的开发人员社区有人能在这里指导我,那就太好了。 第1轮-我所尝试的(编码和虚线): 使用ffmpeg.将.mp4文件编码为多流Video.webm(VP9)&单流Audio.webm(Vorbis)文件 使用webm_tools/webm_dash_manifest

  • 我正在尝试使用HTTP直播(HLS)将视频流传输到我的电脑和iPhone。在阅读了苹果的“HTTP直播概述”以及“为iPhone和iPad创建和部署HTTP直播媒体的最佳实践”之后,我有点卡住了。 我获取了我的源文件(一个mkv),并使用ffmpeg对文件进行编码,采用MPEG-TS格式、苹果推荐的设置和基准3.0配置文件: 不用担心。我使用预编译的分段工具来分割视频并构建一个. m3u8播放列表

  • 媒体播放器类很好。然而,我无法播放存储在另一个类中的mp3文件(当鼠标单击时)。有人能检查我的密码吗? 这是我尝试用来播放音频文件的类: 当我运行程序时(在下面勾选的鼠标上),我得到了以下两个错误:错误1:线程“AWT-EventQueue-0”java.lang中的异常。不支持的操作异常:尚未实现错误2:线程“thread-3”java.llang中的例外。IllegalStateExcepti