main.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
  3. import 'package:photo/photo.dart';
  4. import 'package:photo_manager/photo_manager.dart';
  5. void main() => runApp(MyApp());
  6. class MyApp extends StatefulWidget {
  7. @override
  8. _MyAppState createState() => _MyAppState();
  9. }
  10. class _MyAppState extends State<MyApp> {
  11. @override
  12. Widget build(BuildContext context) {
  13. return MaterialApp(
  14. home: HomePage(),
  15. );
  16. }
  17. }
  18. class HomePage extends StatefulWidget {
  19. @override
  20. HomePageState createState() => HomePageState();
  21. }
  22. class HomePageState extends State<HomePage> {
  23. IjkMediaController controller = IjkMediaController();
  24. @override
  25. void initState() {
  26. super.initState();
  27. }
  28. @override
  29. void dispose() {
  30. controller.dispose();
  31. super.dispose();
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. return Scaffold(
  36. appBar: AppBar(
  37. title: const Text('Plugin example app'),
  38. actions: <Widget>[
  39. IconButton(
  40. icon: Icon(Icons.videocam),
  41. onPressed: _pickVideo,
  42. ),
  43. ],
  44. ),
  45. body: Container(
  46. // width: MediaQuery.of(context).size.width,
  47. // height: 400,
  48. child: Column(
  49. children: <Widget>[
  50. AspectRatio(
  51. aspectRatio: 1280 / 720,
  52. child: IjkPlayer(
  53. controller: controller,
  54. ),
  55. ),
  56. ],
  57. ),
  58. ),
  59. floatingActionButton: FloatingActionButton(
  60. child: Icon(Icons.play_arrow),
  61. onPressed: () async {
  62. await controller.setDataSource(
  63. 'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4',
  64. // 'rtmp://172.16.100.245/live1',
  65. // 'https://www.sample-videos.com/video123/flv/720/big_buck_bunny_720p_10mb.flv',
  66. // 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/playlist.m3u8',
  67. // "file:///sdcard/Download/Sample1.mp4",
  68. );
  69. print("set data source success");
  70. controller.play();
  71. },
  72. ),
  73. );
  74. }
  75. void _pickVideo() async {
  76. List<AssetEntity> imgList = await PhotoPicker.pickAsset(
  77. // BuildContext required
  78. context: context,
  79. /// The following are optional parameters.
  80. themeColor: Colors.green,
  81. // the title color and bottom color
  82. padding: 1.0,
  83. // item padding
  84. dividerColor: Colors.grey,
  85. // divider color
  86. disableColor: Colors.grey.shade300,
  87. // the check box disable color
  88. itemRadio: 0.88,
  89. // the content item radio
  90. maxSelected: 8,
  91. // max picker image count
  92. // provider: I18nProvider.english,
  93. provider: I18nProvider.chinese,
  94. // i18n provider ,default is chinese. , you can custom I18nProvider or use ENProvider()
  95. rowCount: 3,
  96. // item row count
  97. textColor: Colors.white,
  98. // text color
  99. thumbSize: 160,
  100. // preview thumb size , default is 64
  101. sortDelegate: SortDelegate.common,
  102. // default is common ,or you make custom delegate to sort your gallery
  103. checkBoxBuilderDelegate: DefaultCheckBoxBuilderDelegate(
  104. activeColor: Colors.white,
  105. unselectedColor: Colors.white,
  106. ),
  107. // default is DefaultCheckBoxBuilderDelegate ,or you make custom delegate to create checkbox
  108. badgeDelegate: const DurationBadgeDelegate(),
  109. // badgeDelegate to show badge widget
  110. pickType: PickType.onlyVideo,
  111. );
  112. if (imgList != null && imgList.isNotEmpty) {
  113. var asset = imgList[0];
  114. var fileUri = (await asset.file).uri;
  115. playUri(fileUri.toString());
  116. }
  117. }
  118. void playUri(String uri) async {
  119. await controller.setDataSource(uri);
  120. print("set data source success");
  121. controller.play();
  122. }
  123. }