screen_shot_page.dart 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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", 0),
  24. ],
  25. );
  26. mediaController.setDataSource(
  27. DataSource.network(
  28. "http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4"),
  29. // "rtmp://58.200.131.2:1935/livetv/hunantv"),
  30. autoPlay: true);
  31. }
  32. @override
  33. void dispose() {
  34. mediaController.dispose();
  35. super.dispose();
  36. }
  37. @override
  38. Widget build(BuildContext context) {
  39. return Scaffold(
  40. appBar: AppBar(
  41. title: Text(currentI18n.screenshotTitle),
  42. ),
  43. body: ListView(
  44. children: <Widget>[
  45. AspectRatio(
  46. aspectRatio: 1280 / 720,
  47. child: IjkPlayer(
  48. mediaController: mediaController,
  49. ),
  50. ),
  51. FlatButton(
  52. child: Text(currentI18n.screenshotTitle),
  53. onPressed: () async {
  54. var uint8List = await mediaController.screenShot();
  55. if (uint8List == null) {
  56. return;
  57. }
  58. provider = MemoryImage(uint8List);
  59. setState(() {});
  60. },
  61. ),
  62. provider == null
  63. ? Container()
  64. : Image(
  65. image: provider,
  66. ),
  67. ],
  68. ),
  69. );
  70. }
  71. }
  72. Future<Size> getImageForUint8List(Uint8List imageSrc) {
  73. Completer<Size> completer = Completer();
  74. ui.decodeImageFromList(imageSrc, (img) {
  75. completer.complete(Size(img.width.toDouble(), img.height.toDouble()));
  76. img.dispose();
  77. });
  78. return completer.future;
  79. }