Видео заикается в webview на Android? - PullRequest
0 голосов
/ 07 января 2020

Я занимаюсь разработкой приложения, которое отображает веб-страницу веб-страницы, которая отображает видео 1080p в виде слайд-шоу. По какой-то причине я не могу заставить видео играть гладко в веб-просмотре. Если я играю одно и то же видео в таком приложении, как Kodi или VL C, оно воспроизводится очень плавно. Само устройство может обрабатывать до 4K видео. Но простое короткое видео 1080p плохо заикается при воспроизведении в android webview.

Приложение разработано во Flutter, и я попробовал и flutter_webview_plugin, и набор webview_flutter с тем же результатом.

У меня также есть android:hardwareAccelerated="true" в AndroidManifest.xml

Устройство представляет собой телевизионную коробку с Amlogi c S905X2 (4x Arm Cortex-A53 @ 1,80 ГГц + Mali-G31 MP2 + 4 ГБ RAM), который имеет оборудование, которое должно легко справиться с этим. Видеоролики в формате MP4 и небольшие, воспроизводятся хорошо везде.

Что еще можно попробовать?

1 Ответ

0 голосов
/ 08 января 2020

Я не уверен, почему вы хотите воспроизводить видео в WebView, а не в Flutter. Но вот пример потоковой передачи видео непосредственно во Flutter с использованием пакета video_player :

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';


void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: MyApp(),
      ),
    ),
  );
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  VideoPlayerController _videoPlayerController;
  bool _playing = false;

  @override
  void initState() {
    _videoPlayerController = VideoPlayerController.network("https://static.videezy.com/system/resources/previews/000/005/621/original/Coffee_Smokey_BRoll.mp4");
    _videoPlayerController.initialize();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _videoPlayerController.value.initialized
              ? AspectRatio(
                aspectRatio: _videoPlayerController.value.aspectRatio,
                child: VideoPlayer(_videoPlayerController),
              )
              : Container(),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                FlatButton.icon(
                  onPressed: () => _playing ? pauseVideo() : playVideo(),
                  icon: _playing ?  Icon(Icons.pause): Icon(Icons.play_arrow),
                  label: _playing ? Text('Pause') : Text('Play')
                ),
              ],
            ),
          ],
        ),
      )
    );
  }

  void playVideo(){
    _videoPlayerController.play();
    setState(() {
      _playing = true;
    });
  }

  void pauseVideo(){
    _videoPlayerController.pause();
    setState(() {
      _playing = false;
    });
  }
}

Я не был уверен, что, когда вы сказали, что слайд-шоу означает, что видео было слайд-шоу , или вы хотели, чтобы по нескольку слайдов воспроизводилось видео.

...