我想创建一个应用程序,通过插入链接从 TikTok 下载视频。为此,我正在使用flutter_downloader。但存在一些问题,该应用程序能够从互联网下载视频,但不能从 TikTok 下载。以下是我的代码:
import 'dart:isolate';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late var link;
void _donwloadFile() async {
final status = await Permission.storage.request();
if (status.isGranted) {
final baseStorage = await getExternalStorageDirectory();
final id = await FlutterDownloader.enqueue(
url: link, savedDir: baseStorage!.path, fileName: 'tiktok');
} else {
print('No permission');
}
}
int progress = 0;
ReceivePort receivePort = ReceivePort();
@override
void initState() {
IsolateNameServer.registerPortWithName(
receivePort.sendPort, 'downloadingvideo');
receivePort.listen((message) {
setState(() {
progress = message;
});
});
FlutterDownloader.registerCallback(downloadCallback);
super.initState();
}
static downloadCallback(id, status, progress) {
SendPort? sendPort = IsolateNameServer.lookupPortByName('downloadingvideo');
sendPort!.send(progress);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Video downloader'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Form(
child: TextFormField(
onChanged: (value) {
link = value;
},
),
),
Text('Progress $progress'),
RaisedButton(
onPressed: _donwloadFile,
child: Text('Download'),
),
],
),
),
);
}
}
调试控制台显示以下,视频已下载但无法打开。为什么?我该如何解决这个问题并从 tiktok 应用程序下载视频?
W/IInputConnectionWrapper( 4651): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper( 4651): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper( 4651): endBatchEdit on inactive InputConnection
W/WM-WorkSpec( 4651): Backoff delay duration less than minimum value
D/DownloadWorker( 4651): DownloadWorker{url=https://www.tiktok.com/@vladislav_yakov/video/6956595997631892737?_d=secCgYIASAHKAESMgow%2FlW3AeCSCaPM6hdLUm%2BPjU0Xim0czh7I6uayePvbvXHWtgL3gXcierX3x9tdbuc7GgA%3D&checksum=410232a7120568f000d4015b3dc10070e1128ba0f1ded2a62be382432b08ea84&language=ru&preview_pb=0&sec_user_id=MS4wLjABAAAAyXFRcvDHlqNxeEuTzIQjd9NUjsSuafbMvzSwmuphgiUvKE8IzjtqPmosoNKKtbds&share_app_id=1233&share_item_id=6956595997631892737&share_link_id=3726C1E3-534D-400C-A49B-E77CB23A1088&source=h5_m×tamp=1626978174&tt_from=copy&u_code=de8ckb28feg459&user_id=6867433935988900865&utm_campaign=client_share&utm_medium=ios&utm_source=copy&_r=1,filename=tiktok,savedDir=/storage/emulated/0/Android/data/com.example.video_downloader/files,header=,isResume=false
D/DownloadWorker( 4651): Update notification: {notificationId: 19, title: tiktok, status: 2, progress: 0}
D/DownloadWorker( 4651): Open connection to https://www.tiktok.com/@vladislav_yakov/video/6956595997631892737?_d=secCgYIASAHKAESMgow%2FlW3AeCSCaPM6hdLUm%2BPjU0Xim0czh7I6uayePvbvXHWtgL3gXcierX3x9tdbuc7GgA%3D&checksum=410232a7120568f000d4015b3dc10070e1128ba0f1ded2a62be382432b08ea84&language=ru&preview_pb=0&sec_user_id=MS4wLjABAAAAyXFRcvDHlqNxeEuTzIQjd9NUjsSuafbMvzSwmuphgiUvKE8IzjtqPmosoNKKtbds&share_app_id=1233&share_item_id=6956595997631892737&share_link_id=3726C1E3-534D-400C-A49B-E77CB23A1088&source=h5_m×tamp=1626978174&tt_from=copy&u_code=de8ckb28feg459&user_id=6867433935988900865&utm_campaign=client_share&utm_medium=ios&utm_source=copy&_r=1
D/DownloadWorker( 4651): Content-Type = text/html; charset=utf-8
D/DownloadWorker( 4651): Content-Length = -1
D/DownloadWorker( 4651): Charset = UTF-8
D/DownloadWorker( 4651): fileName = tiktok
**D/DownloadWorker( 4651): Update notification: {notificationId: 19, title: tiktok, status: 2, progress: -215400}**
D/DownloadWorker( 4651): File downloaded (/storage/emulated/0/Download/tiktok (5))
D/MediaScannerConnection( 4651): Scanned /storage/emulated/0/Download/tiktok (5) to content://media/external_primary/file/45
D/DownloadWorker( 4651): File downloaded (/storage/emulated/0/Download/tiktok (5))
D/MediaScannerConnection( 4651): Scanned /storage/emulated/0/Download/tiktok (5) to content://media/external_primary/file/45
D/DownloadWorker( 4651): MediaStore updated (content://media/external_primary/file/45)
**D/DownloadWorker( 4651): There's no application that can open the file /storage/emulated/0/Download/tiktok (5)**
D/DownloadWorker( 4651): Update notification: {notificationId: 19, title: tiktok, status: 3, progress: 100}
**D/DownloadWorker( 4651): File downloaded**
I/WM-WorkerWrapper( 4651): Worker result SUCCESS for Work [ id=b7b8a0dd-ae95-42c2-9c71-cd6c42376d78, tags={ flutter_download_task, vn.hunghd.flutterdownloader.DownloadWorker } ]