diff --git a/lib/my_flutter_drag_scale/example/ios/Flutter/Generated.xcconfig b/lib/my_flutter_drag_scale/example/ios/Flutter/Generated.xcconfig
deleted file mode 100644
index 187943c..0000000
--- a/lib/my_flutter_drag_scale/example/ios/Flutter/Generated.xcconfig
+++ /dev/null
@@ -1,7 +0,0 @@
-// This is a generated file; do not edit or check into version control.
-FLUTTER_ROOT=/Users/majialun/Documents/flutter/flutter
-FLUTTER_APPLICATION_PATH=/Users/majialun/Desktop/github/flutter_drag_scale/example
-FLUTTER_TARGET=lib/main.dart
-FLUTTER_BUILD_DIR=build
-SYMROOT=${SOURCE_ROOT}/../build/ios
-FLUTTER_FRAMEWORK_DIR=/Users/majialun/Documents/flutter/flutter/bin/cache/artifacts/engine/ios
diff --git a/lib/my_flutter_superplayer/CHANGELOG.md b/lib/my_flutter_superplayer/CHANGELOG.md
index 23b1079..172915c 100644
--- a/lib/my_flutter_superplayer/CHANGELOG.md
+++ b/lib/my_flutter_superplayer/CHANGELOG.md
@@ -1,7 +1,12 @@
+## 0.0.3
+
+- 增加 `setTitle` 方法,用于设置视频标题
+- 增加 `setCoverImage` 方法,用于设置视频封面
+
## 0.0.2
-* Add `setLoop` support
+- Add `setLoop` support
## 0.0.1
-* Initial release.
+- Initial release.
diff --git a/lib/my_flutter_superplayer/README.md b/lib/my_flutter_superplayer/README.md
index d07c773..5ae2edd 100644
--- a/lib/my_flutter_superplayer/README.md
+++ b/lib/my_flutter_superplayer/README.md
@@ -26,7 +26,7 @@
```yaml
dependencies:
- flutter_superplayer: ^0.0.1
+ flutter_superplayer: ^0.0.3
```
或
diff --git a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java
index 4725375..7c7ef89 100644
--- a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java
+++ b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java
@@ -615,6 +615,15 @@ public class SuperPlayerView extends RelativeLayout {
}
}
+ public void setTitle(String title) {
+ this.updateTitle(title);
+ }
+
+ public void setCoverImage(String coverImageUrl) {
+ this.mWindowPlayer.setBackground(coverImageUrl);
+ this.mWindowPlayer.showBackground();
+ }
+
public void uiHideDanmu() {
mFullScreenPlayer.hideDanmu();
}
@@ -729,7 +738,6 @@ public class SuperPlayerView extends RelativeLayout {
mPlayerViewCallback.onPlayStateChange(SuperPlayerDef.PlayerState.PLAYING);
mWindowPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING);
mFullScreenPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING);
- updateTitle(name);
mWindowPlayer.hideBackground();
if (mDanmuView != null && mDanmuView.isPrepared() && mDanmuView.isPaused()) {
mDanmuView.resume();
diff --git a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/AbsPlayer.java b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/AbsPlayer.java
index 53cde5e..f0eab5f 100644
--- a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/AbsPlayer.java
+++ b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/AbsPlayer.java
@@ -93,6 +93,11 @@ public abstract class AbsPlayer extends RelativeLayout implements Player {
@Override
public void setBackground(Bitmap bitmap) {
+ }
+
+ @Override
+ public void setBackground(String imageUrl) {
+
}
@Override
diff --git a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/Player.java b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/Player.java
index 6bf942b..6db66af 100644
--- a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/Player.java
+++ b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/Player.java
@@ -94,6 +94,8 @@ public interface Player {
*/
void setBackground(final Bitmap bitmap);
+ void setBackground(final String imageUrl);
+
/**
* 显示背景
*/
diff --git a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/WindowPlayer.java b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/WindowPlayer.java
index 97e3478..d4b8129 100644
--- a/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/WindowPlayer.java
+++ b/lib/my_flutter_superplayer/android/src/main/java/com/tencent/liteav/demo/superplayer/ui/player/WindowPlayer.java
@@ -3,7 +3,9 @@ package com.tencent.liteav.demo.superplayer.ui.player;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
+import android.os.AsyncTask;
import android.os.Build;
import android.util.AttributeSet;
import android.view.GestureDetector;
@@ -23,6 +25,9 @@ import com.tencent.liteav.demo.superplayer.ui.view.VolumeBrightnessProgressLayou
import org.leanflutter.plugins.flutter_superplayer.R;
+import java.io.IOException;
+import java.net.URL;
+
/**
* 窗口模式播放控件
*
@@ -443,16 +448,34 @@ public class WindowPlayer extends AbsPlayer implements View.OnClickListener,
});
}
+ @Override
+ public void setBackground(String imageUrl) {
+ AsyncTask.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ URL url = new URL(imageUrl);
+ Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
+ mBackgroundBmp = bitmap;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ post(new Runnable() {
+ @Override
+ public void run() {
+ setBitmap(mBackground, mBackgroundBmp);
+ }
+ });
+ }
+ });
+ }
+
/**
* 设置目标ImageView显示的图片
*/
private void setBitmap(ImageView view, Bitmap bitmap) {
if (view == null || bitmap == null) return;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- view.setBackground(new BitmapDrawable(getContext().getResources(), bitmap));
- } else {
- view.setBackgroundDrawable(new BitmapDrawable(getContext().getResources(), bitmap));
- }
+ view.setImageBitmap(bitmap);
}
/**
diff --git a/lib/my_flutter_superplayer/android/src/main/java/org/leanflutter/plugins/flutter_superplayer/FlutterSuperPlayerView.java b/lib/my_flutter_superplayer/android/src/main/java/org/leanflutter/plugins/flutter_superplayer/FlutterSuperPlayerView.java
index 01ad949..26e0f1f 100644
--- a/lib/my_flutter_superplayer/android/src/main/java/org/leanflutter/plugins/flutter_superplayer/FlutterSuperPlayerView.java
+++ b/lib/my_flutter_superplayer/android/src/main/java/org/leanflutter/plugins/flutter_superplayer/FlutterSuperPlayerView.java
@@ -73,6 +73,10 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
String controlViewType = (String) params.get("controlViewType");
setControlViewType(controlViewType);
+ if (params.containsKey("coverImageUrl")) {
+ String coverImageUrl = (String) params.get("coverImageUrl");
+ setCoverImage(coverImageUrl);
+ }
}
@Override
@@ -101,6 +105,10 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
if (call.method.equals("setControlViewType")) {
setControlViewType(call, result);
+ } else if (call.method.equals("setTitle")) {
+ setTitle(call, result);
+ } else if (call.method.equals("setCoverImage")) {
+ setCoverImage(call, result);
} else if (call.method.equals("getPlayMode")) {
getPlayMode(call, result);
} else if (call.method.equals("getPlayState")) {
@@ -143,6 +151,19 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
superPlayerView.setControlViewType(controlViewType);
}
+ void setTitle(@NonNull MethodCall call, @NonNull Result result) {
+ String title = (String) call.argument("title");
+ superPlayerView.setTitle(title);
+ }
+
+ void setCoverImage(String coverImageUrl) {
+ superPlayerView.setCoverImage(coverImageUrl);
+ }
+
+ void setCoverImage(@NonNull MethodCall call, @NonNull Result result) {
+ String controlViewType = (String) call.argument("coverImageUrl");
+ superPlayerView.setCoverImage(controlViewType);
+ }
void getPlayMode(@NonNull MethodCall call, @NonNull Result result) {
int playMode = superPlayerView.getPlayerMode().ordinal();
@@ -271,7 +292,6 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
eventData.put("method", "onClickSmallReturnBtn");
eventSink.success(eventData);
-
}
@Override
@@ -281,7 +301,6 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
eventData.put("method", "onStartFloatWindowPlay");
eventSink.success(eventData);
-
}
@Override
diff --git a/lib/my_flutter_superplayer/android/src/main/res/layout/superplayer_vod_player_window.xml b/lib/my_flutter_superplayer/android/src/main/res/layout/superplayer_vod_player_window.xml
index b3019e8..df0403d 100644
--- a/lib/my_flutter_superplayer/android/src/main/res/layout/superplayer_vod_player_window.xml
+++ b/lib/my_flutter_superplayer/android/src/main/res/layout/superplayer_vod_player_window.xml
@@ -151,5 +151,6 @@
android:id="@+id/superplayer_small_iv_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:scaleType="fitCenter"
android:visibility="gone" />
\ No newline at end of file
diff --git a/lib/my_flutter_superplayer/example/android/app/build.gradle b/lib/my_flutter_superplayer/example/android/app/build.gradle
index fa62d62..6ae074f 100644
--- a/lib/my_flutter_superplayer/example/android/app/build.gradle
+++ b/lib/my_flutter_superplayer/example/android/app/build.gradle
@@ -38,9 +38,6 @@ android {
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
-// ndk {
-// abiFilters "armeabi-v7a"
-// }
}
buildTypes {
diff --git a/lib/my_flutter_superplayer/example/android/app/src/main/java/dev/learn_flutter/plugins/flutter_superplayer_example/MainActivity.java b/lib/my_flutter_superplayer/example/android/app/src/main/java/org/leanflutter/plugins/flutter_superplayer_example/MainActivity.java
similarity index 100%
rename from lib/my_flutter_superplayer/example/android/app/src/main/java/dev/learn_flutter/plugins/flutter_superplayer_example/MainActivity.java
rename to lib/my_flutter_superplayer/example/android/app/src/main/java/org/leanflutter/plugins/flutter_superplayer_example/MainActivity.java
diff --git a/lib/my_flutter_superplayer/example/ios/Podfile.lock b/lib/my_flutter_superplayer/example/ios/Podfile.lock
index 2547ae6..3610b29 100644
--- a/lib/my_flutter_superplayer/example/ios/Podfile.lock
+++ b/lib/my_flutter_superplayer/example/ios/Podfile.lock
@@ -18,12 +18,17 @@ PODS:
- flutter_superplayer (0.0.1):
- Flutter
- flutter_superplayer/SuperPlayer_Professional (= 0.0.1)
+ - SDWebImage (~> 5.0)
- flutter_superplayer/SuperPlayer_Professional (0.0.1):
- AFNetworking (~> 4.0)
- Flutter
- Masonry
+ - SDWebImage (~> 5.0)
- TXLiteAVSDK_Professional
- Masonry (1.1.0)
+ - SDWebImage (5.11.1):
+ - SDWebImage/Core (= 5.11.1)
+ - SDWebImage/Core (5.11.1)
- TXLiteAVSDK_Professional (8.5.10022)
DEPENDENCIES:
@@ -34,6 +39,7 @@ SPEC REPOS:
trunk:
- AFNetworking
- Masonry
+ - SDWebImage
- TXLiteAVSDK_Professional
EXTERNAL SOURCES:
@@ -45,8 +51,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
- flutter_superplayer: 50d64a438d4e917295d7c8d8124bcc239f323dad
+ flutter_superplayer: d776c28859e3e6c17821ab7973c1fd374f4f546f
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
+ SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
TXLiteAVSDK_Professional: 165018e2f0570d2608d7ea2b785fc273558f9920
PODFILE CHECKSUM: b1f7a399522c118a74b177b13c01eca692aa7e6d
diff --git a/lib/my_flutter_superplayer/example/ios/Runner/Info.plist b/lib/my_flutter_superplayer/example/ios/Runner/Info.plist
index e59b450..af8f00c 100644
--- a/lib/my_flutter_superplayer/example/ios/Runner/Info.plist
+++ b/lib/my_flutter_superplayer/example/ios/Runner/Info.plist
@@ -22,6 +22,11 @@
$(FLUTTER_BUILD_NUMBER)
LSRequiresIPhoneOS
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
UILaunchStoryboardName
LaunchScreen
UIMainStoryboardFile
diff --git a/lib/my_flutter_superplayer/example/lib/data_file.dart b/lib/my_flutter_superplayer/example/lib/data_file.dart
index 2cac58a..6a1157e 100644
--- a/lib/my_flutter_superplayer/example/lib/data_file.dart
+++ b/lib/my_flutter_superplayer/example/lib/data_file.dart
@@ -1,220 +1,102 @@
///App.Car_Dwinfo.GetList 获取分页列表数据
-Map mapDwinfo = {
+Map mapDwinfoXwx = {
"ret": 200,
"data": {
"items": [
{
- "id": 1,
- "dwip": "172.16.3.1",
- "dwmc": "锦绣花园",
- "dwbh": 1,
- "dwinfo": "振兴大道锦绣花园附近",
- "dwzb": "104.607091|28.807061",
- "dwms": "振兴大道锦绣花园附近,识别孜岩、红坝路入城排放黑烟车辆",
+ "id": 21,
+ "dwip": "172.16.3.21",
+ "dwmc": "大礼村",
+ "dwbh": 21,
+ "dwinfo": "兴文大礼村附近",
+ "dwzb": "105.270298|28.285956",
+ "dwms": "大礼村附近,抓拍自泸州叙永县方向入城黑烟车辆",
"dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320001012_34020000001320001012",
- "video13": "/rtp/gb_play_34020000001320001014_34020000001320001014",
- "video14": "/rtp/gb_play_34020000001320001013_34020000001320001013",
- "video15": "/rtp/gb_play_34020000001320001015_34020000001320001015",
- "video16": "/rtp/gb_play_34020000001320001016_34020000001320001016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 2,
- "dwip": "172.16.3.2",
- "dwmc": "石马溪桥",
- "dwbh": 2,
- "dwinfo": "宜飞路石马溪大桥附近",
- "dwzb": "104.589904|28.787078",
- "dwms": "宜飞路石马溪大桥附近,识别屏山、菜坝入城排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320002012_34020000001320002012",
- "video13": "/rtp/gb_play_34020000001320002013_34020000001320002013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320002016_34020000001320002016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 3,
- "dwip": "172.16.3.3",
- "dwmc": "森林小区",
- "dwbh": 3,
- "dwinfo": "岷江南路森林小区附近",
- "dwzb": "104.603919|28.765568",
- "dwms": "岷江南路森林小区附近,识别宜宾市翠屏南收费站出城排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320003012_34020000001320003012",
- "video13": "/rtp/gb_play_34020000001320003013_34020000001320003013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320003016_34020000001320003016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 4,
- "dwip": "172.16.3.4",
- "dwmc": "南山星城",
- "dwbh": 4,
- "dwinfo": "一曼路南山星城南区附近",
- "dwzb": "104.556797|28.718901",
- "dwms": "一曼路南山星城南区附近,识别进入叙州区新城区排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320004012_34020000001320004012",
- "video13": "/rtp/gb_play_34020000001320004013_34020000001320004013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320004016_34020000001320004016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 5,
- "dwip": "172.16.3.5",
- "dwmc": "育才学校",
- "dwbh": 5,
- "dwinfo": "陵园路宜宾市翠屏育才学校附近",
- "dwzb": "104.533476|28.699059",
- "dwms": "陵园路宜宾市翠屏育才学校附近,识别叙州区老城区出城车辆排放黑烟",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320005012_34020000001320005012",
- "video13": "/rtp/gb_play_34020000001320005013_34020000001320005013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320005016_34020000001320005016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 6,
- "dwip": "172.16.3.6",
- "dwmc": "七星花园",
- "dwbh": 6,
- "dwinfo": "七星路东段七星花园小区附近",
- "dwzb": "104.662376|28.755488",
- "dwms": "七星路东段七星花园小区附近,识别高县入城排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320006012_34020000001320006012",
- "video13": "/rtp/gb_play_34020000001320006013_34020000001320006013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320006016_34020000001320006016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 7,
- "dwip": "172.16.3.7",
- "dwmc": "市财政局",
- "dwbh": 7,
- "dwinfo": "南六路宜宾市翠屏财政局附近",
- "dwzb": "104.616581|28.731942",
- "dwms": "南六路宜宾市翠屏财政局附近,识别高县入城排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320007012_34020000001320007012",
- "video13": "/rtp/gb_play_34020000001320007013_34020000001320007013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320007016_34020000001320007016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 8,
- "dwip": "172.16.3.8",
- "dwmc": "宜威路",
- "dwbh": 8,
- "dwinfo": "宜威路7km+800m附近",
- "dwzb": "104.687767|28.731159",
- "dwms": "宜威路7km+800m附近,识别珙县、筠连入城排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320008012_34020000001320008012",
- "video13": "/rtp/gb_play_34020000001320008013_34020000001320008013",
- "video14": null,
- "video15": null,
- "video16": "/rtp/gb_play_34020000001320008016_34020000001320008016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
- },
- {
- "id": 9,
- "dwip": "172.16.3.9",
- "dwmc": "宜长路",
- "dwbh": 9,
- "dwinfo": "新宜长路13km+700m附近",
- "dwzb": "104.717384|28.763214",
- "dwms": "新宜长路13km+700m附近,识别长宁、江安方向排放黑烟车辆",
- "dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320009012_34020000001320009012",
- "video13": "/rtp/gb_play_34020000001320009013_34020000001320009013",
+ "video12": "/rtp/gb_play_34020000001320021012_34020000001320021012",
+ "video13": "/rtp/gb_play_34020000001320021013_34020000001320021013",
"video14": null,
"video15": null,
- "video16": "/rtp/gb_play_34020000001320009016_34020000001320009016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
+ "video16": "/rtp/gb_play_34020000001320021016_34020000001320021016",
+ "play_urlhead": "rtmp://125.64.218.67:9901",
+ "qxdm": "511528",
+ "qxmc": "兴文县"
},
{
- "id": 10,
- "dwip": "172.16.3.10",
- "dwmc": "临港马家湾",
- "dwbh": 10,
- "dwinfo": "长江北路四段马家湾附近",
- "dwzb": "104.759928|28.816636",
- "dwms": "长江北路四段马家湾附近,识别南溪方向入城排放黑烟车辆",
+ "id": 22,
+ "dwip": "172.16.3.22",
+ "dwmc": "石海收费站",
+ "dwbh": 22,
+ "dwinfo": "兴文石海收费站附近",
+ "dwzb": "105.250612|28.288194",
+ "dwms": "石海收费站附近,抓拍自古宜高速入城黑烟车辆",
"dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320010012_34020000001320010012",
- "video13": "/rtp/gb_play_34020000001320010013_34020000001320010013",
+ "video12": "/rtp/gb_play_34020000001320022012_34020000001320022012",
+ "video13": "/rtp/gb_play_34020000001320022013_34020000001320022013",
"video14": null,
"video15": null,
- "video16": "/rtp/gb_play_34020000001320010016_34020000001320010016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
+ "video16": "/rtp/gb_play_34020000001320022016_34020000001320022016",
+ "play_urlhead": "rtmp://125.64.218.67:9901",
+ "qxdm": "511528",
+ "qxmc": "兴文县"
},
{
- "id": 11,
- "dwip": "172.16.3.11",
- "dwmc": "环城路",
- "dwbh": 11,
- "dwinfo": "环城路方水中心学校附近",
- "dwzb": "104.641112|28.814636",
- "dwms": "环城路方水中心学校附近,识别自观斗山隧道入城排放黑烟车辆",
+ "id": 23,
+ "dwip": "172.16.3.23",
+ "dwmc": "高铁站",
+ "dwbh": 23,
+ "dwinfo": "兴文高铁站附近",
+ "dwzb": "105.237865|28.336993",
+ "dwms": "高铁站附近,抓拍自泸州纳溪区方向入城黑烟车辆",
"dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320011012_34020000001320011012",
- "video13": "/rtp/gb_play_34020000001320011013_34020000001320011013",
+ "video12": "/rtp/gb_play_34020000001320023012_34020000001320023012",
+ "video13": "/rtp/gb_play_34020000001320023013_34020000001320023013",
"video14": null,
"video15": null,
- "video16": "/rtp/gb_play_34020000001320011016_34020000001320011016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
+ "video16": "/rtp/gb_play_34020000001320023016_34020000001320023016",
+ "play_urlhead": "rtmp://125.64.218.67:9901",
+ "qxdm": "511528",
+ "qxmc": "兴文县"
},
{
- "id": 12,
- "dwip": "172.16.3.12",
- "dwmc": "陶瓷厂",
- "dwbh": 12,
- "dwinfo": "S206省道美莲陶瓷厂附近",
- "dwzb": "104.63116|28.804407",
- "dwms": "S206省道美莲陶瓷厂附近,识别省道206入城排放黑烟车辆",
+ "id": 24,
+ "dwip": "172.16.3.24",
+ "dwmc": "温水溪",
+ "dwbh": 24,
+ "dwinfo": "兴文温水溪加油站附近",
+ "dwzb": "105.246183|28.286743",
+ "dwms": "温水溪加油站附近,抓拍自云南威信县方向入城黑烟车辆",
"dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320012012_34020000001320012012",
- "video13": "/rtp/gb_play_34020000001320012013_34020000001320012013",
+ "video12": "/rtp/gb_play_34020000001320024012_34020000001320024012",
+ "video13": "/rtp/gb_play_34020000001320024013_34020000001320024013",
"video14": null,
"video15": null,
- "video16": "/rtp/gb_play_34020000001320012016_34020000001320012016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
+ "video16": "/rtp/gb_play_34020000001320024016_34020000001320024016",
+ "play_urlhead": "rtmp://125.64.218.67:9901",
+ "qxdm": "511528",
+ "qxmc": "兴文县"
},
{
- "id": 13,
- "dwip": "172.16.3.13",
- "dwmc": "鑫菁英",
- "dwbh": 13,
- "dwinfo": "外江路鑫菁英小区附近",
- "dwzb": "104.623547|28.74798",
- "dwms": "外江路鑫菁英小区附近,识别中坝大桥往高铁站排放黑烟车辆",
+ "id": 25,
+ "dwip": "172.16.3.25",
+ "dwmc": "古高路",
+ "dwbh": 25,
+ "dwinfo": "兴文古高路骨科医院附近",
+ "dwzb": "105.197409|28.334767",
+ "dwms": "古高路骨科医院附近,抓拍自长宁、江安、珙县方向和古宜高速入城黑烟车辆",
"dwzt": "正常",
- "video12": "/rtp/gb_play_34020000001320013012_34020000001320013012",
- "video13": "/rtp/gb_play_34020000001320013013_34020000001320013013",
+ "video12": "/rtp/gb_play_34020000001320025012_34020000001320025012",
+ "video13": "/rtp/gb_play_34020000001320025013_34020000001320025013",
"video14": null,
"video15": null,
- "video16": "/rtp/gb_play_34020000001320013016_34020000001320013016",
- "play_urlhead": "rtmp://125.64.218.67:9901"
+ "video16": "/rtp/gb_play_34020000001320025016_34020000001320025016",
+ "play_urlhead": "rtmp://125.64.218.67:9901",
+ "qxdm": "511528",
+ "qxmc": "兴文县"
}
],
- "total": 13,
+ "total": 5,
"page": 1,
- "perpage": 20
+ "perpage": 19
},
"msg": ""
};
diff --git a/lib/my_flutter_superplayer/example/lib/main.dart b/lib/my_flutter_superplayer/example/lib/main.dart
index efd877f..3070104 100644
--- a/lib/my_flutter_superplayer/example/lib/main.dart
+++ b/lib/my_flutter_superplayer/example/lib/main.dart
@@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'superplayer_home.dart';
-//import 'tc_player.dart';
import 'data_file.dart';
void main() {
@@ -71,21 +70,9 @@ class _HomePageState extends State {
}
Future getListButton() async {
- List listDw = mapDwinfo['data']['items'];
-
List _listButton = [];
- _listButton.addAll([
- getPlayUrl(
- 'http://www.yibinu.edu.cn/__local/5/35/DF/264049B7E978EEE2F5849688986_05D4A6FE_152CDB8C.mp4?e=.mp4',
- 'yibinu'),
- getPlayUrl('https://yongling8808.github.io/test/video/movie/movie.mp4', '网络视频'),
- getPlayUrl(
- 'http://125.64.218.67:9908/video/2_6063_20210410_155327_川QKK380.mp4', '违章视频-川QKK380'),
- getPlayUrl(
- 'http://125.64.218.67:9908/video/2_6063_20210409_140608_川Q31715.mp4', '违章视频-川Q31715'),
- ]);
- for (Map item in listDw) {
+ for (Map item in mapDwinfoXwx['data']['items']) {
_listButton.add(
getPlayUrl(item["play_urlhead"] + item["video16"], '${item["dwbh"]}.' + item["dwmc"]));
}
diff --git a/lib/my_flutter_superplayer/example/pubspec.lock b/lib/my_flutter_superplayer/example/pubspec.lock
index 75c5cf6..66b686b 100644
--- a/lib/my_flutter_superplayer/example/pubspec.lock
+++ b/lib/my_flutter_superplayer/example/pubspec.lock
@@ -68,7 +68,7 @@ packages:
path: ".."
relative: true
source: path
- version: "0.0.2"
+ version: "0.0.3"
flutter_test:
dependency: "direct dev"
description: flutter
diff --git a/lib/my_flutter_superplayer/example/test/widget_test.dart b/lib/my_flutter_superplayer/example/test/widget_test.dart
index c3050dd..7e9aaea 100644
--- a/lib/my_flutter_superplayer/example/test/widget_test.dart
+++ b/lib/my_flutter_superplayer/example/test/widget_test.dart
@@ -1,27 +1,27 @@
-// // This is a basic Flutter widget test.
-// //
-// // To perform an interaction with a widget in your test, use the WidgetTester
-// // utility that Flutter provides. For example, you can send tap and scroll
-// // gestures. You can also use WidgetTester to find child widgets in the widget
-// // tree, read text, and verify that the values of widget properties are correct.
-//
-// import 'package:flutter/material.dart';
-// import 'package:flutter_test/flutter_test.dart';
+// This is a basic Flutter widget test.
//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
// import 'package:flutter_superplayer_example/main.dart';
-//
-// void main() {
-// testWidgets('Verify Platform version', (WidgetTester tester) async {
-// // Build our app and trigger a frame.
-// await tester.pumpWidget(MyApp());
-//
-// // Verify that platform version is retrieved.
-// expect(
-// find.byWidgetPredicate(
-// (Widget widget) => widget is Text &&
-// widget.data.startsWith('Running on:'),
-// ),
-// findsOneWidget,
-// );
-// });
-// }
+
+void main() {
+ testWidgets('Verify Platform version', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ // await tester.pumpWidget(MyApp());
+
+ // Verify that platform version is retrieved.
+ expect(
+ find.byWidgetPredicate(
+ (Widget widget) => widget is Text &&
+ widget.data.startsWith('Running on:'),
+ ),
+ findsOneWidget,
+ );
+ });
+}
diff --git a/lib/my_flutter_superplayer/ios/Classes/FLTSuperPlayerView.m b/lib/my_flutter_superplayer/ios/Classes/FLTSuperPlayerView.m
index 7945617..1ea7546 100644
--- a/lib/my_flutter_superplayer/ios/Classes/FLTSuperPlayerView.m
+++ b/lib/my_flutter_superplayer/ios/Classes/FLTSuperPlayerView.m
@@ -3,7 +3,7 @@
//
// Created by Lijy91 on 2020/9/4.
//
-
+#import
#import "FLTSuperPlayerView.h"
// FLTSuperPlayerViewController
@@ -43,6 +43,9 @@
_superPlayerView.delegate = self;
[self setControlViewType:args[@"controlViewType"]];
+ if (args[@"coverImageUrl"] != nil) {
+ [self setCoverImage:args[@"coverImageUrl"]];
+ }
}
return self;
}
@@ -63,17 +66,14 @@
return nil;
}
-- (void)setControlViewType:(NSString *)controlViewType
-{
- if ([controlViewType isEqualToString:@"without"]) {
- _superPlayerView.controlView = [[SPWithoutControlView alloc] initWithFrame:CGRectZero];
- } else {
- _superPlayerView.controlView = [[SPDefaultControlView alloc] initWithFrame:CGRectZero];
- }
-}
-
- (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
- if ([[call method] isEqualToString:@"getPlayMode"]) {
+ if ([[call method] isEqualToString:@"setControlViewType"]) {
+ [self setControlViewType:call result: result];
+ } else if ([[call method] isEqualToString:@"setTitle"]) {
+ [self setTitle:call result: result];
+ } else if ([[call method] isEqualToString:@"setCoverImage"]) {
+ [self setCoverImage:call result: result];
+ } else if ([[call method] isEqualToString:@"getPlayMode"]) {
[self getPlayMode:call result: result];
} else if ([[call method] isEqualToString:@"getPlayState"]) {
[self getPlayState:call result: result];
@@ -106,6 +106,42 @@
}
}
+- (void)setControlViewType:(NSString *)controlViewType
+{
+ if ([controlViewType isEqualToString:@"without"]) {
+ _superPlayerView.controlView = [[SPWithoutControlView alloc] initWithFrame:CGRectZero];
+ } else {
+ _superPlayerView.controlView = [[SPDefaultControlView alloc] initWithFrame:CGRectZero];
+ }
+}
+
+- (void)setControlViewType:(FlutterMethodCall*)call
+ result:(FlutterResult)result
+{
+ NSString *controlViewType = call.arguments[@"controlViewType"];
+ [self setControlViewType:controlViewType];
+}
+
+- (void)setTitle:(FlutterMethodCall*)call
+ result:(FlutterResult)result
+{
+ NSString *title = call.arguments[@"title"];
+ [_superPlayerView.controlView setTitle:title];
+}
+
+- (void)setCoverImage:(NSString *)coverImageUrl
+{
+ [_superPlayerView.coverImageView sd_setImageWithURL:[NSURL URLWithString:coverImageUrl]];
+ _superPlayerView.coverImageView.alpha = 1;
+}
+
+- (void)setCoverImage:(FlutterMethodCall*)call
+ result:(FlutterResult)result
+{
+ NSString *coverImageUrl = call.arguments[@"coverImageUrl"];
+ [self setCoverImage:coverImageUrl];
+}
+
- (void)getPlayMode:(FlutterMethodCall*)call
result:(FlutterResult)result
{
@@ -144,7 +180,6 @@
// skip
}
-
- (void)playWithModel:(FlutterMethodCall*)call
result:(FlutterResult)result
{
diff --git a/lib/my_flutter_superplayer/ios/flutter_superplayer.podspec b/lib/my_flutter_superplayer/ios/flutter_superplayer.podspec
index 8f5fb74..ad3f428 100644
--- a/lib/my_flutter_superplayer/ios/flutter_superplayer.podspec
+++ b/lib/my_flutter_superplayer/ios/flutter_superplayer.podspec
@@ -16,6 +16,7 @@ A new flutter plugin project.
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
+ s.dependency 'SDWebImage', '~> 5.0'
s.platform = :ios, '9.0'
s.default_subspec = 'SuperPlayer_Professional'
diff --git a/lib/my_flutter_superplayer/lib/src/superplayer_controller.dart b/lib/my_flutter_superplayer/lib/src/superplayer_controller.dart
index fbe2b97..5008a39 100644
--- a/lib/my_flutter_superplayer/lib/src/superplayer_controller.dart
+++ b/lib/my_flutter_superplayer/lib/src/superplayer_controller.dart
@@ -9,7 +9,8 @@ import './superplayer_model.dart';
// import './superplayer_view.dart';
class SuperPlayerController {
- ObserverList _listeners = ObserverList();
+ ObserverList _listeners =
+ ObserverList();
MethodChannel _channel;
EventChannel _eventChannel;
@@ -58,7 +59,8 @@ class SuperPlayerController {
void notifyListeners(String method, dynamic data) {
assert(_debugAssertNotDisposed());
if (_listeners != null) {
- final List localListeners = List.from(_listeners);
+ final List localListeners =
+ List.from(_listeners);
for (final SuperPlayerListener listener in localListeners) {
try {
if (_listeners.contains(listener)) {
@@ -116,6 +118,19 @@ class SuperPlayerController {
});
}
+ void setTitle(String title) {
+ _channel.invokeMethod('setTitle', {
+ 'title': title,
+ });
+ }
+
+ void setCoverImage(String coverImageUrl) {
+ _channel.invokeMethod(
+ 'setCoverImage',
+ {'coverImageUrl': coverImageUrl},
+ );
+ }
+
void setPlayRate(num playRate) {
_channel.invokeMethod('setPlayRate', {'playRate': playRate});
}
@@ -124,10 +139,6 @@ class SuperPlayerController {
_channel.invokeMethod('resetPlayer');
}
- void toFullScreen() {
- _channel.invokeMethod('toFullScreen');
- }
-
void requestPlayMode(int playMode) {
_channel.invokeMethod('requestPlayMode', {
'playMode': playMode,
diff --git a/lib/my_flutter_superplayer/lib/src/superplayer_view.dart b/lib/my_flutter_superplayer/lib/src/superplayer_view.dart
index 1743e31..157473f 100644
--- a/lib/my_flutter_superplayer/lib/src/superplayer_view.dart
+++ b/lib/my_flutter_superplayer/lib/src/superplayer_view.dart
@@ -12,12 +12,14 @@ class SuperPlayerView extends StatefulWidget {
Function(SuperPlayerController controller) onSuperPlayerViewCreated;
SuperPlayerController controller;
String controlViewType;
+ String coverImageUrl;
SuperPlayerView({
Key key,
this.onSuperPlayerViewCreated,
this.controller,
this.controlViewType = kControlViewTypeDefault,
+ this.coverImageUrl,
}) : super(key: key);
@override
@@ -42,6 +44,9 @@ class _SuperPlayerViewState extends State {
if (oldWidget.controlViewType != widget.controlViewType) {
widget.controller.setControlViewType(widget.controlViewType);
}
+ if (oldWidget.coverImageUrl != widget.coverImageUrl) {
+ widget.controller.setCoverImage(widget.coverImageUrl);
+ }
super.didUpdateWidget(oldWidget);
}
@@ -49,7 +54,8 @@ class _SuperPlayerViewState extends State {
Widget build(BuildContext context) {
Map creationParams = {
'controlViewType': widget.controlViewType,
- };
+ 'coverImageUrl': widget.coverImageUrl,
+ }..removeWhere((String k, dynamic v) => v == null);
if (Platform.isAndroid) {
return AndroidView(
diff --git a/lib/my_flutter_superplayer/pubspec.yaml b/lib/my_flutter_superplayer/pubspec.yaml
index f057302..377294b 100644
--- a/lib/my_flutter_superplayer/pubspec.yaml
+++ b/lib/my_flutter_superplayer/pubspec.yaml
@@ -1,6 +1,6 @@
name: flutter_superplayer
description: 适用于 Flutter 的腾讯云超级播放器插件
-version: 0.0.2
+version: 0.0.3
author: LiJianying
homepage: https://github.com/leanflutter/flutter_superplayer
diff --git a/lib/widget/my_superplayer.dart b/lib/widget/my_superplayer.dart
index 25dfbcf..9323294 100644
--- a/lib/widget/my_superplayer.dart
+++ b/lib/widget/my_superplayer.dart
@@ -142,11 +142,11 @@ class _SuperPlayerPageState extends State with SuperPlayerListe
Widget build(BuildContext context) {
playerRegionProvide = Provider.of(context);
playerRatioProvide = Provider.of(context);
- List listData = getDataListControl2();
+ // List listData = getDataListControl2();
double btnHeight1 = 70; //第一按钮行高度
double btnHeight2 = 160; //第二按钮行高度
int btnCount = 4; //每行按钮个数
- int btnCount3 = listData.length; //每行按钮个数
+ // int btnCount3 = listData.length; //每行按钮个数
var mediaSize = MediaQuery.of(context).size;
// widget.id:播放点位视频的点位编号,-2 表示播放违章视频
@@ -616,104 +616,104 @@ class _SuperPlayerPageState extends State with SuperPlayerListe
}
//生成播放控制区第2行按钮List
- List getDataListControl2() {
- double _diameter = 100;
- double _iconSize = 70;
- double _fontSize = 14;
- double _marginVer = 8;
-
- List list = [
- // getRoundButton(
- // diameter: _diameter,
- // iconSize: _iconSize,
- // text: '快退',
- // icon: Icons.fast_rewind,
- // onPress: () {
- // fastSeek(false);
- // },
- // ),
- // getRoundButton(
- // diameter: _diameter,
- // iconSize: _iconSize,
- // text: '快进',
- // icon: Icons.fast_forward,
- // onPress: () {
- // fastSeek(true);
- // },
- // ),
- getRoundButton(
- diameter: _diameter,
- iconSize: _iconSize,
- fontSize: _fontSize,
- marginVer: _marginVer,
- text: '放大',
- icon: Icons.zoom_in,
- onPress: () {
- //print('Icons.videocam');
- //_inputDialog(context2);
- if (10 >= playerRatioProvide.scale) {
- playerRatioProvide.changeScale(playerRatioProvide.scale + 0.5);
- }
- },
- ),
- getRoundButton(
- diameter: _diameter,
- iconSize: _iconSize,
- fontSize: _fontSize,
- marginVer: _marginVer,
- text: '缩小',
- icon: Icons.zoom_out,
- onPress: () {
- //print('Icons.videocam');
- //_getFileDialog(context2);
- if (1 < playerRatioProvide.scale) {
- playerRatioProvide.changeScale(playerRatioProvide.scale - 0.5);
- }
- },
- ),
-// _getIconAndTextButton(
-// '还原',
-// Icons.reply,
-// Colors.orange,
-// () {
-// //print('Icons.videocam');
-// //_getFileDialog(context2);
-// // 更新当前位置
-// playerRatioProvide.changeScale(1.0);
-// playerRatioProvide.changeOffset(Offset(0, 0));
-// playerRatioProvide.changeDeltaX(0.0);
-// playerRatioProvide.changeDeltaY(0.0);
-// },
-// ),
- getRoundButton(
- diameter: _diameter,
- iconSize: _iconSize,
- fontSize: _fontSize,
- marginVer: _marginVer,
- text: '截图',
- icon: Icons.camera_alt,
- onPress: () {
- //通过上面定义的key,才能准确调用该类型的该对象的方法
- //_myFijkPanelWidgetBuilderStateKey.currentState.takeSnapshot();
- //_fijkPanelWidgetBuilder.currentState..takeSnapshot();
- takeSnapshot();
- },
- ),
- getRoundButton(
- diameter: _diameter,
- iconSize: _iconSize,
- fontSize: _fontSize,
- marginVer: _marginVer,
- text: '全屏',
- icon: Icons.fullscreen,
- onPress: () {
- //player.enterFullScreen();
- _playerController.toFullScreen();
- },
- ),
- ];
- return list;
- }
+// List getDataListControl2() {
+// double _diameter = 100;
+// double _iconSize = 70;
+// double _fontSize = 14;
+// double _marginVer = 8;
+//
+// List list = [
+// // getRoundButton(
+// // diameter: _diameter,
+// // iconSize: _iconSize,
+// // text: '快退',
+// // icon: Icons.fast_rewind,
+// // onPress: () {
+// // fastSeek(false);
+// // },
+// // ),
+// // getRoundButton(
+// // diameter: _diameter,
+// // iconSize: _iconSize,
+// // text: '快进',
+// // icon: Icons.fast_forward,
+// // onPress: () {
+// // fastSeek(true);
+// // },
+// // ),
+// getRoundButton(
+// diameter: _diameter,
+// iconSize: _iconSize,
+// fontSize: _fontSize,
+// marginVer: _marginVer,
+// text: '放大',
+// icon: Icons.zoom_in,
+// onPress: () {
+// //print('Icons.videocam');
+// //_inputDialog(context2);
+// if (10 >= playerRatioProvide.scale) {
+// playerRatioProvide.changeScale(playerRatioProvide.scale + 0.5);
+// }
+// },
+// ),
+// getRoundButton(
+// diameter: _diameter,
+// iconSize: _iconSize,
+// fontSize: _fontSize,
+// marginVer: _marginVer,
+// text: '缩小',
+// icon: Icons.zoom_out,
+// onPress: () {
+// //print('Icons.videocam');
+// //_getFileDialog(context2);
+// if (1 < playerRatioProvide.scale) {
+// playerRatioProvide.changeScale(playerRatioProvide.scale - 0.5);
+// }
+// },
+// ),
+// // _getIconAndTextButton(
+// // '还原',
+// // Icons.reply,
+// // Colors.orange,
+// // () {
+// // //print('Icons.videocam');
+// // //_getFileDialog(context2);
+// // // 更新当前位置
+// // playerRatioProvide.changeScale(1.0);
+// // playerRatioProvide.changeOffset(Offset(0, 0));
+// // playerRatioProvide.changeDeltaX(0.0);
+// // playerRatioProvide.changeDeltaY(0.0);
+// // },
+// // ),
+// getRoundButton(
+// diameter: _diameter,
+// iconSize: _iconSize,
+// fontSize: _fontSize,
+// marginVer: _marginVer,
+// text: '截图',
+// icon: Icons.camera_alt,
+// onPress: () {
+// //通过上面定义的key,才能准确调用该类型的该对象的方法
+// //_myFijkPanelWidgetBuilderStateKey.currentState.takeSnapshot();
+// //_fijkPanelWidgetBuilder.currentState..takeSnapshot();
+// takeSnapshot();
+// },
+// ),
+// getRoundButton(
+// diameter: _diameter,
+// iconSize: _iconSize,
+// fontSize: _fontSize,
+// marginVer: _marginVer,
+// text: '全屏',
+// icon: Icons.fullscreen,
+// onPress: () {
+// //player.enterFullScreen();
+// _playerController.toFullScreen();
+// },
+// ),
+// ];
+// return list;
+// }
void takeSnapshot() {
// player.takeSnapShot().then((v) {
diff --git a/pubspec.lock b/pubspec.lock
index 517c399..5c85757 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -369,7 +369,7 @@ packages:
path: "lib/my_flutter_superplayer"
relative: true
source: path
- version: "0.0.2"
+ version: "0.0.3"
flutter_swiper:
dependency: "direct main"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 139daff..8f8fd9c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -70,7 +70,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
#version: 1.4.29+20220502
#version: 1.4.30+20220504
#version: 1.4.31+20220506
-version: 1.4.32+20220511
+#version: 1.4.32+20220511
+version: 1.4.33+20220515
environment:
sdk: ">=2.7.0 <3.0.0"