Flutter Dev نشر 1 فبراير 2023 أرسل تقرير نشر 1 فبراير 2023 تحيه طيبه للجميع قمت بعمل تطبيق صغير من خلال هذا التطبيق المستخدم يمكنه لصق رابط فيديو اليوتيوب ثم القيام بعملية تحميل هذا المقطع الى هاتفه المشكلة ان المقطع يتم تحميله ولكن لا يعمل يظهر مسج مع محاولة تشغيل هذا المقطع تفيد ان المقطع تالف أيضا وجدت ان حجم المقاطع تأتي ب صيغة كيلوبايت وذلك غير منطقي وليس حقيقي حيث ان المقطع طويل جدا كان من المفترض ان احصل على ميجابايت ك حجم للمقطع اذا احد يعرف حل للمشكلة يفيدنا بذلك الكود المستعمل كالتالي: class DownloadPage extends StatefulWidget { @override _DownloadPageState createState() => _DownloadPageState(); } class _DownloadPageState extends State<DownloadPage> { TextEditingController _linkController = TextEditingController(); bool _isLoading = false; double _progress = 0; Future<void> _downloadVideo(String link) async { setState(() { _isLoading = true; }); // Check for storage permission var status = await Permission.storage.status; if (status.isDenied) { await Permission.storage.request(); } // Get the directory to store the video final directory = await getExternalStorageDirectory(); final filePath = directory!.path + '/video.mp4'; // Download the video var response = await http.get(Uri.parse (link)); var file = File(filePath); await file.writeAsBytes(response.bodyBytes); setState(() { _isLoading = false; _progress = 0; }); // Show a success message showDialog( context: context, builder: (context) => AlertDialog( title: Text('Download Complete'), content: Text('Video has been saved to $filePath'), actions: [ ElevatedButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Download Video'), ), body: Padding( padding: EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ TextField( controller: _linkController, decoration: InputDecoration( hintText: 'Enter YouTube link', ), ), SizedBox(height: 16.0), _isLoading ? Column( children: [ LinearProgressIndicator( value: _progress, ), SizedBox(height: 16.0), Text('$_progress %'), ], ) : ElevatedButton( child: Text('Download'), onPressed: () { _downloadVideo(_linkController.text); }, ), ], ), ), ); } } 1 اقتباس
0 بلال زيادة نشر 1 فبراير 2023 أرسل تقرير نشر 1 فبراير 2023 فيما يتعلق بالرسالة التي تشير إلى تلف المقطع ، فمن المحتمل أن يكون ذلك بسبب عدم فك تشفير الفيديو أو كتابته بشكل صحيح في الملف. لإصلاح هذه المشكلة ، يمكنك محاولة استخدام مكتبة مثل flutter_video_compress أو video_player لفك تشفير الفيديو وتشغيله. import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:flutter_video_compress/flutter_video_compress.dart'; import 'package:path_provider/path_provider.dart'; import 'package:video_player/video_player.dart'; class DownloadPage extends StatefulWidget { @override _DownloadPageState createState() => _DownloadPageState(); } class _DownloadPageState extends State<DownloadPage> { TextEditingController _linkController = TextEditingController(); VideoPlayerController _videoPlayerController; bool _isLoading = false; double _progress = 0; Future<void> _downloadVideo(String link) async { setState(() { _isLoading = true; }); final directory = await getTemporaryDirectory(); final tempPath = directory.path + '/temp_video.mp4'; var response = await http.get(Uri.parse(link)); var file = File(tempPath); await file.writeAsBytes(response.bodyBytes); final videoCompress = FlutterVideoCompress(); final result = await videoCompress.compressVideo(tempPath, quality: VideoQuality.LowQuality); final videoPath = result["videoPath"]; _videoPlayerController = VideoPlayerController.file(File(videoPath)) ..initialize().then((_) { setState(() {}); }); setState(() { _isLoading = false; _progress = 0; }); showDialog( context: context, builder: (context) => AlertDialog( title: Text('Download Complete'), content: Text('Video has been saved to $videoPath'), actions: [ ElevatedButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Download Video'), ), body: Padding( padding: EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ TextField( controller: _linkController, decoration: InputDecoration( hintText: 'Enter YouTube link', ), ), SizedBox(height: 16.0), _isLoading ? Column( children: [ LinearProgressIndicator( value: _progress, ), SizedBox(height: 16.0), Text('$_progress %'), ], ) : ElevatedButton( child: Text('Download'), onPressed: () { _downloadVideo(_linkController.text); }, ), ], ), ), ); } } اقتباس
السؤال
Flutter Dev
تحيه طيبه للجميع
قمت بعمل تطبيق صغير من خلال هذا التطبيق المستخدم يمكنه لصق رابط فيديو اليوتيوب ثم القيام بعملية تحميل هذا المقطع الى هاتفه
المشكلة ان المقطع يتم تحميله ولكن لا يعمل يظهر مسج مع محاولة تشغيل هذا المقطع تفيد ان المقطع تالف
أيضا وجدت ان حجم المقاطع تأتي ب صيغة كيلوبايت وذلك غير منطقي وليس حقيقي
حيث ان المقطع طويل جدا كان من المفترض ان احصل على ميجابايت ك حجم للمقطع
اذا احد يعرف حل للمشكلة يفيدنا بذلك
الكود المستعمل كالتالي:
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.