bjy_playbackui_flutter 4.2.4 copy "bjy_playbackui_flutter: ^4.2.4" to clipboard
bjy_playbackui_flutter: ^4.2.4 copied to clipboard

BaiJiaYun video playback UI SDK for Flutter.

bjy_playbackui_flutter #

flutter demo 示例工程

百家云回放和点播 SDK 的 flutter 插件。

1. 回放 #

// 进入普通回放     
BJYPlaybackUIFlutterPlatform.instance.startPlayback("roomId", "token", null)  

// 进入长期课回放  
BJYPlaybackUIFlutterPlatform.instance.startPlayback("roomId", "token", {"session_id": xxx});  

// 进入长期课裁剪版本回放  
BJYPlaybackUIFlutterPlatform.instance.startPlayback("roomId", "token", {"session_id": xxx, "clipedVersion": 1});  

2. 点播 #

2.1. 跳转到播放页面

BJYPlaybackUIFlutterPlatform.instance.startVideo("videoId", "token", {  
      // 用户唯一标识  
      "userId": "853145204",
      // 用户昵称  
      "userName": "yongjiaming",
      // 是否支持循环播放  
      "supportLooping": true, 
      // 是否支持记忆播放,即下次播放从上次关闭的时间点续播       
      "supportBreakPointPlay": true,
      // 默认是否横屏播放        
      "isLandscape": true    });  

2.2. 内嵌播放器 #

内嵌播放器视图,能方便嵌入到 flutter 进行页面自定义开发。

以下是 dart 创建内嵌播放器视图的代码,支持单个页面嵌入多个播放器视图。

2.2.1. 在线播放

在线播放,token 必须传,isLandscape 表示当前播放器是否处于横屏状态,用于更新全屏图标状态。

var playerWidget = buildNativeView("e33180987", "160491264",
  "Vaac3j5n5hdjXPso7IvWENxo6c4wA6poVNb7GL8FoVwnHPIguunSCjG5JtrxIFp-", false);

2.2.2. 离线播放

离线播放,token 传空字符串,isOffline 传 true。同时需要保证下载状态是 Finish。

var playerWidget = buildNativeView("e33180987", "189522041",
        "", false, isOffline: true);

播放器默认为 fit模式,保证画面完整显示,但可能会有黑边。

可在 buildNativeView 里通过 creationParams.putIfAbsent("aspectRatio", () => 1) 动态配置。

buildNativeView 的实现如下

Widget buildNativeView(String domain, String vid, String token, bool isLandscape, {bool isOffline = false}) {
    // This is used in the platform side to register the view.
    const String viewType = 'flutter_bjy_player_view';
    // Pass parameters to the platform side.
    final Map<String, dynamic> creationParams = <String, dynamic>{};
    creationParams.putIfAbsent("customDomain", () => domain);
    creationParams.putIfAbsent(
        "playerConfig",
        () => {
              // 用户唯一标识
              "userId": "853145204",
              // 用户昵称
              "userName": "yongjiaming",
              // 是否支持循环播放
              "supportLooping": false,
              // 是否支持记忆播放,即下次播放从上次关闭的时间点续播
              "supportBreakPointPlay": true,
              "supportBackgroundAudio": false,
              // 通知 VideoView 当前是否是横屏,涉及到全屏按钮样式
              "isLandscape": isLandscape
            });
    creationParams.putIfAbsent("vid", () => vid);
    creationParams.putIfAbsent("token", () => token);
    creationParams.putIfAbsent("isOffline", () => isOffline);
    // 设置视频view 的裁剪方式,0 fill,1 fit,默认 fit
    // creationParams.putIfAbsent("aspectRatio", () => 1);

    if (Platform.isIOS) {
      return UiKitView(
        viewType: viewType,
        onPlatformViewCreated: (viewId) {
          MethodChannel methodChannel =
              MethodChannel('com.baijiayun.flutter.NativePlayerView_$viewId');
          nativeMessageListener(methodChannel);
          platforms.add(methodChannel);
        },
        layoutDirection: TextDirection.ltr,
        creationParams: creationParams,
        creationParamsCodec: const StandardMessageCodec(),
      );
    }
    return AndroidView(
      viewType: viewType,
      onPlatformViewCreated: (viewId) {
        print('viewId:$viewId');
        MethodChannel methodChannel =
            MethodChannel('com.baijiayun.flutter.NativePlayerView_$viewId');
        nativeMessageListener(methodChannel);
        platforms.add(methodChannel);
      },
      layoutDirection: TextDirection.ltr,
      creationParams: creationParams,
      creationParamsCodec: const StandardMessageCodec(),
    );
  }

2.2.3. 状态回调

methodChannel 监听播放器状态回调

switch (methodCall.method) {
        // 点击播放器的全屏按钮
        case "onToggleScreen":
          if (methodCall.arguments == true) {
            SystemChrome.setPreferredOrientations([
              DeviceOrientation.landscapeLeft,
              DeviceOrientation.landscapeRight,
            ]);
          } else {
            SystemChrome.setPreferredOrientations([
              DeviceOrientation.portraitUp,
              DeviceOrientation.portraitDown,
            ]);
          }
          break;
        // 播放器状态回调
        case "onPlayerStatus":
          /**
           * 出错
            STATE_ERROR,
            未初始化
            STATE_IDLE,
            初始化
            STATE_INITIALIZED,
            数据已准备好,待播放
            STATE_PREPARED,
            播放中
            STATE_STARTED,
            暂停状态
            STATE_PAUSED,
            终止状态(已释放播放器实例)
            STATE_STOPPED,
            播放结束
            STATE_PLAYBACK_COMPLETED
         */
          print("onPlayerStatus ${methodCall.arguments}");
          break;
        // 播放器播放进度回调
        case "onPlayingTime":
          print("onPlayingTime ${methodCall.arguments}");
          break;
        // 播放器出错回调
        case "onError":
          print("onError ${methodCall.arguments}");
          break;
        default:
          break;
      }

3. 下载 #

// 获取下载记录,返回对象为 JsonArray,每个 JsonObject 对应一条下载记录。
// 格式如下
/**
    {
        // 视频分辨率,-1未知类型;0标清;1高清;2超清;3,720P;4,1080P;5 音频
        "definition": 2,
        // 房间号,仅回放有值,点播为空
        "roomId": "22112282539916",
        // 0 点播下载类型,1 回放下载类型
        "type": 1,
        // 下载文件大小,单位 byte
        "downloadedLength": 4016792,
        // 下载状态,0初始状态;1下载中;2暂停;3出错;4完成;5已取消
        "status": 4,
        // 回放长期课专有
        "sessionId": ”202307050“,
        // 视频 id
        "videoId": ”190660972“,
        // 总文件大小
        "totalLength": 4016792,
        // 视频时长,单位秒
        "duration": 1233
    }
    */
BJYPlaybackUIFlutterPlatform.instance.getAllDownloadInfo()  

// 下载点播视频  
BJYPlaybackUIFlutterPlatform.instance.downloadVideo("videoID", "videoToken",
        (downloadedLength, totalLength) {
      print("progress: $downloadedLength/$totalLength");
    }, (stateCode, message) {
      print("state: $stateCode");
    });

// 下载回放视频  
BJYPlaybackUIFlutterPlatform.instance
        .downloadPlayback("playbackClassID", "playbacksSessionID", "playbacksToken",
            (downloadedLength, totalLength) {
      print("progress: $downloadedLength/$totalLength");
    }, (stateCode, message) {
      print("state: $stateCode");
    });
  
// 开始下载  
BJYPlaybackUIFlutterPlatform.instance.startDownloadWithVideoID("videoID");  
BJYPlaybackUIFlutterPlatform.instance.startDownloadWithRoomIDAndSessionID("roomID", "sessionID");  

// 暂停下载  
BJYPlaybackUIFlutterPlatform.instance.pauseDownloadWithVideoID("videoID");  
BJYPlaybackUIFlutterPlatform.instance.pauseDownloadWithRoomIDAndSessionID("roomID", "sessionID");  

// 取消并删除下载文件  
BJYPlaybackUIFlutterPlatform.instance.cancelDownloadWithVideoID("videoID");  
BJYPlaybackUIFlutterPlatform.instance.cancelDownloadWithRoomIDAndSessionID("roomID", "sessionID");  

4. 离线点播回放 #

请确保 videoId/RoomId 有对应的下载记录,否则无法正常调起播放页面

// 播本地点播  
BJYPlaybackUIFlutterPlatform.instance.startLocalVideo("videoID", {});  

// 播本地回放  
BJYPlaybackUIFlutterPlatform.instance.startLocalPlayback("roomID", "sessionID", {});  
2
likes
0
pub points
16%
popularity

Publisher

unverified uploader

BaiJiaYun video playback UI SDK for Flutter.

Homepage

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on bjy_playbackui_flutter