network.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
  3. import 'package:ijkplayer_example/i18n/i18n.dart';
  4. class NetworkPage extends StatefulWidget {
  5. @override
  6. _NetworkPageState createState() => _NetworkPageState();
  7. }
  8. class _NetworkPageState extends State<NetworkPage> {
  9. TextEditingController editingController = TextEditingController();
  10. IjkMediaController mediaController = IjkMediaController();
  11. @override
  12. void initState() {
  13. super.initState();
  14. editingController.text =
  15. "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_30mb.mp4";
  16. // editingController.text =
  17. // "http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4";
  18. // editingController.text =
  19. // "https://media001.geekbang.org/f433fd1ce5e84d27b1101f0dad72a126/de563bb4aba94b5f95f448b33be4dd9f-9aede6861be944d696fe365f3a33b7b4-sd.m3u8";
  20. mediaController
  21. .setIjkPlayerOptions([TargetPlatform.android], createIJKOptions());
  22. // editingController.text = "http://222.207.48.30/hls/startv.m3u8";
  23. // editingController.text = "rtmp://172.16.100.245:1935/live1";
  24. // editingController.text = "http://172.16.100.245:5000/meng.mp4";
  25. // editingController.text = "http://172.16.100.245:5000/sample1.mp4";
  26. // editingController.text =
  27. // "http://172.16.100.245:5000/05-2%20ffmpeg%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8Log%E7%B3%BB%E7%BB%9F.mp4";
  28. // editingController.text =
  29. // "http://172.16.100.245:5000/09-01%20%E7%AC%AC%E4%B8%80%E4%B8%AAJNI%E7%A8%8B%E5%BA%8F.mp4";
  30. // editingController.text = "http://172.16.100.245:5000/trailer.mp4";
  31. }
  32. @override
  33. void dispose() {
  34. editingController.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.networkButton),
  43. ),
  44. body: ListView(
  45. children: <Widget>[
  46. Row(
  47. children: <Widget>[
  48. Expanded(
  49. child: TextField(
  50. controller: editingController,
  51. ),
  52. ),
  53. FlatButton(
  54. child: Text(currentI18n.play),
  55. onPressed: _playInput,
  56. ),
  57. ],
  58. ),
  59. Container(
  60. height: 400,
  61. child: IjkPlayer(
  62. mediaController: mediaController,
  63. ),
  64. ),
  65. ],
  66. ),
  67. );
  68. }
  69. void _playInput() async {
  70. var text = editingController.text;
  71. await mediaController.setNetworkDataSource(text, autoPlay: true);
  72. }
  73. }
  74. Set<IjkOption> createIJKOptions() {
  75. return <IjkOption>[
  76. IjkOption(IjkOptionCategory.player, "mediacodec", 0),
  77. IjkOption(IjkOptionCategory.player, "opensles", 0),
  78. IjkOption(IjkOptionCategory.player, "overlay-format", 0x32335652),
  79. IjkOption(IjkOptionCategory.player, "framedrop", 1),
  80. IjkOption(IjkOptionCategory.player, "start-on-prepared", 0),
  81. IjkOption(IjkOptionCategory.format, "http-detect-range-support", 0),
  82. IjkOption(IjkOptionCategory.codec, "skip_loop_filter", 48),
  83. ].toSet();
  84. }