Code Monkey home page Code Monkey logo

flutterqiniucloudliveplugin's Introduction

flutter_qiniucloud_live_plugin

Flutter 七牛云直播云插件,支持IOS、Android客户端

当前版本未发布正式版,请谨慎使用
重构计划:打算重构为RTMP推流端和RTMP播放端,拆分插件

终章

致所有 flutter_qiniucloud_live_plugin 贡献者及用户

由于此插件是基于七牛云直播云SDK进行Flutter封装,鉴于七牛云连麦相关内容需要用到RTC SDK,所以此项目不再维护,后续将开放七牛云RTC SDk for flutter,支持直播、连麦所有相关功能,具体请参考:https://developer.qiniu.com/rtc/8802/pd-overview。本项目将在一段时间后进行归档,不再进行维护。

至今此项目支持直播推流、拉流功能,此功能可继续使用,相关Issues不再维护。RTC SDK开源后大家可转至 RTC SDK进行使用。

一个项目的征途结束了,开源的步伐永远不滞。
欢迎加入Flutter讨论群,QQ群号: 850923396

2022-03-30

Getting Started

集成七牛云直播云推流、观看等功能

讨论群


点击加入群聊

功能清单

推流端

[x]推流
[x]推流时初始化自定义系统参数、预览参数等内容
[x]美颜设置
[x]自动对焦
[ ]手动对焦
[x]回调监听器
[x]动态水印
[ ]背景音乐

播放端

[x]播放
[x]监听器

连麦SDK

[x]连麦
[x]远端画面播放

集成

Flutter

 flutter_qiniucloud_live_plugin:
    git:
      url: https://github.com/JiangJuHong/FlutterQiniucloudLivePlugin.git
      ref: master

Android

不需要额外集成,已内部打入混淆

IOS

配置权限信息,在Info.plist中增加

<key>io.flutter.embedded_views_preview</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的同意,才能访问麦克风</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
</array>

修改 Podfile,增加 config.build_settings['ENABLE_BITCODE'] = 'NO'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

注意事项

由于Android、IOS底层兼容不一致,导致以下内容会受影响:

QiniucloudPlayerView 监听器

  1. Error 回调参数:Android:int 错误码 or IOS:String 错误描述

  2. Info 状态码: IOS or Android 不一致

    • Android

      状态码 描述
      1 未知消息
      3 第一帧视频已成功渲染
      200 连接成功
      340 读取到 metadata 信息
      701 开始缓冲
      702 停止缓冲
      802 硬解失败,自动切换软解
      901 预加载完成
      8088 loop 中的一次播放完成
      10001 获取到视频的播放角度
      10002 第一帧音频已成功播放
      10003 获取视频的I帧间隔
      20001 视频的码率统计结果
      20002 视频的帧率统计结果
      20003 音频的帧率统计结果
      20004 音频的帧率统计结果
      10004 视频帧的时间戳
      10005 音频帧的时间戳
      1345 离线缓存的部分播放完成
      565 上一次 seekTo 操作尚未完成
    • IOS

      状态码 描述
      0 未知状态,只会作为 init 后的初始状态,开始播放之后任何情况下都不会再回到此状态。
      1 正在准备播放所需组件,在调用 -play 方法时出现。
      2 播放组件准备完成,准备开始播放,在调用 -play 方法时出现。
      3 播放组件准备完成,准备开始连接
      4 缓存数据为空状态。(特别需要注意的是当推流端停止推流之后,PLPlayer 将出现 caching 状态直到 timeout 后抛出 timeout 的 error 而不是出现 PLPlayerStatusStopped 状态,因此在直播场景中,当流停止之后一般做法是使用 IM 服务告知播放器停止播放,以达到即时响应主播断流的目的。)
      5 正在播放状态。
      6 暂停状态。
      7 停止状态 (该状态仅会在回放时播放结束出现,RTMP 直播结束并不会出现此状态)
      8 错误状态,播放出现错误时会出现此状态。
      9 自动重连的状态
      10 播放完成(该状态只针对点播有效)
  3. VideoSizeChanged 回调:仅支持Android

QiniucloudPushView 监听器

  1. StateChanged 状态码: IOS or Android 不一致

    状态码 描述 Android Ios
    PREPARING -
    READY 相机准备就绪
    CONNECTING 连接中
    STREAMING 推流中
    SHUTDOWN 直播中断
    IOERROR 网络连接失败(连接rtmp推流失败)
    OPEN_CAMERA_FAIL 摄像头打开失败
    AUDIO_RECORDING_FAIL 麦克风打开失败
    DISCONNECTED 已经断开连接(直播断开)
    TORCH_INFO 开启闪光灯
  2. StreamStatusChanged 状态
    IOS 仅包含 audioFps、videoFps、totalAVBitrate 属性

  3. ConferenceStateChanged IOS暂不支持(计划内)

  4. UserJoinConference IOS暂不支持(计划内)

  5. UserLeaveConference IOS暂不支持(计划内)

  6. RecordAudioFailedHandled IOS暂不支持

  7. RestartStreamingHandled IOS暂不支持

  8. PreviewSizeSelected IOS暂不支持

  9. PreviewFpsSelected IOS暂不支持

  10. AudioSourceAvailable IOS暂不支持

使用

使用Demo时请主动更改推流地址和播放地址

组件列表

QiniucloudPushView: 推流组件,通过该窗口Controller实现推流以及回显功能
QiniucloudPlayerView: 播放器组件,通过Controller控制播放等内容
QiniucloudConnectPlayerView:连麦推流预览组件

功能清单

连麦推流视图组件(QiniucloudPushView)

例子

QiniucloudPushView(
  cameraStreamingSetting: CameraStreamingSettingEntity(
    faceBeauty: faceBeautySettingEntity,
  ),
  streamingProfile: StreamingProfileEntity(
    publishUrl: "rtmp://pili-publish.tianshitaiyuan.com/zuqulive/1576400046230A?e=1581756846&token=v740N_w0pHblR7KZMSPHhfdqjxrHEv5e_yBaiq0e:nlza8l7AsBDNkp47AD09ItfZSKA=",
  ),
  onViewCreated: (QiniucloudPushViewController controller) {
    controller.resume();
  },
)

相关接口:(QiniucloudPushViewController调用方法)

接口 说明 参数 Android IOS
resume 打开摄像头和麦克风采集 -
pause 关闭摄像头和麦克风采集 -
startConference 开始连麦 -
stopConference 停止连麦 -
startStreaming 开始推流 {publishUrl:'推流地址'}
stopStreaming 停止推流 -
destroy 销毁 -
isZoomSupported 查询是否支持缩放(IOS始终返回true) -
setZoomValue 设置缩放比例 {value:'比例值'}
getMaxZoom 获得最大缩放比例 -
getZoom 获得缩放比例 -
turnLightOn 开启闪光灯 -
turnLightOff 关闭闪光灯 -
switchCamera 切换摄像头 -
mute 切换静音 {mute:'是否静音',audioSource:'音频源'}
kickoutUser 根据用户ID踢人 -
setConferenceOptions 设置连麦参数 -
setStreamingProfile 更新推流参数 -
getParticipantsCount 获取参与连麦的人数,不包括自己 -
getParticipants 获取参与连麦的用户ID列表,不包括自己 -
setPreviewMirror 设置预览镜像 -
setEncodingMirror 设置推流镜像 -
startPlayback 开启耳返 -
stopPlayback 关闭耳返 -
updateWatermarkSetting 更新动态水印 -
updateFaceBeautySetting 更新美颜设置 -
addRemoteWindow 添加远程视图 -
getVideoEncodingSize 获取编码器输出的画面的高宽 -
setLocalWindowPosition 自定义视频窗口位置(连麦推流模式下有效) -

播放视图组件(QiniucloudPlayerView)

例子

QiniucloudPlayerView(
  url: "rtmp://pili-live-rtmp.tianshitaiyuan.com/zuqulive/test",
  onViewCreated: (QiniucloudPlayerViewController controller){
    controller.setVideoPath(url:"rtmp://pili-live-rtmp.tianshitaiyuan.com/zuqulive/1576400046230A")
  },
),

相关接口:(QiniucloudPlayerViewController调用方法)

接口 说明 参数 Android IOS
setDisplayAspectRatio 设置画面预览模式 {mode:'模式,枚举'}
start 开始播放 {url:"播放的URL,通过该参数可以做到切换视频",sameSource:"是否是同种格式播放,同格式切换打开更快 @waring 当sameSource 为 YES 时,视频格式与切换前视频格式不同时,会导致视频打开失败【该属性仅IOS有效】"}
pause 暂停播放 -
stopPlayback 停止播放 -
getRtmpVideoTimestamp 在RTMP消息中获取视频时间戳 -
getRtmpAudioTimestamp 在RTMP消息中获取音频时间戳 -
setBufferingEnabled 启用/关闭 播放器的预缓冲 {enabled:'是否启用'}
getHttpBufferSize 获取已经缓冲的长度 -

连麦推流预览组件(QiniucloudConnectPlayerView)

例子

QiniucloudConnectPlayerView(
  onViewCreated: (viewId, playerController) {
    this.playerController = playerController;
    controller.addRemoteWindow(id: viewId);
  },
)

相关接口:(QiniucloudPlayerViewController调用方法)

接口 说明 参数 Android IOS
setAbsoluteMixOverlayRect 配置连麦合流的参数(仅主播才配置,连麦观众不用)使用绝对值来配置该窗口在合流画面中的位置和大小 -
setRelativeMixOverlayRect 配置连麦合流的参数(仅主播才配置,连麦观众不用)使用相对值来配置该窗口在合流画面中的位置和大小 -

其它插件

我同时维护的还有以下插件,如果您感兴趣与我一起进行维护,请通过Github联系我,欢迎 issues 和 PR。
平台 插件 描述 版本
Flutter FlutterVideoPlayerLibrary-Desc Flutter 最好用的播放器(UI库) -
Flutter FlutterPerfectVolumeControl Flutter 完美的音量控制器插件 pub package
Flutter FlutterTencentImPlugin 腾讯云IM插件 pub package
Flutter FlutterTencentRtcPlugin 腾讯云Rtc插件 pub package
Flutter FlutterXiaoMiPushPlugin 小米推送SDK插件 pub package
Flutter FlutterHuaWeiPushPlugin 华为推送(HMS Push)插件 pub package
Flutter FlutterTextSpanField 自定义文本样式输入框 pub package
Flutter FlutterClipboardListener 粘贴板监听器 pub package
Flutter FlutterQiniucloudLivePlugin Flutter 七牛云直播云插件 暂未发布,通过 git 集成

flutterqiniucloudliveplugin's People

Contributors

guodapeng avatar huic-read-only avatar jiangjuhong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

flutterqiniucloudliveplugin's Issues

无法推流

09-18 15:33:25.333 29072-29072/top.huic.flutter_qiniucloud_live_plugin_example E/AppPara: context is not activity,can not set setScreenOrientation
09-18 15:33:25.369 29072-29072/top.huic.flutter_qiniucloud_live_plugin_example E/YOUME: Init: Already initialzed
09-18 15:33:25.369 29072-29072/top.huic.flutter_qiniucloud_live_plugin_example E/PLDroidRTCStreaming: RTC-Session:MeetingSession:failed to initialize engine, error code: -7
09-18 15:33:40.808 29072-29072/top.huic.flutter_qiniucloud_live_plugin_example E/MethodChannel#flutter/platform_views: Failed to handle method call
java.lang.IllegalArgumentException: Only support 16:9/4:3 ratio!
at com.qiniu.pili.droid.streaming.StreamingProfile.getVideoEncodingSize(StreamingProfile.java:1282)
at com.qiniu.pili.droid.rtcstreaming.RTCMediaStreamingManager.prepare(RTCMediaStreamingManager.java:375)
at top.huic.flutter_qiniucloud_live_plugin.view.QiniucloudPushPlatformView.init(QiniucloudPushPlatformView.java:294)
at top.huic.flutter_qiniucloud_live_plugin.view.QiniucloudPushPlatformView.create(QiniucloudPushPlatformView.java:215)
at io.flutter.plugin.platform.SingleViewPresentation.onCreate(SingleViewPresentation.java:174)
at android.app.Dialog.dispatchOnCreate(Dialog.java:419)
at android.app.Dialog.show(Dialog.java:320)
at android.app.Presentation.show(Presentation.java:235)
at io.flutter.plugin.platform.VirtualDisplayController.(VirtualDisplayController.java:93)
at io.flutter.plugin.platform.VirtualDisplayController.create(VirtualDisplayController.java:53)
at io.flutter.plugin.platform.PlatformViewsController$1.createPlatformView(PlatformViewsController.java:105)
at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:96)

运行ios失败

您好, 我尝试clone并运行了example到我的实机上

  • iphone7+ , ios 15.4.1
  • Version 13.3 (13E113)

Error (Xcode):
'/Users/liyouteng/Documents/projects/FlutterQiniucloudLivePlugin/example/ios/Pod
s/PLRTCStreamingKit/Pod/Library/PLRTCStreamingKit.framework/PLRTCStreamingKit'
does not contain bitcode. You must rebuild it with bitcode enabled (Xcode
setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable
bitcode for this target.
file '/Users/liyouteng/Documents/projects/FlutterQiniucloudLivePlugin/example/ios/Pod
s/PLRTCStreamingKit/Pod/Library/PLRTCStreamingKit.framework/PLRTCStreamingKit'
for architecture armv7

Encountered error while building for device.

尝试将PLRTCStreamingKit 下的 Build Settings -> Build Options -> Enable Bitcode 设定yes 或是no
都会得到这个错误

尝试运行 example 没有正常工作

感谢您的付出,我这里遇到了一些问题,我正在尝试自己解决。但是我不懂原生开发,如果方便,希望能提供一些帮助。

android 端能安装到真机,但是点击推流会会卡住:

Launching lib/main.dart on SEA AL10 in debug mode...
Running Gradle task 'assembleDebug'...
注: /Users/felix/.pub-cache/hosted/pub.flutter-io.cn/permission_handler-4.3.0/android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些输入文件使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...
Waiting for SEA AL10 to report its views...
Debug service listening on ws://127.0.0.1:62813/82nm5b1rY-A=/ws
Syncing files to device SEA AL10...
I/AwareBitmapCacher(32613): init lrucache size: 2097152 pid=32613
W/_plugin_example(32613): type=1400 audit(0.0:5937576): avc: granted { write } for pid=32613 name="files" dev="sdcardfs" ino=430733 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
W/_plugin_example(32613): type=1400 audit(0.0:5937577): avc: granted { add_name } for pid=32613 name="report.db-journal" scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
W/_plugin_example(32613): type=1400 audit(0.0:5937578): avc: granted { create } for pid=32613 name="report.db-journal" scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0:c62,c257,c512,c768 tclass=file
W/_plugin_example(32613): type=1400 audit(0.0:5937579): avc: granted { read write open } for pid=32613 path="/storage/emulated/0/Android/data/top.huic.flutter_qiniucloud_live_plugin_example/files/report.db-journal" dev="sdcardfs" ino=584205 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=file
W/_plugin_example(32613): type=1400 audit(0.0:5937580): avc: granted { read } for pid=32613 name="files" dev="sdcardfs" ino=430733 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
W/_plugin_example(32613): type=1400 audit(0.0:5937590): avc: granted { write } for pid=32613 name="files" dev="sdcardfs" ino=430733 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
W/_plugin_example(32613): type=1400 audit(0.0:5937591): avc: granted { add_name } for pid=32613 name="reportnew.db" scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
W/_plugin_example(32613): type=1400 audit(0.0:5937592): avc: granted { create } for pid=32613 name="reportnew.db" scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0:c62,c257,c512,c768 tclass=file
W/_plugin_example(32613): type=1400 audit(0.0:5937593): avc: granted { read write open } for pid=32613 path="/storage/emulated/0/Android/data/top.huic.flutter_qiniucloud_live_plugin_example/files/reportnew.db" dev="sdcardfs" ino=543202 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=file
W/_plugin_example(32613): type=1400 audit(0.0:5937594): avc: granted { write } for pid=32613 name="files" dev="sdcardfs" ino=430733 scontext=u:r:untrusted_app_27:s0:c62,c257,c512,c768 tcontext=u:object_r:sdcardfs:s0 tclass=dir
I/YOUMEIM (32613): 2020/05/14 10:57:43.400 threadid:527733079376  INFO: Enter[YouMeDataChannel.cpp#ReportProc:102]
I/YOUMEIM (32613): 2020/05/14 10:57:43.410 threadid:527733079376  INFO: IPV4[SyncTCP.cpp#Connect:131]
D/YOUMEIM (32613): 2020/05/14 10:57:43.411 threadid:527733079376  DEBUG: connected  IPV4: -1[SyncTCP.cpp#Connect:138]
I/YOUMEIM (32613): 2020/05/14 10:57:43.485 threadid:527733079376  INFO: IPV4[SyncTCP.cpp#Connect:131]
D/YOUMEIM (32613): 2020/05/14 10:57:43.485 threadid:527733079376  DEBUG: connected  IPV4: -1[SyncTCP.cpp#Connect:138]
I/YOUMEIM (32613): 2020/05/14 10:57:43.562 threadid:527733079376  INFO: IPV4[SyncTCP.cpp#Connect:131]
D/YOUMEIM (32613): 2020/05/14 10:57:43.562 threadid:527733079376  DEBUG: connected  IPV4: -1[SyncTCP.cpp#Connect:138]
I/YOUMEIM (32613): 2020/05/14 10:57:43.640 threadid:527733079376  INFO: IPV4[SyncTCP.cpp#Connect:131]
D/YOUMEIM (32613): 2020/05/14 10:57:43.640 threadid:527733079376  DEBUG: connected  IPV4: -1[SyncTCP.cpp#Connect:138]
I/YOUMEIM (32613): 2020/05/14 10:57:43.708 threadid:527733079376  INFO: IPV4[SyncTCP.cpp#Connect:131]
D/YOUMEIM (32613): 2020/05/14 10:57:43.709 threadid:527733079376  DEBUG: connected  IPV4: -1[SyncTCP.cpp#Connect:138]
W/Settings(32613): Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global.
V/HiTouch_HiTouchSensor(32613): User setup is finished.
V/AudioManager(32613): querySoundEffectsEnabled...
D/ZrHung.AppEyeUiProbe(32613): not watching, wait.


应该是这里附近卡住的


D/ZrHung.AppEyeUiProbe(32613): restart watching
W/PlatformViewsController(32613): Creating a virtual display of size: [1080, 2340] may result in problems(https://github.com/flutter/flutter/issues/2897).It is larger than the device screen size: [1080, 2259].
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:created, AVCodecType = SW_VIDEO_WITH_SW_AUDIO_CODEC
I/PLDroidMediaStreaming(32613): Pili-System:MediaStreamingManager:{"device_model":"HUAWEISEA-AL10","os_version":"os version:10, Android SDK_INT:29, SoC Hardware:kirin980","sdk_version":"librtmp-1.1.0;PLDroidCameraStreaming-2.3.0.5","app_name":"top.huic.flutter_qiniucloud_live_plugin_example","app_version":"1.0","gl_version":3}
I/PLDroidRTCStreaming(32613): RTC-Interface:RTCMediaStreaming:create RTCMediaStreamingManager encodingType = SW_VIDEO_WITH_SW_AUDIO_CODEC
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:setStreamingSessionListener true
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:setStreamStatusCallback true
W/Gralloc3(32613): allocator 3.x is not supported
I/PLDroidRTCStreaming(32613): RTC-Interface:RTCMediaStreaming:setConferenceOptions
I/PLDroidRTCStreaming(32613): RTC-Session:MeetingSession:setConferenceOptions +
I/PLDroidRTCStreaming(32613): RTC-Session:MeetingSession:setConferenceOptions -
I/PLDroidRTCStreaming(32613): RTC-Interface:RTCMediaStreaming:prepare
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:setStreamingStateListener true
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:setStreamingPreviewCallback true
W/PLDroidMediaStreaming(32613): Pili-Capture:CameraManager:mCamera is null in preparePreviewCallback
I/PLDroidMediaStreaming(32613): Pili-Interface:MediaStreamingManager:setAudioSourceCallback true
E/MethodChannel#flutter/platform_views(32613): Failed to handle method call
E/MethodChannel#flutter/platform_views(32613): java.lang.IllegalArgumentException: Only support 16:9/4:3 ratio!
E/MethodChannel#flutter/platform_views(32613): 	at com.qiniu.pili.droid.streaming.StreamingProfile.getVideoEncodingSize(StreamingProfile.java:1282)
E/MethodChannel#flutter/platform_views(32613): 	at com.qiniu.pili.droid.rtcstreaming.RTCMediaStreamingManager.prepare(RTCMediaStreamingManager.java:375)
E/MethodChannel#flutter/platform_views(32613): 	at top.huic.flutter_qiniucloud_live_plugin.view.QiniucloudPushPlatformView.init(QiniucloudPushPlatformView.java:294)
E/MethodChannel#flutter/platform_views(32613): 	at top.huic.flutter_qiniucloud_live_plugin.view.QiniucloudPushPlatformView.create(QiniucloudPushPlatformView.java:215)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.plugin.platform.SingleViewPresentation.onCreate(SingleViewPresentation.java:186)
E/MethodChannel#flutter/platform_views(32613): 	at android.app.Dialog.dispatchOnCreate(Dialog.java:579)
E/MethodChannel#flutter/platform_views(32613): 	at android.app.Dialog.show(Dialog.java:397)
E/MethodChannel#flutter/platform_views(32613): 	at android.app.Presentation.show(Presentation.java:250)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.plugin.platform.VirtualDisplayController.<init>(VirtualDisplayController.java:95)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.plugin.platform.VirtualDisplayController.create(VirtualDisplayController.java:48)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.plugin.platform.PlatformViewsController$1.createPlatformView(PlatformViewsController.java:112)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:95)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#flutter/platform_views(32613): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:643)
E/MethodChannel#flutter/platform_views(32613): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#flutter/platform_views(32613): 	at android.os.MessageQueue.next(MessageQueue.java:363)
E/MethodChannel#flutter/platform_views(32613): 	at android.os.Looper.loop(Looper.java:173)
E/MethodChannel#flutter/platform_views(32613): 	at android.app.ActivityThread.main(ActivityThread.java:8169)
E/MethodChannel#flutter/platform_views(32613): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter/platform_views(32613): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
E/MethodChannel#flutter/platform_views(32613): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
E/_plugin_exampl(32613): No package ID ff found for ID 0xffffffff.
E/Resource(32613): printErrorResource, maybe not a error because module has entative access to resource called by =android.content.res.HwResourcesImpl.printErrorResource:2634 android.content.res.ResourcesImpl.getResourceEntryName:377 android.content.res.Resources.getResourceEntryName:2229 com.youme.voiceengine.video.SurfaceViewRenderer.getResourceName:276 com.youme.voiceengine.video.SurfaceViewRenderer.<init>:54 com.qiniu.pili.droid.rtcstreaming.RTCSurfaceView.<init>:15 
I/ResourcesImplEx(32613): The apk asset path = ApkAssets{path=/system/framework/framework-res.apk}
I/ResourcesImplEx(32613): The apk asset path = ApkAssets{path=/system/framework/framework-res-hwext.apk}
I/ResourcesImplEx(32613): The apk asset path = ApkAssets{path=/hw_product/overlay/frameworkResOverlay.apk}
I/ResourcesImplEx(32613): The apk asset path = ApkAssets{path=/data/app/top.huic.flutter_qiniucloud_live_plugin_example-HTvf_xECvJncA39Z4qooRg==/base.apk}
D/EglRenderer(32613): Initializing EglRenderer
D/EglBase14(32613): SDK version: 29. isEGL14Supported: true
D/OpenGLRenderer(32613): disableOutlineDraw is true
I/HiTouch_HiTouchSensor(32613): HiTouch restricted: Sub windows restricted.
D/HiTouch_PressGestureDetector(32613): onAttached, package=top.huic.flutter_qiniucloud_live_plugin_example, windowType=2030, mHiTouchRestricted=true
D/mali_winsys(32613): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
I/EglRenderer(32613): setLayoutAspectRatio: 1.0
I/SurfaceViewRenderer(32613): SurfaceViewRender:com.qiniu.pili.droid.rtcstreaming.RTCSurfaceView{22c09ef V.E...... ......ID 0,0-300,300}view width:300 height:300
I/SurfaceViewRenderer(32613): surfaceCreated
I/SurfaceViewRenderer(32613): surfaceChanged: format: 4 size: 300x300
D/mali_winsys(32613): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/NetworkSecurityConfig(32613): No Network Security Config specified, using platform default

截屏2020-05-14 上午11 00 11

Only support 16:9/4:3 ratio!

iOS 无法安装到真机,编译出错了。
我做了一些尝试
1、修改了 Signing & Capabilities 的 Team,修改成我自己的信息
2、修改了 Podfile 文件,platform :ios, '13.0'
3、尝试 pod install,得到下面的日志。

Analyzing dependencies
[!] Unable to find a specification for `PLPlayerKit` depended upon by `flutter_qiniucloud_live_plugin`

You have either:
 * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
 * mistyped the name or version.
 * not added the source repo that hosts the Podspec to your Podfile.

4、我知道已经出现错误了,但是还是尝试了 build 得到下面日志。

Launching lib/main.dart on 郭大鹏的iPhone in debug mode...
Warning: Missing build name (CFBundleShortVersionString).
Warning: Missing build number (CFBundleVersion).
Action Required: You must set a build name and number in the pubspec.yaml file version field before submitting to the App Store.
Automatically signing iOS for device deployment using specified development team in Xcode project: BBAXGSNKQ3
Running pod install...                                              1.1s
CocoaPods' output:
↳
      Preparing

    Analyzing dependencies

    Inspecting targets to integrate
      Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)

    Fetching external sources
    -> Fetching podspec for `Flutter` from `Flutter`
    -> Fetching podspec for `flutter_qiniucloud_live_plugin` from `.symlinks/plugins/flutter_qiniucloud_live_plugin/ios`
    -> Fetching podspec for `permission_handler` from `.symlinks/plugins/permission_handler/ios`

    Resolving dependencies of `Podfile`
      CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only perfomed in repo update
    [!] Unable to find a specification for `PLPlayerKit` depended upon by `flutter_qiniucloud_live_plugin`

    You have either:
     * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
     * mistyped the name or version.
     * not added the source repo that hosts the Podspec to your Podfile.

    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:389:in `find_cached_set'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:360:in `specifications_for_dependency'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:165:in `search_for'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:274:in `block in sort_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:267:in `each'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:267:in `sort_by'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:267:in `sort_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/delegates/specification_provider.rb:53:in `block in sort_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/delegates/specification_provider.rb:70:in `with_no_such_dependency_error_handling'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/delegates/specification_provider.rb:52:in `sort_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:754:in `push_state_for_requirements'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:746:in `require_nested_dependencies_for'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:729:in `activate_new_spec'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:686:in `attempt_to_activate'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:254:in `process_topmost_state'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:182:in `resolve'
    /Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolver.rb:43:in `resolve'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/resolver.rb:94:in `resolve'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer/analyzer.rb:1065:in `block in resolve_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/user_interface.rb:64:in `section'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer/analyzer.rb:1063:in `resolve_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer.rb:410:in `analyze'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer.rb:235:in `block in resolve_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/user_interface.rb:64:in `section'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer.rb:234:in `resolve_dependencies'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/installer.rb:156:in `install!'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/command/install.rb:52:in `run'
    /Library/Ruby/Gems/2.6.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/lib/cocoapods/command.rb:52:in `run'
    /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.1/bin/pod:55:in `<top (required)>'
    /usr/local/bin/pod:23:in `load'
    /usr/local/bin/pod:23:in `<main>'

Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
  pod repo update

Exception: Error running pod install

最后,我没能成功在 iOS 和 android 让它正常工作。

非常感谢您的付出,我在一个月前就开始尝试自己实现 flutter 直播插件了,因为不懂原生开发,flutter 也刚学不久,我很期待这个插件。谢谢。

跑不起来~视频界面是空白的

相关日志

Creating a virtual display of size: [1080, 2340] may result in problems(https://github.com/flutter/flutter/issues/2897).It is larger than the device screen size: [1080, 2259].
D/mali_winsys( 8822): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
E/flutter ( 8822): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Only support 16:9/4:3 ratio!, null)
E/flutter ( 8822): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter ( 8822): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
E/flutter ( 8822): <asynchronous suspension>
E/flutter ( 8822): #2      AndroidViewController._create (package:flutter/src/services/platform_views.dart:640:54)
E/flutter ( 8822): #3      AndroidViewController.setSize (package:flutter/src/services/platform_views.dart:557:14)
E/flutter ( 8822): #4      RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:174:29)
E/flutter ( 8822): #5      RenderAndroidView.performResize (package:flutter/src/rendering/platform_view.dart:155:5)
E/flutter ( 8822): #6      RenderObject.layout (package:flutter/src/rendering/object.dart:1703:9)
E/flutter ( 8822): #7      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #8      RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #9      RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
E/flutter ( 8822): #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #11     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:259:13)
E/flutter ( 8822): #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #13     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
E/flutter ( 8822): #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #15     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:163:11)
E/flutter ( 8822): #16     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:477:7)
E/flutter ( 8822): #17     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:232:7)
E/flutter ( 8822): #18     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:391:14)
E/flutter ( 8822): #19     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #21     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #23     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
E/flutter ( 8822): #24     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #25     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #27     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #31     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #32     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #33     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #34     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #36     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #38     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #39     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3166:14)
E/flutter ( 8822): #40     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #41     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
E/flutter ( 8822): #42     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1584:7)
E/flutter ( 8822): #43     PipelineOwner.flushLayout (package:flutter/sr
E/flutter ( 8822): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method 'addRemoteWindow' was called on null.
E/flutter ( 8822): Receiver: null
E/flutter ( 8822): Tried calling: addRemoteWindow(id: 1)
E/flutter ( 8822): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter ( 8822): #1      PushPageState.onPlayerViewCreated (package:flutter_qiniucloud_live_plugin_example/page/push.dart:269:16)
E/flutter ( 8822): #2      QiniucloudConnectPlayerViewState._onPlatformViewCreated (package:flutter_qiniucloud_live_plugin/view/qiniucloud_connected_player_view.dart:44:14)
E/flutter ( 8822): #3      AndroidViewController._create (package:flutter/src/services/platform_views.dart:643:15)
E/flutter ( 8822): <asynchronous suspension>
E/flutter ( 8822): #4      AndroidViewController.setSize (package:flutter/src/services/platform_views.dart:557:14)
E/flutter ( 8822): #5      RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:174:29)
E/flutter ( 8822): #6      RenderAndroidView.performResize (package:flutter/src/rendering/platform_view.dart:155:5)
E/flutter ( 8822): #7      RenderObject.layout (package:flutter/src/rendering/object.dart:1703:9)
E/flutter ( 8822): #8      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #9      RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #10     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:259:13)
E/flutter ( 8822): #11     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #12     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:544:15)
E/flutter ( 8822): #13     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #14     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:259:13)
E/flutter ( 8822): #15     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #16     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
E/flutter ( 8822): #17     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #18     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:163:11)
E/flutter ( 8822): #19     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:477:7)
E/flutter ( 8822): #20     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:232:7)
E/flutter ( 8822): #21     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:391:14)
E/flutter ( 8822): #22     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #23     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #24     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #25     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #26     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
E/flutter ( 8822): #27     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #28     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #29     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #31     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #33     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #38     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #39     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #40     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
E/flutter ( 8822): #41     RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
E/flutter ( 8822): #42     RenderOffstage.p
I/flutter ( 8822): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 8822): The following NoSuchMethodError was thrown during paint():
I/flutter ( 8822): The getter 'width' was called on null.
I/flutter ( 8822): Receiver: null
I/flutter ( 8822): Tried calling: width
I/flutter ( 8822): 
I/flutter ( 8822): The relevant error-causing widget was:
I/flutter ( 8822):   AndroidView
I/flutter ( 8822):   file:///Users/tuobaye/Workspace/android/FlutterQiniucloudLivePlugin/lib/view/qiniucloud_connected_player_view.dart:27:14
I/flutter ( 8822): 
I/flutter ( 8822): When the exception was thrown, this was the stack:
I/flutter ( 8822): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
I/flutter ( 8822): #1      RenderAndroidView.paint (package:flutter/src/rendering/platform_view.dart:192:46)
I/flutter ( 8822): #2      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #3      PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:135:11)
I/flutter ( 8822): #4      PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:95:5)
I/flutter ( 8822): #5      PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:201:7)
I/flutter ( 8822): #6      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:182:7)
I/flutter ( 8822): #7      RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #8      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #9      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #10     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #11     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #12     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #13     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2508:15)
I/flutter ( 8822): #14     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:589:5)
I/flutter ( 8822): #15     RenderStack.paint (package:flutter/src/rendering/stack.dart:597:7)
I/flutter ( 8822): #16     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #17     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #18     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #19     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #20     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #21     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2508:15)
I/flutter ( 8822): #22     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:589:5)
I/flutter ( 8822): #23     RenderStack.paint (package:flutter/src/rendering/stack.dart:597:7)
I/flutter ( 8822): #24     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #25     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #26     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2508:15)
I/flutter ( 8822): #27     RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:396:5)
I/flutter ( 8822): #28     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #29     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #30     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #31     _RenderInkFeatures.paint (package:flutter/src/material/material.dart:530:11)
I/flutter ( 8822): #32     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #33     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #34     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #35     PaintingContext.pushLayer (package:flutter/src/rendering/object.dart:384:12)
I/flutter ( 8822): #36     RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:1755:15)
I/flutter ( 8822): #37     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #38     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #39     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #40     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #41     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #42     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #43     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #44     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:135:11)
I/flutter ( 8822): #45     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:95:5)
I/flutter ( 8822): #46     PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:201:7)
I/flutter ( 8822): #47     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:182:7)
I/flutter ( 8822): #48     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #49     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #50     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #51     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #52     PaintingContext.pushLayer (package:flutter/src/rendering/object.dart:384:12)
I/flutter ( 8822): #53     PaintingContext.pushOpacity (package:flutter/src/rendering/object.dart:569:5)
I/flutter ( 8822): #54     RenderAnimatedOpacity.paint (package:flutter/src/rendering/proxy_box.dart:923:23)
I/flutter ( 8822): #55     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #56     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #57     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #58     RenderFractionalTranslation.paint (package:flutter/src/rendering/proxy_box.dart:2462:13)
I/flutter ( 8822): #59     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #60     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #61     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #62     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #63     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:135:11)
I/flutter ( 8822): #64     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:95:5)
I/flutter ( 8822): #65     PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:201:7)
I/flutter ( 8822): #66     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:182:7)
I/flutter ( 8822): #67     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #68     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #69     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #70     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #71     RenderOffstage.paint (package:flutter/src/rendering/proxy_box.dart:3181:11)
I/flutter ( 8822): #72     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #73     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #74     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2508:15)
I/flutter ( 8822): #75     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:589:5)
I/flutter ( 8822): #76     RenderStack.paint (package:flutter/src/rendering/stack.dart:597:7)
I/flutter ( 8822): #77     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #78     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #79     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #80     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #81     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #82     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #83     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #84     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #85     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #86     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #87     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #88     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #89     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #90     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #91     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #92     RenderCustomPaint.paint (package:flutter/src/rendering/custom_paint.dart:575:11)
I/flutter ( 8822): #93     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #94     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #95     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #96     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #97     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #98     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 8822): #99     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #100    PaintingContext.paintChild (package:flutter/src/rendering/object.dart:184:13)
I/flutter ( 8822): #101    RenderView.paint (package:flutter/src/rendering/view.dart:213:15)
I/flutter ( 8822): #102    RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
I/flutter ( 8822): #103    PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:135:11)
I/flutter ( 8822): #104    PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:95:5)
I/flutter ( 8822): #105    PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:937:29)
I/flutter ( 8822): #106    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:346:19)
I/flutter ( 8822): #107    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:774:13)
I/flutter ( 8822): #108    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:283:5)
I/flutter ( 8822): #109    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1102:15)
I/flutter ( 8822): #110    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1041:9)
I/flutter ( 8822): #111    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:957:5)
I/flutter ( 8822): #115    _invoke (dart:ui/hooks.dart:259:10)
I/flutter ( 8822): #116    _drawFrame (dart:ui/hooks.dart:217:3)
I/flutter ( 8822): (elided 3 frames from package dart:async)
I/flutter ( 8822): 
I/flutter ( 8822): The following RenderObject was being processed when the exception was fired: RenderAndroidView#b1935:
I/flutter ( 8822):   needs compositing
I/flutter ( 8822):   creator: _AndroidPlatformView ← Semantics ← _FocusMarker ← Focus ← AndroidView ←
I/flutter ( 8822):     QiniucloudConnectPlayerView ← ConstrainedBox ← Container ← Positioned ← Stack ← ConstrainedBox ←
I/flutter ( 8822):     Container ← ⋯
I/flutter ( 8822):   parentData: <none> (can use size)
I/flutter ( 8822):   constraints: BoxConstraints(w=100.0, h=100.0)
I/flutter ( 8822):   layer: OffsetLayer#6b0d3 DETACHED
I/flutter ( 8822):   semantic boundary
I/flutter ( 8822):   size: Size(100.0, 100.0)
I/flutter ( 8822): This RenderObject has no descendants.
I/flutter ( 8822): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/AwareBitmapCacher( 8822): init lrucache size: 2097152 pid=8822
════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The following NoSuchMethodError was thrown during paint():
The getter 'width' was called on null.
Receiver: null
Tried calling: width

The relevant error-causing widget was: 
  AndroidView file:///Users/tuobaye/Workspace/android/FlutterQiniucloudLivePlugin/lib/view/qiniucloud_connected_player_view.dart:27:14
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      RenderAndroidView.paint (package:flutter/src/rendering/platform_view.dart:192:46)
#2      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2219:7)
#3      PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:135:11)
#4      PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:95:5)
...
The following RenderObject was being processed when the exception was fired: RenderAndroidView#b1935
...  needs compositing
...  parentData: <none> (can use size)
...  constraints: BoxConstraints(w=100.0, h=100.0)
...  layer: OffsetLayer#6b0d3
...    offset: Offset(260.0, 0.0)
...  semantic boundary
...  size: Size(100.0, 100.0)
RenderObject: RenderAndroidView#b1935
  needs compositing
  parentData: <none> (can use size)
  constraints: BoxConstraints(w=100.0, h=100.0)
  layer: OffsetLayer#6b0d3
    offset: Offset(260.0, 0.0)
  semantic boundary
  size: Size(100.0, 100.0)
════════════════════════════════════════════════════════════════════════════════════════════════════

flutter doctor

[✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Mac OS X 10.14.6 18G84, locale zh-Hans-CN)

兄弟,幸苦了

水一下
我自己也正准备整合腾讯的移动直播SDK,我看你都写了,不知道这个中间可有什么坑

这个七牛的我从官方下下载的安卓demo,开播之后直接卡死.不知道是什么情况,不知道你可遇到过

library "/system/lib/libGLESv3.so" ("/system/lib/libGLESv3.so") Cannot find libGLESv3

运行日志:
D/libMEOW (16393): meow new tls: 0xb40000705a54f2c0
D/libMEOW (16393): applied 1 plugins for [com.rlshijie.rlsj]:
D/libMEOW (16393): plugin 1: [libMEOW_gift.so]: 0xb40000711bed1340
D/libMEOW (16393): rebuild call chain: 0xb40000705a55ef00
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:handleSetSurfaceTexture
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:6
E/linker (16393): library "/system/lib/libGLESv3.so" ("/system/lib/libGLESv3.so") needed or dlopened by "/data/app/~~0xYh6lYHY0Lmg4fMPtQLug==/com.rlshijie.rlsj-tv04vhHKgyPtuiS_fW1noA==/lib/arm64/libpldroid_mmprocessing.so" is not accessible for the namespace: [name="(default)", ld_library_paths="", default_library_paths="/system/lib64:/system_ext/lib64", permitted_paths="/system/lib64/drm:/system/lib64/extractors:/system/lib64/hw:/system_ext/lib64:/system/framework:/system/app:/system/priv-app:/system_ext/framework:/system_ext/app:/system_ext/priv-app:/vendor/framework:/vendor/app:/vendor/priv-app:/system/vendor/framework:/system/vendor/app:/system/vendor/priv-app:/odm/framework:/odm/app:/odm/priv-app:/oem/app:/product/framework:/product/app:/product/priv-app:/data:/mnt/expand:/apex/com.android.runtime/lib64/bionic:/system/lib64/bootstrap"]
D/mmprocessing(16393): Cannot find libGLESv3, fall back to GLES2
D/mmprocessing(16393): ------------set encodeType:0
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:4
D/OplusCameraStatisticsManager(16393): addPreviewInfo, eventMap: {halLevel=1, preview_time=35, face_count=-1, pkgName=com.rlshijie.rlsj, camera_id=1, width=1920, apLevel=1, height=1088}
I/PLDroidMediaStreaming(16393): Pili-Processing:ProcessingManager:mFilterType:VIDEO_FILTER_BEAUTY
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraSurfaceRenderer:onSurfaceChanged 1080x2352
D/SurfaceComposerClient(16393): VRR [FRTC] client handle [bufferId:18446744073709551615 framenumber:0] [ffffffff, ffffffff]
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:2
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:3
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:startPreview
I/BufferQueueProducer(16393): SurfaceTexture-1-16393-3 connect: api=4 producerControlledByApp=true
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:6
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:preview format:17,bitsPerPixel:12
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:addCallbackBuffer size:3133440
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:addCallbackBuffer size:3133440
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:8
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:11
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:[B@d904b28 added
I/mali_config(16393): @get_buffer_dataspace_setting: update dataspace from GE (0x10010000 -> 0x08020000)
E/m.rlshijie.rls(16393): == MALI DEBUG ===eglp_winsys_populate_image_templates ==12288
E/BLASTBufferQueue(16393): SurfaceView[]#3 isEGL=1, mPendingRelease.size()=1, mMaxAcquiredBuffers=4, currentMaxAcquiredBufferCount=2
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:[B@6466041 added
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:9
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:arg1:90
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:handleCameraPreviewReady
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraSurfaceRenderer:setCameraPreviewSize previewSettingWidth:1920,previewSettingHeight:1088
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:6
I/PLDroidMediaStreaming(16393): CompatibleManager:Build.MODEL:PGBM10
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraManager:isSupportedTorch getParameters
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:6
I/PLDroidMediaStreaming(16393): Pili-Streaming:MediaStreamingManager:onStateChanged: TORCH_INFO
I/flutter (16393): 当前状态改变:TORCH_INFO
I/mali_config(16393): @get_buffer_dataspace_setting: update dataspace from GE (0x10010000 -> 0x08020000)
E/m.rlshijie.rls(16393): == MALI DEBUG ===eglp_winsys_populate_image_templates ==12288
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraSurfaceRenderer:cropEnabled: false cropWidth: 0 cropHeight: 0 isFrontCamera: true,previewWidth:1088,previewHeight:1920 rotation: 90 encodingWidth: 1088 encodingHeight: 1920 mIsMirror:false
E/BLASTBufferQueue(16393): SurfaceView[]#3 isEGL=1, mPendingRelease.size()=2, mMaxAcquiredBuffers=4, currentMaxAcquiredBufferCount=2
I/PLDroidMediaStreaming(16393): Pili-Streaming:MediaStreamingManager:doResumeStreaming
I/mali_config(16393): @get_buffer_dataspace_setting: update dataspace from GE (0x10010000 -> 0x08020000)
E/m.rlshijie.rls(16393): == MALI DEBUG ===eglp_winsys_populate_image_templates ==12288
I/flutter (16393): 当前状态改变:READY
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:msg.what:9
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraDevice:arg1:90
I/PLDroidMediaStreaming(16393): Pili-Capture:CameraSurfaceRenderer:setCameraPreviewSize equal!!1920 1088

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.