Bladeren bron

add iOS screenshot code

cjl_macbook 6 jaren geleden
bovenliggende
commit
3c638093f8

+ 1 - 1
TODOLIST.md

@@ -36,7 +36,7 @@
     - [ ] iPad 无效,暂不知原因
   - [x] 屏幕旋转: 这个指强制当前屏幕旋转至哪个方向
     - [ ] iPad 无效,暂不知原因
-  - [ ] 截图
+  - [x] 截图
 - [x] 默认控制器 UI
   - [x] 进度条
   - [x] 播放/暂停按钮

+ 0 - 1
android/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java

@@ -510,7 +510,6 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
 
     @Nullable
     public native Bitmap getFrameBitmap();
-    // public native int getFrameBitmap();
 
     @Override
     public String getDataSource() {

+ 4 - 4
example/ios/Podfile.lock

@@ -9,8 +9,8 @@ PODS:
 
 DEPENDENCIES:
   - Flutter (from `.symlinks/flutter/ios`)
-  - flutter_ijkplayer (from `/Users/cai/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec`)
-  - photo_manager (from `/Users/cai/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec`)
+  - flutter_ijkplayer (from `/Users/caijinglong/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec`)
+  - photo_manager (from `/Users/caijinglong/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec`)
 
 SPEC REPOS:
   https://github.com/cocoapods/specs.git:
@@ -20,9 +20,9 @@ EXTERNAL SOURCES:
   Flutter:
     :path: ".symlinks/flutter/ios"
   flutter_ijkplayer:
-    :path: "/Users/cai/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec"
+    :path: "/Users/caijinglong/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec"
   photo_manager:
-    :path: "/Users/cai/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec"
+    :path: "/Users/caijinglong/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec"
 
 SPEC CHECKSUMS:
   Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a

+ 1 - 1
example/lib/i18n/i18n.dart

@@ -6,7 +6,7 @@ abstract class I18n {
   I18n._();
 
   factory I18n(Locale locale) {
-    if (locale.languageCode == "zh") {
+    if (locale?.languageCode == "zh") {
       return _I18nZh();
     } else {
       return _I18nEn();

+ 3 - 0
example/lib/page/screen_shot_page.dart

@@ -49,6 +49,9 @@ class _ScreenShotPageState extends State<ScreenShotPage> {
             child: Text(currentI18n.screenshotTitle),
             onPressed: () async {
               var uint8List = await mediaController.screenShot();
+              if(uint8List == null){
+                return;
+              }
               provider = MemoryImage(uint8List);
               setState(() {});
             },

+ 27 - 0
ios/Classes/CoolFlutterIJK.m

@@ -105,6 +105,9 @@
         float v = [params[@"volume"] floatValue] / 100;
         controller.playbackVolume = v;
         result(@(YES));
+    } else if ([@"screenShot" isEqualToString:call.method]) {
+        NSData *data = [self screenShot];
+        result(data);
     } else {
         result(FlutterMethodNotImplemented);
     }
@@ -296,4 +299,28 @@
     return mDegree;
 }
 
+- (NSData*) screenShot{
+    CVPixelBufferRef ref = [self copyPixelBuffer];
+    if(!ref){
+        return nil;
+    }
+    
+    UIImage *img = [self convertPixeclBufferToUIImage:ref];
+    return UIImageJPEGRepresentation(img, 1.0);
+}
+
+-(UIImage*)convertPixeclBufferToUIImage:(CVPixelBufferRef)pixelBuffer{
+    CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
+    
+    CIContext *temporaryContext = [CIContext contextWithOptions:nil];
+    CGImageRef videoImage = [temporaryContext
+                             createCGImage:ciImage
+                             fromRect:CGRectMake(0, 0, CVPixelBufferGetWidth(pixelBuffer), CVPixelBufferGetHeight(pixelBuffer))];
+    
+    UIImage *uiImage = [UIImage imageWithCGImage:videoImage];
+    CGImageRelease(videoImage);
+    
+    return uiImage;
+}
+
 @end