首页 > 解决方案 > 通过插入视频链接从 tiktok 下载视频。颤振/飞镖

问题描述

我想创建一个应用程序,通过插入链接从 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&timestamp=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&timestamp=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 } ]

标签: flutterurltiktokblob-video-download

解决方案


推荐阅读