hyzp_ybqx-Commit163:版本号更新为version: 1.4.33+20220515。升级插件到自定义的my_flutter_superplayer 0.0.3,能够正常播放点位视频

master
WinUser01 4 years ago
parent 138ece6fc6
commit 1915dbdcd2

@ -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

@ -1,7 +1,12 @@
## 0.0.3
- 增加 `setTitle` 方法,用于设置视频标题
- 增加 `setCoverImage` 方法,用于设置视频封面
## 0.0.2 ## 0.0.2
* Add `setLoop` support - Add `setLoop` support
## 0.0.1 ## 0.0.1
* Initial release. - Initial release.

@ -26,7 +26,7 @@
```yaml ```yaml
dependencies: dependencies:
flutter_superplayer: ^0.0.1 flutter_superplayer: ^0.0.3
``` ```

@ -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() { public void uiHideDanmu() {
mFullScreenPlayer.hideDanmu(); mFullScreenPlayer.hideDanmu();
} }
@ -729,7 +738,6 @@ public class SuperPlayerView extends RelativeLayout {
mPlayerViewCallback.onPlayStateChange(SuperPlayerDef.PlayerState.PLAYING); mPlayerViewCallback.onPlayStateChange(SuperPlayerDef.PlayerState.PLAYING);
mWindowPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING); mWindowPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING);
mFullScreenPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING); mFullScreenPlayer.updatePlayState(SuperPlayerDef.PlayerState.PLAYING);
updateTitle(name);
mWindowPlayer.hideBackground(); mWindowPlayer.hideBackground();
if (mDanmuView != null && mDanmuView.isPrepared() && mDanmuView.isPaused()) { if (mDanmuView != null && mDanmuView.isPrepared() && mDanmuView.isPaused()) {
mDanmuView.resume(); mDanmuView.resume();

@ -95,6 +95,11 @@ public abstract class AbsPlayer extends RelativeLayout implements Player {
} }
@Override
public void setBackground(String imageUrl) {
}
@Override @Override
public void showBackground() { public void showBackground() {

@ -94,6 +94,8 @@ public interface Player {
*/ */
void setBackground(final Bitmap bitmap); void setBackground(final Bitmap bitmap);
void setBackground(final String imageUrl);
/** /**
* *
*/ */

@ -3,7 +3,9 @@ package com.tencent.liteav.demo.superplayer.ui.player;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.GestureDetector; 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 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 * ImageView
*/ */
private void setBitmap(ImageView view, Bitmap bitmap) { private void setBitmap(ImageView view, Bitmap bitmap) {
if (view == null || bitmap == null) return; if (view == null || bitmap == null) return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setImageBitmap(bitmap);
view.setBackground(new BitmapDrawable(getContext().getResources(), bitmap));
} else {
view.setBackgroundDrawable(new BitmapDrawable(getContext().getResources(), bitmap));
}
} }
/** /**

@ -73,6 +73,10 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
String controlViewType = (String) params.get("controlViewType"); String controlViewType = (String) params.get("controlViewType");
setControlViewType(controlViewType); setControlViewType(controlViewType);
if (params.containsKey("coverImageUrl")) {
String coverImageUrl = (String) params.get("coverImageUrl");
setCoverImage(coverImageUrl);
}
} }
@Override @Override
@ -101,6 +105,10 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
if (call.method.equals("setControlViewType")) { if (call.method.equals("setControlViewType")) {
setControlViewType(call, result); 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")) { } else if (call.method.equals("getPlayMode")) {
getPlayMode(call, result); getPlayMode(call, result);
} else if (call.method.equals("getPlayState")) { } else if (call.method.equals("getPlayState")) {
@ -143,6 +151,19 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
superPlayerView.setControlViewType(controlViewType); 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) { void getPlayMode(@NonNull MethodCall call, @NonNull Result result) {
int playMode = superPlayerView.getPlayerMode().ordinal(); int playMode = superPlayerView.getPlayerMode().ordinal();
@ -271,7 +292,6 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
eventData.put("method", "onClickSmallReturnBtn"); eventData.put("method", "onClickSmallReturnBtn");
eventSink.success(eventData); eventSink.success(eventData);
} }
@Override @Override
@ -281,7 +301,6 @@ public class FlutterSuperPlayerView implements PlatformView, MethodCallHandler,
eventData.put("method", "onStartFloatWindowPlay"); eventData.put("method", "onStartFloatWindowPlay");
eventSink.success(eventData); eventSink.success(eventData);
} }
@Override @Override

@ -151,5 +151,6 @@
android:id="@+id/superplayer_small_iv_background" android:id="@+id/superplayer_small_iv_background"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scaleType="fitCenter"
android:visibility="gone" /> android:visibility="gone" />
</RelativeLayout> </RelativeLayout>

@ -38,9 +38,6 @@ android {
targetSdkVersion 28 targetSdkVersion 28
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
// ndk {
// abiFilters "armeabi-v7a"
// }
} }
buildTypes { buildTypes {

@ -18,12 +18,17 @@ PODS:
- flutter_superplayer (0.0.1): - flutter_superplayer (0.0.1):
- Flutter - Flutter
- flutter_superplayer/SuperPlayer_Professional (= 0.0.1) - flutter_superplayer/SuperPlayer_Professional (= 0.0.1)
- SDWebImage (~> 5.0)
- flutter_superplayer/SuperPlayer_Professional (0.0.1): - flutter_superplayer/SuperPlayer_Professional (0.0.1):
- AFNetworking (~> 4.0) - AFNetworking (~> 4.0)
- Flutter - Flutter
- Masonry - Masonry
- SDWebImage (~> 5.0)
- TXLiteAVSDK_Professional - TXLiteAVSDK_Professional
- Masonry (1.1.0) - Masonry (1.1.0)
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
- TXLiteAVSDK_Professional (8.5.10022) - TXLiteAVSDK_Professional (8.5.10022)
DEPENDENCIES: DEPENDENCIES:
@ -34,6 +39,7 @@ SPEC REPOS:
trunk: trunk:
- AFNetworking - AFNetworking
- Masonry - Masonry
- SDWebImage
- TXLiteAVSDK_Professional - TXLiteAVSDK_Professional
EXTERNAL SOURCES: EXTERNAL SOURCES:
@ -45,8 +51,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
flutter_superplayer: 50d64a438d4e917295d7c8d8124bcc239f323dad flutter_superplayer: d776c28859e3e6c17821ab7973c1fd374f4f546f
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
TXLiteAVSDK_Professional: 165018e2f0570d2608d7ea2b785fc273558f9920 TXLiteAVSDK_Professional: 165018e2f0570d2608d7ea2b785fc273558f9920
PODFILE CHECKSUM: b1f7a399522c118a74b177b13c01eca692aa7e6d PODFILE CHECKSUM: b1f7a399522c118a74b177b13c01eca692aa7e6d

@ -22,6 +22,11 @@
<string>$(FLUTTER_BUILD_NUMBER)</string> <string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIMainStoryboardFile</key> <key>UIMainStoryboardFile</key>

@ -1,220 +1,102 @@
///App.Car_Dwinfo.GetList ///App.Car_Dwinfo.GetList
Map mapDwinfo = { Map mapDwinfoXwx = {
"ret": 200, "ret": 200,
"data": { "data": {
"items": [ "items": [
{ {
"id": 1, "id": 21,
"dwip": "172.16.3.1", "dwip": "172.16.3.21",
"dwmc": "锦绣花园", "dwmc": "大礼村",
"dwbh": 1, "dwbh": 21,
"dwinfo": "振兴大道锦绣花园附近", "dwinfo": "兴文大礼村附近",
"dwzb": "104.607091|28.807061", "dwzb": "105.270298|28.285956",
"dwms": "振兴大道锦绣花园附近,识别孜岩、红坝路入城排放黑烟车辆", "dwms": "大礼村附近,抓拍自泸州叙永县方向入城黑烟车辆",
"dwzt": "正常", "dwzt": "正常",
"video12": "/rtp/gb_play_34020000001320001012_34020000001320001012", "video12": "/rtp/gb_play_34020000001320021012_34020000001320021012",
"video13": "/rtp/gb_play_34020000001320001014_34020000001320001014", "video13": "/rtp/gb_play_34020000001320021013_34020000001320021013",
"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",
"video14": null, "video14": null,
"video15": null, "video15": null,
"video16": "/rtp/gb_play_34020000001320009016_34020000001320009016", "video16": "/rtp/gb_play_34020000001320021016_34020000001320021016",
"play_urlhead": "rtmp://125.64.218.67:9901" "play_urlhead": "rtmp://125.64.218.67:9901",
"qxdm": "511528",
"qxmc": "兴文县"
}, },
{ {
"id": 10, "id": 22,
"dwip": "172.16.3.10", "dwip": "172.16.3.22",
"dwmc": "临港马家湾", "dwmc": "石海收费站",
"dwbh": 10, "dwbh": 22,
"dwinfo": "长江北路四段马家湾附近", "dwinfo": "兴文石海收费站附近",
"dwzb": "104.759928|28.816636", "dwzb": "105.250612|28.288194",
"dwms": "长江北路四段马家湾附近,识别南溪方向入城排放黑烟车辆", "dwms": "石海收费站附近,抓拍自古宜高速入城黑烟车辆",
"dwzt": "正常", "dwzt": "正常",
"video12": "/rtp/gb_play_34020000001320010012_34020000001320010012", "video12": "/rtp/gb_play_34020000001320022012_34020000001320022012",
"video13": "/rtp/gb_play_34020000001320010013_34020000001320010013", "video13": "/rtp/gb_play_34020000001320022013_34020000001320022013",
"video14": null, "video14": null,
"video15": null, "video15": null,
"video16": "/rtp/gb_play_34020000001320010016_34020000001320010016", "video16": "/rtp/gb_play_34020000001320022016_34020000001320022016",
"play_urlhead": "rtmp://125.64.218.67:9901" "play_urlhead": "rtmp://125.64.218.67:9901",
"qxdm": "511528",
"qxmc": "兴文县"
}, },
{ {
"id": 11, "id": 23,
"dwip": "172.16.3.11", "dwip": "172.16.3.23",
"dwmc": "环城路", "dwmc": "高铁站",
"dwbh": 11, "dwbh": 23,
"dwinfo": "环城路方水中心学校附近", "dwinfo": "兴文高铁站附近",
"dwzb": "104.641112|28.814636", "dwzb": "105.237865|28.336993",
"dwms": "环城路方水中心学校附近,识别自观斗山隧道入城排放黑烟车辆", "dwms": "高铁站附近,抓拍自泸州纳溪区方向入城黑烟车辆",
"dwzt": "正常", "dwzt": "正常",
"video12": "/rtp/gb_play_34020000001320011012_34020000001320011012", "video12": "/rtp/gb_play_34020000001320023012_34020000001320023012",
"video13": "/rtp/gb_play_34020000001320011013_34020000001320011013", "video13": "/rtp/gb_play_34020000001320023013_34020000001320023013",
"video14": null, "video14": null,
"video15": null, "video15": null,
"video16": "/rtp/gb_play_34020000001320011016_34020000001320011016", "video16": "/rtp/gb_play_34020000001320023016_34020000001320023016",
"play_urlhead": "rtmp://125.64.218.67:9901" "play_urlhead": "rtmp://125.64.218.67:9901",
"qxdm": "511528",
"qxmc": "兴文县"
}, },
{ {
"id": 12, "id": 24,
"dwip": "172.16.3.12", "dwip": "172.16.3.24",
"dwmc": "陶瓷厂", "dwmc": "温水溪",
"dwbh": 12, "dwbh": 24,
"dwinfo": "S206省道美莲陶瓷厂附近", "dwinfo": "兴文温水溪加油站附近",
"dwzb": "104.63116|28.804407", "dwzb": "105.246183|28.286743",
"dwms": "S206省道美莲陶瓷厂附近识别省道206入城排放黑烟车辆", "dwms": "温水溪加油站附近,抓拍自云南威信县方向入城黑烟车辆",
"dwzt": "正常", "dwzt": "正常",
"video12": "/rtp/gb_play_34020000001320012012_34020000001320012012", "video12": "/rtp/gb_play_34020000001320024012_34020000001320024012",
"video13": "/rtp/gb_play_34020000001320012013_34020000001320012013", "video13": "/rtp/gb_play_34020000001320024013_34020000001320024013",
"video14": null, "video14": null,
"video15": null, "video15": null,
"video16": "/rtp/gb_play_34020000001320012016_34020000001320012016", "video16": "/rtp/gb_play_34020000001320024016_34020000001320024016",
"play_urlhead": "rtmp://125.64.218.67:9901" "play_urlhead": "rtmp://125.64.218.67:9901",
"qxdm": "511528",
"qxmc": "兴文县"
}, },
{ {
"id": 13, "id": 25,
"dwip": "172.16.3.13", "dwip": "172.16.3.25",
"dwmc": "鑫菁英", "dwmc": "古高路",
"dwbh": 13, "dwbh": 25,
"dwinfo": "外江路鑫菁英小区附近", "dwinfo": "兴文古高路骨科医院附近",
"dwzb": "104.623547|28.74798", "dwzb": "105.197409|28.334767",
"dwms": "外江路鑫菁英小区附近,识别中坝大桥往高铁站排放黑烟车辆", "dwms": "古高路骨科医院附近,抓拍自长宁、江安、珙县方向和古宜高速入城黑烟车辆",
"dwzt": "正常", "dwzt": "正常",
"video12": "/rtp/gb_play_34020000001320013012_34020000001320013012", "video12": "/rtp/gb_play_34020000001320025012_34020000001320025012",
"video13": "/rtp/gb_play_34020000001320013013_34020000001320013013", "video13": "/rtp/gb_play_34020000001320025013_34020000001320025013",
"video14": null, "video14": null,
"video15": null, "video15": null,
"video16": "/rtp/gb_play_34020000001320013016_34020000001320013016", "video16": "/rtp/gb_play_34020000001320025016_34020000001320025016",
"play_urlhead": "rtmp://125.64.218.67:9901" "play_urlhead": "rtmp://125.64.218.67:9901",
"qxdm": "511528",
"qxmc": "兴文县"
} }
], ],
"total": 13, "total": 5,
"page": 1, "page": 1,
"perpage": 20 "perpage": 19
}, },
"msg": "" "msg": ""
}; };

@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'superplayer_home.dart'; import 'superplayer_home.dart';
//import 'tc_player.dart';
import 'data_file.dart'; import 'data_file.dart';
void main() { void main() {
@ -71,21 +70,9 @@ class _HomePageState extends State<HomePage> {
} }
Future getListButton() async { Future getListButton() async {
List listDw = mapDwinfo['data']['items'];
List<Widget> _listButton = []; List<Widget> _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( _listButton.add(
getPlayUrl(item["play_urlhead"] + item["video16"], '${item["dwbh"]}.' + item["dwmc"])); getPlayUrl(item["play_urlhead"] + item["video16"], '${item["dwbh"]}.' + item["dwmc"]));
} }

@ -68,7 +68,7 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "0.0.2" version: "0.0.3"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter

@ -1,27 +1,27 @@
// // This is a basic Flutter widget test. // 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';
// //
// 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'; // import 'package:flutter_superplayer_example/main.dart';
//
// void main() { void main() {
// testWidgets('Verify Platform version', (WidgetTester tester) async { testWidgets('Verify Platform version', (WidgetTester tester) async {
// // Build our app and trigger a frame. // Build our app and trigger a frame.
// await tester.pumpWidget(MyApp()); // await tester.pumpWidget(MyApp());
//
// // Verify that platform version is retrieved. // Verify that platform version is retrieved.
// expect( expect(
// find.byWidgetPredicate( find.byWidgetPredicate(
// (Widget widget) => widget is Text && (Widget widget) => widget is Text &&
// widget.data.startsWith('Running on:'), widget.data.startsWith('Running on:'),
// ), ),
// findsOneWidget, findsOneWidget,
// ); );
// }); });
// } }

@ -3,7 +3,7 @@
// //
// Created by Lijy91 on 2020/9/4. // Created by Lijy91 on 2020/9/4.
// //
#import <SDWebImage/SDWebImage.h>
#import "FLTSuperPlayerView.h" #import "FLTSuperPlayerView.h"
// FLTSuperPlayerViewController // FLTSuperPlayerViewController
@ -43,6 +43,9 @@
_superPlayerView.delegate = self; _superPlayerView.delegate = self;
[self setControlViewType:args[@"controlViewType"]]; [self setControlViewType:args[@"controlViewType"]];
if (args[@"coverImageUrl"] != nil) {
[self setCoverImage:args[@"coverImageUrl"]];
}
} }
return self; return self;
} }
@ -63,17 +66,14 @@
return nil; 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 { - (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]; [self getPlayMode:call result: result];
} else if ([[call method] isEqualToString:@"getPlayState"]) { } else if ([[call method] isEqualToString:@"getPlayState"]) {
[self getPlayState:call result: result]; [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 - (void)getPlayMode:(FlutterMethodCall*)call
result:(FlutterResult)result result:(FlutterResult)result
{ {
@ -144,7 +180,6 @@
// skip // skip
} }
- (void)playWithModel:(FlutterMethodCall*)call - (void)playWithModel:(FlutterMethodCall*)call
result:(FlutterResult)result result:(FlutterResult)result
{ {

@ -16,6 +16,7 @@ A new flutter plugin project.
s.source_files = 'Classes/**/*' s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h' s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter' s.dependency 'Flutter'
s.dependency 'SDWebImage', '~> 5.0'
s.platform = :ios, '9.0' s.platform = :ios, '9.0'
s.default_subspec = 'SuperPlayer_Professional' s.default_subspec = 'SuperPlayer_Professional'

@ -9,7 +9,8 @@ import './superplayer_model.dart';
// import './superplayer_view.dart'; // import './superplayer_view.dart';
class SuperPlayerController { class SuperPlayerController {
ObserverList<SuperPlayerListener> _listeners = ObserverList<SuperPlayerListener>(); ObserverList<SuperPlayerListener> _listeners =
ObserverList<SuperPlayerListener>();
MethodChannel _channel; MethodChannel _channel;
EventChannel _eventChannel; EventChannel _eventChannel;
@ -58,7 +59,8 @@ class SuperPlayerController {
void notifyListeners(String method, dynamic data) { void notifyListeners(String method, dynamic data) {
assert(_debugAssertNotDisposed()); assert(_debugAssertNotDisposed());
if (_listeners != null) { if (_listeners != null) {
final List<SuperPlayerListener> localListeners = List<SuperPlayerListener>.from(_listeners); final List<SuperPlayerListener> localListeners =
List<SuperPlayerListener>.from(_listeners);
for (final SuperPlayerListener listener in localListeners) { for (final SuperPlayerListener listener in localListeners) {
try { try {
if (_listeners.contains(listener)) { 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) { void setPlayRate(num playRate) {
_channel.invokeMethod('setPlayRate', {'playRate': playRate}); _channel.invokeMethod('setPlayRate', {'playRate': playRate});
} }
@ -124,10 +139,6 @@ class SuperPlayerController {
_channel.invokeMethod('resetPlayer'); _channel.invokeMethod('resetPlayer');
} }
void toFullScreen() {
_channel.invokeMethod('toFullScreen');
}
void requestPlayMode(int playMode) { void requestPlayMode(int playMode) {
_channel.invokeMethod('requestPlayMode', { _channel.invokeMethod('requestPlayMode', {
'playMode': playMode, 'playMode': playMode,

@ -12,12 +12,14 @@ class SuperPlayerView extends StatefulWidget {
Function(SuperPlayerController controller) onSuperPlayerViewCreated; Function(SuperPlayerController controller) onSuperPlayerViewCreated;
SuperPlayerController controller; SuperPlayerController controller;
String controlViewType; String controlViewType;
String coverImageUrl;
SuperPlayerView({ SuperPlayerView({
Key key, Key key,
this.onSuperPlayerViewCreated, this.onSuperPlayerViewCreated,
this.controller, this.controller,
this.controlViewType = kControlViewTypeDefault, this.controlViewType = kControlViewTypeDefault,
this.coverImageUrl,
}) : super(key: key); }) : super(key: key);
@override @override
@ -42,6 +44,9 @@ class _SuperPlayerViewState extends State<SuperPlayerView> {
if (oldWidget.controlViewType != widget.controlViewType) { if (oldWidget.controlViewType != widget.controlViewType) {
widget.controller.setControlViewType(widget.controlViewType); widget.controller.setControlViewType(widget.controlViewType);
} }
if (oldWidget.coverImageUrl != widget.coverImageUrl) {
widget.controller.setCoverImage(widget.coverImageUrl);
}
super.didUpdateWidget(oldWidget); super.didUpdateWidget(oldWidget);
} }
@ -49,7 +54,8 @@ class _SuperPlayerViewState extends State<SuperPlayerView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
Map<String, dynamic> creationParams = { Map<String, dynamic> creationParams = {
'controlViewType': widget.controlViewType, 'controlViewType': widget.controlViewType,
}; 'coverImageUrl': widget.coverImageUrl,
}..removeWhere((String k, dynamic v) => v == null);
if (Platform.isAndroid) { if (Platform.isAndroid) {
return AndroidView( return AndroidView(

@ -1,6 +1,6 @@
name: flutter_superplayer name: flutter_superplayer
description: 适用于 Flutter 的腾讯云超级播放器插件 description: 适用于 Flutter 的腾讯云超级播放器插件
version: 0.0.2 version: 0.0.3
author: LiJianying <lijy91@foxmail.com> author: LiJianying <lijy91@foxmail.com>
homepage: https://github.com/leanflutter/flutter_superplayer homepage: https://github.com/leanflutter/flutter_superplayer

@ -142,11 +142,11 @@ class _SuperPlayerPageState extends State<SuperPlayerPage> with SuperPlayerListe
Widget build(BuildContext context) { Widget build(BuildContext context) {
playerRegionProvide = Provider.of<PlayerRegionProvide>(context); playerRegionProvide = Provider.of<PlayerRegionProvide>(context);
playerRatioProvide = Provider.of<PlayerRatioProvide>(context); playerRatioProvide = Provider.of<PlayerRatioProvide>(context);
List<Widget> listData = getDataListControl2(); // List<Widget> listData = getDataListControl2();
double btnHeight1 = 70; // double btnHeight1 = 70; //
double btnHeight2 = 160; // double btnHeight2 = 160; //
int btnCount = 4; // int btnCount = 4; //
int btnCount3 = listData.length; // // int btnCount3 = listData.length; //
var mediaSize = MediaQuery.of(context).size; var mediaSize = MediaQuery.of(context).size;
// widget.id-2 // widget.id-2
@ -616,104 +616,104 @@ class _SuperPlayerPageState extends State<SuperPlayerPage> with SuperPlayerListe
} }
//2List //2List
List<Widget> getDataListControl2() { // List<Widget> getDataListControl2() {
double _diameter = 100; // double _diameter = 100;
double _iconSize = 70; // double _iconSize = 70;
double _fontSize = 14; // double _fontSize = 14;
double _marginVer = 8; // double _marginVer = 8;
//
List<Widget> list = [ // List<Widget> 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( // getRoundButton(
// diameter: _diameter, // diameter: _diameter,
// iconSize: _iconSize, // iconSize: _iconSize,
// text: '快退', // fontSize: _fontSize,
// icon: Icons.fast_rewind, // marginVer: _marginVer,
// text: '放大',
// icon: Icons.zoom_in,
// onPress: () { // onPress: () {
// fastSeek(false); // //print('Icons.videocam');
// //_inputDialog(context2);
// if (10 >= playerRatioProvide.scale) {
// playerRatioProvide.changeScale(playerRatioProvide.scale + 0.5);
// }
// }, // },
// ), // ),
// getRoundButton( // getRoundButton(
// diameter: _diameter, // diameter: _diameter,
// iconSize: _iconSize, // iconSize: _iconSize,
// text: '快进', // fontSize: _fontSize,
// icon: Icons.fast_forward, // marginVer: _marginVer,
// text: '缩小',
// icon: Icons.zoom_out,
// onPress: () { // 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'); // //print('Icons.videocam');
// //_getFileDialog(context2); // //_getFileDialog(context2);
// // // if (1 < playerRatioProvide.scale) {
// playerRatioProvide.changeScale(1.0); // playerRatioProvide.changeScale(playerRatioProvide.scale - 0.5);
// playerRatioProvide.changeOffset(Offset(0, 0)); // }
// playerRatioProvide.changeDeltaX(0.0);
// playerRatioProvide.changeDeltaY(0.0);
// }, // },
// ), // ),
getRoundButton( // // _getIconAndTextButton(
diameter: _diameter, // // '还原',
iconSize: _iconSize, // // Icons.reply,
fontSize: _fontSize, // // Colors.orange,
marginVer: _marginVer, // // () {
text: '截图', // // //print('Icons.videocam');
icon: Icons.camera_alt, // // //_getFileDialog(context2);
onPress: () { // // //
//key // // playerRatioProvide.changeScale(1.0);
//_myFijkPanelWidgetBuilderStateKey.currentState.takeSnapshot(); // // playerRatioProvide.changeOffset(Offset(0, 0));
//_fijkPanelWidgetBuilder.currentState..takeSnapshot(); // // playerRatioProvide.changeDeltaX(0.0);
takeSnapshot(); // // playerRatioProvide.changeDeltaY(0.0);
}, // // },
), // // ),
getRoundButton( // getRoundButton(
diameter: _diameter, // diameter: _diameter,
iconSize: _iconSize, // iconSize: _iconSize,
fontSize: _fontSize, // fontSize: _fontSize,
marginVer: _marginVer, // marginVer: _marginVer,
text: '全屏', // text: '截图',
icon: Icons.fullscreen, // icon: Icons.camera_alt,
onPress: () { // onPress: () {
//player.enterFullScreen(); // //key
_playerController.toFullScreen(); // //_myFijkPanelWidgetBuilderStateKey.currentState.takeSnapshot();
}, // //_fijkPanelWidgetBuilder.currentState..takeSnapshot();
), // takeSnapshot();
]; // },
return list; // ),
} // getRoundButton(
// diameter: _diameter,
// iconSize: _iconSize,
// fontSize: _fontSize,
// marginVer: _marginVer,
// text: '全屏',
// icon: Icons.fullscreen,
// onPress: () {
// //player.enterFullScreen();
// _playerController.toFullScreen();
// },
// ),
// ];
// return list;
// }
void takeSnapshot() { void takeSnapshot() {
// player.takeSnapShot().then((v) { // player.takeSnapShot().then((v) {

@ -369,7 +369,7 @@ packages:
path: "lib/my_flutter_superplayer" path: "lib/my_flutter_superplayer"
relative: true relative: true
source: path source: path
version: "0.0.2" version: "0.0.3"
flutter_swiper: flutter_swiper:
dependency: "direct main" dependency: "direct main"
description: description:

@ -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.29+20220502
#version: 1.4.30+20220504 #version: 1.4.30+20220504
#version: 1.4.31+20220506 #version: 1.4.31+20220506
version: 1.4.32+20220511 #version: 1.4.32+20220511
version: 1.4.33+20220515
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: ">=2.7.0 <3.0.0"

Loading…
Cancel
Save