From 3e7746c4e231b36969b1bee568495841434b6db5 Mon Sep 17 00:00:00 2001 From: jhone <1226468643@qq.com> Date: Wed, 4 Nov 2020 12:18:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Android=20=E5=BD=95=E5=B1=8F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=92=E4=BB=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/build.gradle | 16 +++++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../com/befovy/fijkplayer/FijkPlayer.java | 6 ++- lib/core/fijkplayer.dart | 44 +++++++++++++++++++ 4 files changed, 63 insertions(+), 5 deletions(-) mode change 100644 => 100755 lib/core/fijkplayer.dart diff --git a/android/build.gradle b/android/build.gradle index 00a2de2b..80368b06 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -32,14 +32,24 @@ android { lintOptions { disable 'InvalidPackage' } + sourceSets { + main { + jniLibs.srcDirs = ['libs']//指定lib库目录 + } + } + repositories { + flatDir { + dirs 'libs' + } + } } dependencies { - // implementation(name: 'fijkplayer-full-release', ext: 'aar') - - // fijkplayer-full include the java lib and native shared libs for armv5 armv7 arm64 x86 x86_64 +// implementation fileTree(include:['*.aar'],dir:'libs') +// implementation(name: 'fijkplayer-full-release', ext: 'aar') +// fijkplayer-full include the java lib and native shared libs for armv5 armv7 arm64 x86 x86_64 implementation 'com.befovy.fijkplayer:fijkplayer-full:0.7.6' implementation 'androidx.annotation:annotation:1.1.0' } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 8f779b43..968fff76 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java b/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java index 2e8e9531..34f8a517 100644 --- a/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java +++ b/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java @@ -291,7 +291,11 @@ private void handleEvent(int what, int arg1, int arg2, Object extra) { mEventSink.success(event); break; case ERROR: - mEventSink.error(String.valueOf(arg1), extra.toString(), arg2); + if(extra!=null){ + mEventSink.error(String.valueOf(arg1), extra.toString(), arg2); + }else{ + mEventSink.error(String.valueOf(arg1), "", arg2); + } break; default: // Log.d("FLUTTER", "jonEvent:" + what); diff --git a/lib/core/fijkplayer.dart b/lib/core/fijkplayer.dart old mode 100644 new mode 100755 index f0f5bffb..373acad8 --- a/lib/core/fijkplayer.dart +++ b/lib/core/fijkplayer.dart @@ -113,6 +113,8 @@ class FijkPlayer extends ChangeNotifier implements ValueListenable { final Completer _nativeSetup; Completer _snapShot; + Completer _isStartRecord; + Completer _isStopRecord; FijkPlayer() : _nativeSetup = Completer(), @@ -153,6 +155,24 @@ class FijkPlayer extends ChangeNotifier implements ValueListenable { } _snapShot = null; break; + case "_onStartRecord": + var m = call.arguments; + if(m is Map){ + _isStartRecord.complete(m["result"]); + }else{ + _isStartRecord.completeError(UnsupportedError("startRecord")); + } + _isStartRecord = null; + break; + case "_onStopRecord": + var m = call.arguments; + if(m is Map){ + _isStopRecord.complete(m["result"]); + }else{ + _isStopRecord.completeError(UnsupportedError("stopRecord")); + } + _isStopRecord = null; + break; default: break; } @@ -245,6 +265,30 @@ class FijkPlayer extends ChangeNotifier implements ValueListenable { _channel.invokeMethod("snapshot"); return _snapShot.future; } + /// 视频录制开始方法 + /// fileName :文件名 + Future takeStartRecord(String fileName) async { + await _nativeSetup.future; + FijkLog.i("$this takeStartRecord"); + if(_isStartRecord!=null && !_isStartRecord.isCompleted){ + return Future.error(StateError("last takeStartRecord is not finished")); + } + _isStartRecord = Completer(); + _channel.invokeMethod("startRecord",{'fileName': fileName}); + return _isStartRecord.future; + } + /// 视频录制结束方法 + /// fileName :文件名 + Future takeStopRecord() async { + await _nativeSetup.future; + FijkLog.i("$this takeStopRecord"); + if(_isStopRecord!=null && !_isStopRecord.isCompleted){ + return Future.error(StateError("last takeStopRecord is not finished")); + } + _isStopRecord = Completer(); + _channel.invokeMethod("stopRecord"); + return _isStopRecord.future; + } /// Set data source for this player /// From de0af83407f85bf4bcb5aadccbae0eb4882ea325 Mon Sep 17 00:00:00 2001 From: jhone <1226468643@qq.com> Date: Wed, 4 Nov 2020 12:24:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/libs/.gitkeep | 1 + ios/Classes/FijkPlayer.h | 1 + ios/Classes/FijkPlayer.m | 32 +++++++++++++++++++++++++++++++- ios/Frameworks/.gitkeep | 1 + 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 android/libs/.gitkeep mode change 100644 => 100755 ios/Classes/FijkPlayer.h mode change 100644 => 100755 ios/Classes/FijkPlayer.m create mode 100644 ios/Frameworks/.gitkeep diff --git a/android/libs/.gitkeep b/android/libs/.gitkeep new file mode 100644 index 00000000..8023ad78 --- /dev/null +++ b/android/libs/.gitkeep @@ -0,0 +1 @@ +这里的文件夹下放 fijkplayer-full-release.aar \ No newline at end of file diff --git a/ios/Classes/FijkPlayer.h b/ios/Classes/FijkPlayer.h old mode 100644 new mode 100755 index 23475649..5a353267 --- a/ios/Classes/FijkPlayer.h +++ b/ios/Classes/FijkPlayer.h @@ -22,6 +22,7 @@ #import #import +//#import #import diff --git a/ios/Classes/FijkPlayer.m b/ios/Classes/FijkPlayer.m old mode 100644 new mode 100755 index 4beb48fa..f3a7be3b --- a/ios/Classes/FijkPlayer.m +++ b/ios/Classes/FijkPlayer.m @@ -27,6 +27,7 @@ #import #import +//#import #import #import #import @@ -447,6 +448,25 @@ - (void) takeSnapshot{ } }]; } +-(void)startRecord:(NSString *) fileFullPath { + int state = [_ijkMediaPlayer startRecordVideo:fileFullPath]; +// int state = [_ijkMediaPlayer rtspRecordVideo:rtspUrl filePath:fileFullPath bStop:NO]; + if(state==0){ + NSDictionary *args = @{@"result":@YES}; + [self->_methodChannel invokeMethod:@"_onStartRecord" arguments:args]; + }else{ + [self->_methodChannel invokeMethod:@"_onStartRecord" arguments:@"startRecord error"]; + } +} +-(void) stopRecord{ + int state = [_ijkMediaPlayer stopRecordVideo]; + if(state==0){ + NSDictionary *args = @{@"result":@YES}; + [self->_methodChannel invokeMethod:@"_onStopRecord" arguments:args]; + }else{ + [self->_methodChannel invokeMethod:@"_onStopRecord" arguments:@"stopRecord error"]; + } +} - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { @@ -579,7 +599,17 @@ - (void)handleMethodCall:(FlutterMethodCall *)call } else if ([@"snapshot" isEqualToString:call.method]) { [self takeSnapshot]; result(nil); - } else { + } else if([@"startRecord" isEqualToString:call.method]){ + NSString *fileName = argsMap[@"fileName"]; +// NSString *url = argsMap[@"rtspUrl"]; +// self->filePath = fileName; +// self->rtspUrl=url; + [self startRecord:fileName]; + result(nil); + } else if([@"stopRecord" isEqualToString:call.method]){ + [self stopRecord]; + result(nil); + }else { result(FlutterMethodNotImplemented); } } diff --git a/ios/Frameworks/.gitkeep b/ios/Frameworks/.gitkeep new file mode 100644 index 00000000..6dc806f4 --- /dev/null +++ b/ios/Frameworks/.gitkeep @@ -0,0 +1 @@ +这里的文件夹下放 IJKMediaPlayer.framework \ No newline at end of file