screen_shot_page.dart 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'dart:typed_data';
  2. import 'dart:async';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
  5. import 'package:ijkplayer_example/i18n/i18n.dart';
  6. import 'dart:ui' as ui;
  7. class ScreenShotPage extends StatefulWidget {
  8. @override
  9. _ScreenShotPageState createState() => _ScreenShotPageState();
  10. }
  11. class _ScreenShotPageState extends State<ScreenShotPage> {
  12. IjkMediaController mediaController = IjkMediaController();
  13. ImageProvider provider;
  14. @override
  15. void initState() {
  16. super.initState();
  17. mediaController.setIjkPlayerOptions(
  18. [
  19. TargetPlatform.android,
  20. TargetPlatform.iOS,
  21. ],
  22. [
  23. // IjkOption(IjkOptionCategory.player, "mediacodec", 1),
  24. // IjkOption(IjkOptionCategory.player, "videotoolbox", 1),
  25. ],
  26. );
  27. mediaController.setDataSource(
  28. DataSource.network(
  29. "http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4"),
  30. // "rtmp://58.200.131.2:1935/livetv/hunantv"),
  31. autoPlay: true);
  32. }
  33. @override
  34. void dispose() {
  35. mediaController.dispose();
  36. super.dispose();
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. return Scaffold(
  41. appBar: AppBar(
  42. title: Text(currentI18n.screenshotTitle),
  43. ),
  44. body: ListView(
  45. children: <Widget>[
  46. AspectRatio(
  47. aspectRatio: 1280 / 720,
  48. child: IjkPlayer(
  49. mediaController: mediaController,
  50. ),
  51. ),
  52. FlatButton(
  53. child: Text(currentI18n.screenshotTitle),
  54. onPressed: () async {
  55. var uint8List = await mediaController.screenShot();
  56. if (uint8List == null) {
  57. return;
  58. }
  59. provider = MemoryImage(uint8List);
  60. setState(() {});
  61. },
  62. ),
  63. provider == null
  64. ? Container()
  65. : Image(
  66. image: provider,
  67. ),
  68. ],
  69. ),
  70. );
  71. }
  72. }
  73. Future<Size> getImageForUint8List(Uint8List imageSrc) {
  74. Completer<Size> completer = Completer();
  75. ui.decodeImageFromList(imageSrc, (img) {
  76. completer.complete(Size(img.width.toDouble(), img.height.toDouble()));
  77. img.dispose();
  78. });
  79. return completer.future;
  80. }