Procházet zdrojové kódy

Merge branch 'feature/dev_Chris' into develop

Chris před 5 roky
rodič
revize
ca2e221445
100 změnil soubory, kde provedl 1629 přidání a 288 odebrání
  1. 37 1
      RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj
  2. 3 1
      RainbowPlanet/RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h
  3. 0 7
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoCommonFile/Tools/MediaConfig/AliyunMediaConfig.m
  4. 3 3
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoCommonFile/Tools/PathManager/AliyunPathManager.m
  5. 2 2
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/AlivcShortVideoRoute.m
  6. 135 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoPublishManager.h
  7. 320 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoPublishManager.m
  8. 112 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoUploadManager.h
  9. 278 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoUploadManager.m
  10. 31 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunCompositionInfo.h
  11. 13 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunCompositionInfo.m
  12. 0 8
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunEffectMvGroup.h
  13. 0 81
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunEffectMvGroup.m
  14. 41 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunPublishService.h
  15. 134 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunPublishService.m
  16. 66 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunSVideoApi.h
  17. 218 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunSVideoApi.m
  18. 1 20
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/MusicPick/AliyunMusicPickViewController.m
  19. 96 71
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/Controller/AliyunCropViewController.m
  20. 21 21
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropThumbnailView.m
  21. 0 6
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropViewBottomView.h
  22. 9 13
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropViewBottomView.m
  23. 107 54
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoEdit/Controller/AliyunEditViewController.m
  24. 2 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoRecord/Controller/AliyunMagicCameraViewController.m
  25. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_add@2x.png
  26. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_add@3x.png
  27. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_animation@2x.png
  28. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_animation@3x.png
  29. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_color@2x.png
  30. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_color@3x.png
  31. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_font@2x.png
  32. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_font@3x.png
  33. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_keybord@2x.png
  34. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_keybord@3x.png
  35. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_transition_icon@2x.png
  36. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_transition_icon@3x.png
  37. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_triangle@2x.png
  38. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_triangle@3x.png
  39. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_left@2x.png
  40. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_left@3x.png
  41. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_right@2x.png
  42. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_right@3x.png
  43. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover.@2x.png
  44. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover.@3x.png
  45. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover@2x.png
  46. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover@3x.png
  47. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Nor@2x.png
  48. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Nor@3x.png
  49. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Nor.png
  50. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Nor@3x.png
  51. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Sel@2x.png
  52. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Sel@3x.png
  53. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Cover@2x.png
  54. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Cover@3x.png
  55. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Nor@2x.png
  56. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Nor@3x.png
  57. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Cover@2x.png
  58. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Cover@3x.png
  59. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Nor@2x.png
  60. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Nor@3x.png
  61. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Cover@2x.png
  62. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Cover@3x.png
  63. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Nor@2x.png
  64. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Nor@3x.png
  65. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_lineswipe_Nor@2x.png
  66. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_lineswipe_Nor@3x.png
  67. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Cover@2x.png
  68. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Cover@3x.png
  69. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Nor@2x.png
  70. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Nor@3x.png
  71. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Cover@2x.png
  72. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Cover@3x.png
  73. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Nor@2x.png
  74. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Nor@3x.png
  75. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_scale_Nor@2x.png
  76. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_scale_Nor@3x.png
  77. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Cover@2x.png
  78. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Cover@3x.png
  79. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Nor@2x.png
  80. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Nor@3x.png
  81. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Cover@2x.png
  82. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Cover@3x.png
  83. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Nor@2x.png
  84. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Nor@3x.png
  85. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Cover@2x.png
  86. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Cover@3x.png
  87. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Nor@2x.png
  88. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Nor@3x.png
  89. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/yuanhao8.png
  90. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/LB@2x.png
  91. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/LB@3x.png
  92. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_auto@2x.png
  93. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_auto@3x.png
  94. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_close@2x.png
  95. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_close@3x.png
  96. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_dis@2x.png
  97. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_dis@3x.png
  98. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_on@2x.png
  99. binární
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_on@3x.png
  100. 0 0
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_id@2x.png

+ 37 - 1
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -403,6 +403,7 @@
 		BD01B20022BC677900CE9F36 /* PublishVideoRecorderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD01B1FD22BC677900CE9F36 /* PublishVideoRecorderController.swift */; };
 		BD01B20122BC677900CE9F36 /* PublishFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD01B1FE22BC677900CE9F36 /* PublishFilterView.swift */; };
 		BD01B20222BC677900CE9F36 /* PublishVideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD01B1FF22BC677900CE9F36 /* PublishVideoView.swift */; };
+		BD0808EC22C5BA3100D12E6A /* AliyunCompositionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = BD0808EA22C5BA3000D12E6A /* AliyunCompositionInfo.m */; };
 		BD09C84122955B480080D5A4 /* PopTopTriangleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD09C84022955B480080D5A4 /* PopTopTriangleView.swift */; };
 		BD0E678522A4C23B00B980BA /* ShoppingCartOrderPayFreightCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD0E678422A4C23B00B980BA /* ShoppingCartOrderPayFreightCell.swift */; };
 		BD0FAA3722C465B900DDFB37 /* AliyunEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BD0FAA3522C465B900DDFB37 /* AliyunEditViewController.m */; };
@@ -430,6 +431,11 @@
 		BD10CD0822BFC1C20040796E /* PublishMusicItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD10CD0722BFC1C20040796E /* PublishMusicItemCell.swift */; };
 		BD10CD0A22BFC5E40040796E /* PublishMusicHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD10CD0922BFC5E40040796E /* PublishMusicHeader.swift */; };
 		BD10CD0C22BFCC7C0040796E /* PublishMusicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD10CD0B22BFCC7C0040796E /* PublishMusicView.swift */; };
+		BD10FBFE22C6F7D90096A34E /* AliyunPublishService.m in Sources */ = {isa = PBXBuildFile; fileRef = BD10FBFB22C6F7D80096A34E /* AliyunPublishService.m */; };
+		BD10FBFF22C6F7D90096A34E /* AlivcShortVideoPublishManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BD10FBFD22C6F7D90096A34E /* AlivcShortVideoPublishManager.m */; };
+		BD10FC0222C6F9770096A34E /* AlivcShortVideoUploadManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BD10FC0022C6F9770096A34E /* AlivcShortVideoUploadManager.m */; };
+		BD10FC0522C6F9880096A34E /* AliyunSVideoApi.m in Sources */ = {isa = PBXBuildFile; fileRef = BD10FC0322C6F9870096A34E /* AliyunSVideoApi.m */; };
+		BD10FC0822C748DA0096A34E /* AlivcAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BD10FC0622C748D90096A34E /* AlivcAlertView.m */; };
 		BD12203622AF807C0051C7C2 /* MessagePlanetActivityController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD12203522AF807C0051C7C2 /* MessagePlanetActivityController.swift */; };
 		BD12203A22AF80AD0051C7C2 /* MessageActivityTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD12203922AF80AD0051C7C2 /* MessageActivityTableCell.swift */; };
 		BD12203F22AF8E190051C7C2 /* MessagePlanetNotiController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD12203E22AF8E190051C7C2 /* MessagePlanetNotiController.swift */; };
@@ -1058,6 +1064,8 @@
 		BD01B1FD22BC677900CE9F36 /* PublishVideoRecorderController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishVideoRecorderController.swift; sourceTree = "<group>"; };
 		BD01B1FE22BC677900CE9F36 /* PublishFilterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishFilterView.swift; sourceTree = "<group>"; };
 		BD01B1FF22BC677900CE9F36 /* PublishVideoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishVideoView.swift; sourceTree = "<group>"; };
+		BD0808EA22C5BA3000D12E6A /* AliyunCompositionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliyunCompositionInfo.m; sourceTree = "<group>"; };
+		BD0808EB22C5BA3000D12E6A /* AliyunCompositionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunCompositionInfo.h; sourceTree = "<group>"; };
 		BD09C84022955B480080D5A4 /* PopTopTriangleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopTopTriangleView.swift; sourceTree = "<group>"; };
 		BD0E678422A4C23B00B980BA /* ShoppingCartOrderPayFreightCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoppingCartOrderPayFreightCell.swift; sourceTree = "<group>"; };
 		BD0FAA3522C465B900DDFB37 /* AliyunEditViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliyunEditViewController.m; sourceTree = "<group>"; };
@@ -1098,6 +1106,16 @@
 		BD10CD0722BFC1C20040796E /* PublishMusicItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishMusicItemCell.swift; sourceTree = "<group>"; };
 		BD10CD0922BFC5E40040796E /* PublishMusicHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishMusicHeader.swift; sourceTree = "<group>"; };
 		BD10CD0B22BFCC7C0040796E /* PublishMusicView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishMusicView.swift; sourceTree = "<group>"; };
+		BD10FBFA22C6F7D70096A34E /* AlivcShortVideoPublishManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlivcShortVideoPublishManager.h; sourceTree = "<group>"; };
+		BD10FBFB22C6F7D80096A34E /* AliyunPublishService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliyunPublishService.m; sourceTree = "<group>"; };
+		BD10FBFC22C6F7D80096A34E /* AliyunPublishService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunPublishService.h; sourceTree = "<group>"; };
+		BD10FBFD22C6F7D90096A34E /* AlivcShortVideoPublishManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlivcShortVideoPublishManager.m; sourceTree = "<group>"; };
+		BD10FC0022C6F9770096A34E /* AlivcShortVideoUploadManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlivcShortVideoUploadManager.m; sourceTree = "<group>"; };
+		BD10FC0122C6F9770096A34E /* AlivcShortVideoUploadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlivcShortVideoUploadManager.h; sourceTree = "<group>"; };
+		BD10FC0322C6F9870096A34E /* AliyunSVideoApi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliyunSVideoApi.m; sourceTree = "<group>"; };
+		BD10FC0422C6F9870096A34E /* AliyunSVideoApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunSVideoApi.h; sourceTree = "<group>"; };
+		BD10FC0622C748D90096A34E /* AlivcAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlivcAlertView.m; sourceTree = "<group>"; };
+		BD10FC0722C748DA0096A34E /* AlivcAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlivcAlertView.h; sourceTree = "<group>"; };
 		BD12203522AF807C0051C7C2 /* MessagePlanetActivityController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePlanetActivityController.swift; sourceTree = "<group>"; };
 		BD12203922AF80AD0051C7C2 /* MessageActivityTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageActivityTableCell.swift; sourceTree = "<group>"; };
 		BD12203E22AF8E190051C7C2 /* MessagePlanetNotiController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePlanetNotiController.swift; sourceTree = "<group>"; };
@@ -4808,6 +4826,16 @@
 				BD6122A622C3638300D3F513 /* AliyunEffectMvGroup.m */,
 				BD6122AA22C3638300D3F513 /* AliyunEffectMvInfo.h */,
 				BD6122A322C3638300D3F513 /* AliyunEffectMvInfo.m */,
+				BD0808EB22C5BA3000D12E6A /* AliyunCompositionInfo.h */,
+				BD0808EA22C5BA3000D12E6A /* AliyunCompositionInfo.m */,
+				BD10FBFA22C6F7D70096A34E /* AlivcShortVideoPublishManager.h */,
+				BD10FBFD22C6F7D90096A34E /* AlivcShortVideoPublishManager.m */,
+				BD10FBFC22C6F7D80096A34E /* AliyunPublishService.h */,
+				BD10FBFB22C6F7D80096A34E /* AliyunPublishService.m */,
+				BD10FC0122C6F9770096A34E /* AlivcShortVideoUploadManager.h */,
+				BD10FC0022C6F9770096A34E /* AlivcShortVideoUploadManager.m */,
+				BD10FC0422C6F9870096A34E /* AliyunSVideoApi.h */,
+				BD10FC0322C6F9870096A34E /* AliyunSVideoApi.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -5029,8 +5057,8 @@
 			isa = PBXGroup;
 			children = (
 				BD61225022C31EED00D3F513 /* VideoRecord */,
-				BD61224F22C31EE400D3F513 /* VideoEdit */,
 				BD0FAA5722C4C2E400DDFB37 /* VideoCrop */,
+				BD61224F22C31EE400D3F513 /* VideoEdit */,
 				BD0FAA4B22C474A500DDFB37 /* VideoCoverPick */,
 				BD61226222C3592C00D3F513 /* Common */,
 			);
@@ -5128,6 +5156,8 @@
 				BD477F6222C23D66008BE2CB /* AliyunReachability.m */,
 				BD61229D22C3629800D3F513 /* AlivcAppServer.h */,
 				BD61229C22C3629800D3F513 /* AlivcAppServer.m */,
+				BD10FC0722C748DA0096A34E /* AlivcAlertView.h */,
+				BD10FC0622C748D90096A34E /* AlivcAlertView.m */,
 			);
 			path = Config;
 			sourceTree = "<group>";
@@ -5560,6 +5590,7 @@
 				A7284404224DBFBD00F82F30 /* UserModel.swift in Sources */,
 				BD6122D422C364E400D3F513 /* AliyunMusicPickTabView.m in Sources */,
 				A7931E1122AF989B00297D0A /* TopicSelectionViewController.swift in Sources */,
+				BD10FC0822C748DA0096A34E /* AlivcAlertView.m in Sources */,
 				A71D2A602265673A00A55D16 /* RegisterLoginView.swift in Sources */,
 				BD12B6AC22B502C200AEB10B /* KSVideoPlayerBaseView.m in Sources */,
 				BD2FCBE422B244250006D974 /* RecommendDetailContentCell.swift in Sources */,
@@ -5581,6 +5612,7 @@
 				A7FF1579228C82CE00A85748 /* OrderDetailViewController.swift in Sources */,
 				BD61229822C3605C00D3F513 /* AliyunResourceDownloadManager.m in Sources */,
 				A7FF159C228D9E3D00A85748 /* OrderRefundDetailModel.swift in Sources */,
+				BD10FC0522C6F9880096A34E /* AliyunSVideoApi.m in Sources */,
 				A7C3DD1C226422D200FA262E /* SwiftMoyaNetWorkServiceSMS.swift in Sources */,
 				BDF862A2228E41CC000DEF84 /* OrderLogisticsInfoCell.swift in Sources */,
 				A72623D322C1FFD100AEF875 /* CommunityPostMyModel.swift in Sources */,
@@ -5684,6 +5716,7 @@
 				A7D5F21F22BB1FA800F8E9AF /* CommunityPlanetViewController.swift in Sources */,
 				A715333E22980CC60017C861 /* ConfigModel.swift in Sources */,
 				BD6122FA22C36A8100D3F513 /* QUProgressView.m in Sources */,
+				BD10FC0222C6F9770096A34E /* AlivcShortVideoUploadManager.m in Sources */,
 				BDAF83A622B334D90004BCC3 /* SearchContentListCollectionCell.swift in Sources */,
 				A70EBBC022561179000AD74F /* Extension+UITableView.swift in Sources */,
 				A72A72B022321DE000B21995 /* CGView.swift in Sources */,
@@ -5801,6 +5834,7 @@
 				A71738AD228AB7B2000AEA6A /* ProductCommentListModel.swift in Sources */,
 				A7C0FDF822B6671C00BC1E86 /* PopularVideoCollectionViewCell.swift in Sources */,
 				BD6122F922C36A8100D3F513 /* UIView+Progress.m in Sources */,
+				BD10FBFF22C6F7D90096A34E /* AlivcShortVideoPublishManager.m in Sources */,
 				BD61229522C3605C00D3F513 /* AliyunEffectModelTransManager.m in Sources */,
 				A7E19FA822BA2CDF009BCCE1 /* SearchProductListViewController.swift in Sources */,
 				BD4B50AE22BC815F0073B516 /* PublishFilterCollectionCell.swift in Sources */,
@@ -5896,6 +5930,7 @@
 				A7778CBA2244F14B00C7C47A /* Extension+UIViewController.swift in Sources */,
 				BD13B6C322BA034D008BB323 /* PublishEditDescribeCell.swift in Sources */,
 				A7CC752C2271A1AE003C4F38 /* SetPasswordViewController.swift in Sources */,
+				BD10FBFE22C6F7D90096A34E /* AliyunPublishService.m in Sources */,
 				A7C0FDEE22B6516A00BC1E86 /* CommunityBannerTableViewCell.swift in Sources */,
 				A738D202225AD6AD00EEE860 /* Extension+UICollectionView.swift in Sources */,
 				BDAF83AA22B388F20004BCC3 /* RecommendDefaultBackCell.swift in Sources */,
@@ -5976,6 +6011,7 @@
 				BD6122E422C3654500D3F513 /* AliyunTimelineView.m in Sources */,
 				A7D07CCF22B77E0200186014 /* UserPersonalCenterOrderCollectionViewCell.swift in Sources */,
 				BD7AB8452284398A0030646A /* OrderPaySelfPickAddInfoCell.swift in Sources */,
+				BD0808EC22C5BA3100D12E6A /* AliyunCompositionInfo.m in Sources */,
 				A72A72D222321E2700B21995 /* Common.swift in Sources */,
 				A70B2C64228875DE00B2449F /* ShopViewShopInfoTableViewCell.swift in Sources */,
 				BD1FC17F22B08D3C00D55081 /* CommunityMyFollowTopicController.swift in Sources */,

+ 3 - 1
RainbowPlanet/RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h

@@ -71,7 +71,9 @@
 
 #import "AliyunMagicCameraViewController.h"
 #import "AliyunCropViewController.h"
-#import "AliyunCoverPickViewController.h"
+#import "AliyunCompositionInfo.h"
+#import "AVAsset+VideoInfo.h"
+#import "AliyunMediator.h"
 
 
 #endif /* RainbowPlanet_Bridging_Header_h */

+ 0 - 7
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoCommonFile/Tools/MediaConfig/AliyunMediaConfig.m

@@ -91,13 +91,6 @@
         return CGSizeMake(MAX(_outputSize.height, _outputSize.width), MIN(_outputSize.height, _outputSize.width));
     }
     
-    
-//    if (_videoRotate == 90 || _videoRotate == 270) {
-//        return CGSizeMake(MAX(_outputSize.height, _outputSize.width), MIN(_outputSize.height, _outputSize.width));
-//    }else{
-//        return CGSizeMake(MIN(_outputSize.height, _outputSize.width), MAX(_outputSize.height, _outputSize.width));
-//    }
-    //
     return _outputSize;
 }
 

+ 3 - 3
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoCommonFile/Tools/PathManager/AliyunPathManager.m

@@ -13,11 +13,11 @@
 #pragma mark - Public
 
 + (NSString *)aliyunRootPath {
-    return [[self rootPath] stringByAppendingPathComponent:@"com.duanqu.demo"];
+    return [[self rootPath] stringByAppendingPathComponent:@"com.rainbow.project"];
 }
 
 + (NSString *)quCachePath {
-    return [[self cachePath] stringByAppendingPathComponent:@"com.duanqu.demo"];
+    return [[self cachePath] stringByAppendingPathComponent:@"com.rainbow.project"];
 }
 
 + (NSString *)compositionRootDir {
@@ -26,7 +26,7 @@
 
 + (NSString *)quRelativeRootPath {
     
-    return @"Documents/com.duanqu.demo";
+    return @"Documents/com.rainbow.project";
 }
 
 //+ (NSString *)createCompositionDir {

+ 2 - 2
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/AlivcShortVideoRoute.m

@@ -162,8 +162,8 @@ static AlivcShortVideoRoute *_instance = nil;
     
     if (!_mediaConfig) {//默认配置
         _mediaConfig = [AliyunMediaConfig defaultConfig];
-        _mediaConfig.minDuration = 2.0;
-        _mediaConfig.maxDuration = 10.0*60;
+        _mediaConfig.minDuration = 3.0;
+        _mediaConfig.maxDuration = 60;
         _mediaConfig.fps = 25;
         _mediaConfig.gop = 5;
         _mediaConfig.cutMode = AliyunMediaCutModeScaleAspectFill;

+ 135 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoPublishManager.h

@@ -0,0 +1,135 @@
+//
+//  AlivcShortVideoPublishManager.h
+//  AliyunVideoClient_Entrance
+//
+//  Created by Zejian Cai on 2019/1/6.
+//  Copyright © 2019年 Alibaba. All rights reserved.
+//  发布管理器:先内部合成,再上传
+
+#import <Foundation/Foundation.h>
+#import "AliyunPublishService.h"
+
+@class AlivcShortVideoPublishManager;
+@class AliyunMediaConfig;
+@class AliyunUploadSVideoInfo;
+
+typedef NS_ENUM(NSInteger,AlivcPublishStatus){
+    AlivcPublishStatusNoTStart = 0,
+    AlivcPublishStatusSuccess = 1,
+    AlivcPublishStatusPublishing,
+    AlivcPublishStatusFailure,
+    AlivcPublishStatusCancel,
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol AlivcShortVideoPublishManagerDelegate <NSObject>
+
+@required
+/**
+ 发布状态回调
+ 
+ @param manager manager
+ @param newStatus 新的状态
+ */
+- (void)publishManager:(AlivcShortVideoPublishManager *)manager uploadStatusChangedTo:(AlivcPublishStatus )newStatus;
+
+/**
+ 发布进度回调
+ 
+ @param manager manager
+ @param progress 0-1
+ */
+- (void)publishManager:(AlivcShortVideoPublishManager *)manager updateProgress:(CGFloat )progress;
+
+@optional
+
+- (void)publishManager:(AlivcShortVideoPublishManager *)manager succesWithVid:(NSString *)vid coverImageUrl:(NSString *)imageUrl;
+
+@end
+
+@interface AlivcShortVideoPublishManager : NSObject
+
+/**
+ 单例 - 主要为了使用方便和模块间的低耦合
+ 
+ @return 实例
+ */
++ (instancetype)shared;
+
+/**
+ 本次合成与上传发生事情的回调代理
+ */
+@property (nonatomic, weak) id<AlivcShortVideoPublishManagerDelegate> managerDelegate;
+
+
+/**
+ 要发布的视频信息
+ */
+@property (nonatomic, copy, readonly) AliyunUploadSVideoInfo *videoInfo;
+
+
+
+/**
+ 存储相册资源
+
+ @param asset 相册资源
+ */
+- (void)saveResources:(id )asset;
+
+/**
+ 设置合成信息
+ 
+ @param taskPath 视频的地址
+ @param mediaConfig 配置信息
+ */
+- (void)setVideoPath:(NSString *)taskPath videoConfig:(AliyunMediaConfig *)mediaConfig;
+
+
+/**
+ 设置上传信息
+ 
+ @param image 封面
+ @param videoInfo 视频信息
+ */
+- (void)setCoverImag:(UIImage *)image videoInfo:(AliyunUploadSVideoInfo *)videoInfo;
+
+/**
+ 设置上传凭证信息 - sts方式
+
+ @param keyId key
+ @param keySecret secret
+ @param token token
+ */
+//- (void)setUploadInfoWithKey:(NSString *)keyId secres:(NSString *)keySecret token:(NSString *)token;
+
+/**
+ 开始发布
+ @param saveToAlbum 完成的时候是否保存至相册
+ @return 成功或者失败
+ */
+- (BOOL)startPublishWithSaveToAlbum:(BOOL)saveToAlbum;
+
+/**
+ 取消发布
+ */
+- (void)cancelPublish;
+
+/**
+ 重新发布 - 用于发布过程中退后台再进来等操作
+ */
+- (BOOL)restartPublishFromPreCurrentStatus;
+
+/**
+ 结束整个发布流程, 用于发布成功或者异常,由外部调用。与startPublish对应,取消发布内部自己会调用这个方法
+ */
+- (void)endPublishFlow;
+
+- (UIImage *)coverImage;
+
+- (AlivcPublishStatus )currentStatus;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 320 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoPublishManager.m

@@ -0,0 +1,320 @@
+//
+//  AlivcShortVideoPublishManager.m
+//  AliyunVideoClient_Entrance
+//
+//  Created by Zejian Cai on 2019/1/6.
+//  Copyright © 2019年 Alibaba. All rights reserved.
+//
+
+#import "AlivcShortVideoPublishManager.h"
+#import <AssetsLibrary/AssetsLibrary.h>
+
+#import "AlivcShortVideoUploadManager.h"
+#import "AliyunMediaConfig.h"
+
+
+@interface AlivcShortVideoPublishManager () <
+AliyunIExporterCallback, AlivcShortVideoUploadManagerDelegate>
+
+//合成相关属性记录
+@property(strong, nonatomic) NSString *taskPath;
+//视频配置信息
+@property(strong, nonatomic) AliyunMediaConfig *mediaConfig;
+//合成完成之后是否保存至相册
+@property(assign, nonatomic) BOOL saveToAlbum;
+
+//在相册选择里导入的资源,这里要存储下,避免被销毁导致合成失败
+@property(strong, nonatomic) NSArray *assets;
+
+//封面图
+@property(nonatomic, copy) UIImage *coverImage;
+//发布状态记录
+@property(nonatomic, assign) AlivcPublishStatus newStatus;
+//上传sts相关属性l记录
+//@property(strong, nonatomic) NSString *key;
+//@property(strong, nonatomic) NSString *secret;
+//@property(strong, nonatomic) NSString *token;
+
+/**
+ 先合成-再上传,YES:当前出于上传步骤 NO:当前出于合成步骤
+ */
+@property(assign, nonatomic) BOOL isProcessToUpload;
+
+@end
+
+static AlivcShortVideoPublishManager *_instance = nil;
+static CGFloat exportRatio = 0.7; //合成暂用的时间比例
+
+@implementation AlivcShortVideoPublishManager
+#pragma mark - 单例
+
++ (instancetype)shared {
+    if (_instance == nil) {
+        
+        _instance = [[AlivcShortVideoPublishManager alloc] init];
+    }
+    
+    return _instance;
+}
+
++ (instancetype)allocWithZone:(struct _NSZone *)zone {
+    
+    if (_instance == nil) {
+        
+        _instance = [super allocWithZone:zone];
+    }
+    
+    return _instance;
+}
+
+- (id)copy {
+    
+    return self;
+}
+
+- (id)mutableCopy {
+    
+    return self;
+}
+
+- (id)copyWithZone:(NSZone *)zone {
+    
+    return self;
+}
+
+- (id)mutableCopyWithZone:(NSZone *)zone {
+    
+    return self;
+}
+
+#pragma mark - Publish Method
+- (void)setVideoPath:(NSString *)taskPath videoConfig:(AliyunMediaConfig *)mediaConfig {
+    _taskPath = taskPath;
+    _mediaConfig = mediaConfig;
+}
+
+- (void)setCoverImag:(UIImage *)image
+           videoInfo:(AliyunUploadSVideoInfo *)videoInfo {
+    _coverImage = image;
+    _videoInfo = videoInfo;
+}
+
+//- (void)setUploadInfoWithKey:(NSString *)keyId secres:(NSString *)keySecret token:(NSString *)token{
+//    _key = keyId;
+//    _secret = keySecret;
+//    _token = token;
+//}
+
+- (BOOL)startPublishWithSaveToAlbum:(BOOL)saveToAlbum {
+    _isProcessToUpload = NO;
+    if (_taskPath && _mediaConfig.outputPath) {
+        _saveToAlbum = saveToAlbum;
+        [AliyunPublishService service].exportCallback = self;
+        BOOL isSuccess = [[AliyunPublishService service]exportWithTaskPath:_taskPath outputPath:_mediaConfig.outputPath];
+        return isSuccess;
+    }else{
+        return NO;
+    }
+}
+
+- (void)cancelPublish {
+    [[AliyunPublishService service] cancelExport];
+    [[AliyunPublishService service] cancelUpload];
+    //由外界调用的话把状态至为fail,不至为cancel,cancel是退后台,SDK自动cancel了才是cancel状态
+    _newStatus = AlivcPublishStatusFailure;
+    [self endPublishFlow];
+}
+
+- (void)saveResources:(id)asset{
+    if ([asset isKindOfClass:[NSArray class]]) {
+        self.assets = asset;
+    }
+}
+
+- (void)endPublishFlow{
+    [self p_clearData];
+}
+
+- (void)p_clearData{
+    _taskPath = nil;
+    _mediaConfig = nil;
+//    _key = nil;
+//    _secret = nil;
+//    _token = nil;
+    _coverImage = nil;
+    _assets = nil;
+    _newStatus = AlivcPublishStatusNoTStart;
+}
+
+- (BOOL)restartPublishFromPreCurrentStatus{
+    if (_isProcessToUpload) {
+        return [self startUpload];
+    }else{
+        // - 短视频3.8.0版本及之后后台SDK会自动合成,所以这里注释掉
+//        return [self startPublishWithSaveToAlbum:_saveToAlbum];
+       
+    }
+    return YES;
+}
+
+- (UIImage *)coverImage {
+    return _coverImage;
+}
+
+- (AlivcPublishStatus)currentStatus {
+    return _newStatus;
+}
+
+
+
+#pragma mark - AliyunIExporterCallback
+- (void)exportProgress:(float)progress {
+    CGFloat allProgress = progress * exportRatio;
+    if (_managerDelegate && [_managerDelegate respondsToSelector:@selector
+                             (publishManager:updateProgress:)]) {
+        [_managerDelegate publishManager:self updateProgress:allProgress];
+    }
+}
+
+- (void)exporterDidCancel {
+    _newStatus = AlivcPublishStatusCancel;
+    if (_managerDelegate &&
+        [_managerDelegate respondsToSelector:@selector(publishManager:
+                                                       uploadStatusChangedTo:)]) {
+        [_managerDelegate publishManager:self
+                   uploadStatusChangedTo:AlivcPublishStatusCancel];
+    }
+}
+
+- (void)exporterDidStart {
+    _newStatus = AlivcPublishStatusPublishing;
+    if (_managerDelegate &&
+        [_managerDelegate respondsToSelector:@selector(publishManager:
+                                                       uploadStatusChangedTo:)]) {
+        [_managerDelegate publishManager:self
+                   uploadStatusChangedTo:AlivcPublishStatusPublishing];
+    }
+}
+
+- (void)exportError:(int)errorCode {
+    _newStatus = AlivcPublishStatusFailure;
+    if (_managerDelegate &&
+        [_managerDelegate respondsToSelector:@selector(publishManager:
+                                                       uploadStatusChangedTo:)]) {
+        [_managerDelegate publishManager:self
+                   uploadStatusChangedTo:AlivcPublishStatusFailure];
+    }
+}
+
+- (void)exporterDidEnd:(NSString *)outputPath {
+    if (_saveToAlbum) {
+        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
+        [library writeVideoAtPathToSavedPhotosAlbum:[NSURL
+                                                     fileURLWithPath:_mediaConfig
+                                                     .outputPath]
+                                    completionBlock:^(NSURL *assetURL, NSError *error) {
+                                        NSLog(@"视频已保存到相册");
+                                    }];
+    }
+    [self startUpload];
+    
+}
+
+- (BOOL)startUpload{
+    BOOL startUploadSuccess = NO;
+    _isProcessToUpload = YES;
+    //进度到exportRatio,然后开始上传
+    if (_managerDelegate && [_managerDelegate respondsToSelector:@selector
+                             (publishManager:updateProgress:)]) {
+        [_managerDelegate publishManager:self updateProgress:exportRatio];
+    }
+    
+    UIImage *coverImage = nil;
+    if (_coverImage) {
+        coverImage = _coverImage;
+    } else {
+        //取第一帧 - 外界确认一定有值,这里没法取第一帧
+    }
+    
+    AliyunUploadSVideoInfo *vInfo = nil;
+    if (_videoInfo) {
+        vInfo = _videoInfo;
+        if ([vInfo.title isEqualToString:@""] || !vInfo.title) {
+            vInfo.title = @"Default Title";
+        }
+    } else {
+        //生成必要的默认值
+        vInfo = [[AliyunUploadSVideoInfo alloc]init];
+        vInfo.title = @"Default Title";
+    }
+    
+    NSString *coverPath = [_taskPath stringByAppendingPathComponent:@"cover.png"];
+    if (!coverImage) {
+        return NO;
+    }
+    NSData *data = UIImagePNGRepresentation(coverImage);
+    [data writeToFile:coverPath atomically:YES];
+    [[AlivcShortVideoUploadManager shared] setManagerDelegate:self];
+    [[AlivcShortVideoUploadManager shared] setCoverImagePath:coverPath
+                                                   videoInfo:vInfo videoPath:self.mediaConfig.outputPath];
+    [[AlivcShortVideoUploadManager shared]startUpload];
+    return YES;
+}
+
+#pragma mark - AlivcShortVideoUploadManagerDelegate
+
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager
+       updateProgress:(CGFloat)progress {
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+        CGFloat allProgress = progress * (1 - exportRatio) + exportRatio;
+        if (_managerDelegate &&
+            [_managerDelegate respondsToSelector:@selector(publishManager:
+                                                           updateProgress:)]) {
+            [_managerDelegate publishManager:self updateProgress:allProgress];
+        }
+    });
+}
+
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager
+uploadStatusChangedTo:(AlivcUploadStatus)newStatus {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        switch (newStatus) {
+            case AlivcUploadStatusCancel:
+                _newStatus = AlivcPublishStatusCancel;
+                break;
+            case AlivcUploadStatusFailure:
+                _newStatus = AlivcPublishStatusFailure;
+                break;
+            case AlivcUploadStatusSuccess:
+                _newStatus = AlivcPublishStatusSuccess;
+                break;
+            case AlivcUploadStatusUploading:
+                _newStatus = AlivcPublishStatusPublishing;
+                break;
+                
+            default:
+                break;
+        }
+        
+        if (_managerDelegate &&
+            [_managerDelegate respondsToSelector:@selector(publishManager:
+                                                           uploadStatusChangedTo:)]) {
+            [_managerDelegate publishManager:self uploadStatusChangedTo:_newStatus];
+        }
+    });
+}
+
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager succesWithVid:(NSString *)vid coverImageUrl:(NSString *)imageUrl{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        
+        if (_managerDelegate && [_managerDelegate respondsToSelector:@selector(publishManager:succesWithVid:coverImageUrl:)]) {
+            [_managerDelegate publishManager:self succesWithVid:vid coverImageUrl:imageUrl];
+        }
+        
+        
+    });
+}
+
+
+@end

+ 112 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoUploadManager.h

@@ -0,0 +1,112 @@
+//
+//  AlivcShortVideoUploadManager.h
+//  AliyunVideoClient_Entrance
+//
+//  Created by Zejian Cai on 2018/11/9.
+//  Copyright © 2018年 Alibaba. All rights reserved.
+//  上传管理器
+
+#import <Foundation/Foundation.h>
+#import <AliyunVideoSDKPro/AliyunPublishManager.h>
+
+@class AliyunUploadSVideoInfo;
+@class AlivcShortVideoUploadManager;
+
+typedef NS_ENUM(NSInteger,AlivcUploadStatus){
+    AlivcUploadStatusSuccess = 0,
+    AlivcUploadStatusUploading,
+    AlivcUploadStatusFailure,
+    AlivcUploadStatusCancel,
+};
+
+@protocol AlivcShortVideoUploadManagerDelegate <NSObject>
+
+@required
+/**
+ 上传状态回调
+
+ @param manager manager
+ @param newStatus 新的状态
+ */
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager uploadStatusChangedTo:(AlivcUploadStatus )newStatus;
+
+/**
+ 上传进度回调
+
+ @param manager manager
+ @param progress 0-1
+ */
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager updateProgress:(CGFloat )progress;
+
+@optional
+
+/**
+ 上传完成回调
+
+ @param manager manager
+ @param vid 视频id
+ @param imageUrl 封面url
+ */
+- (void)uploadManager:(AlivcShortVideoUploadManager *)manager succesWithVid:(NSString *)vid coverImageUrl:(NSString *)imageUrl;
+
+@end
+
+@interface AlivcShortVideoUploadManager : NSObject
+
+/**
+ 单例 - 主要为了使用方便和模块间的低耦合
+
+ @return 实例
+ */
++ (instancetype)shared;
+
+/**
+ 本次上传发生事情的回调代理
+ */
+@property (nonatomic, weak) id<AlivcShortVideoUploadManagerDelegate> managerDelegate;
+
+/**
+ 设置上传信息
+ 
+ @param imagePath 图片地址
+ @param videoInfo 视频信息
+ @param videoPath 视频路径
+ */
+- (void)setCoverImagePath:(NSString *)imagePath videoInfo:(AliyunUploadSVideoInfo *)videoInfo videoPath:(NSString *)videoPath;
+
+/**
+ 开始上传
+ */
+- (void)startUpload;
+
+/**
+ 上传 - 自带sts
+
+ @param keyId keyId
+ @param keySecret keySecret
+ @param token token
+ @return 成功或者失败
+ */
+//- (BOOL)startUploadWithKey:(NSString *)keyId secres:(NSString *)keySecret token:(NSString *)token;
+
+/**
+ 取消上传
+ */
+- (void)cancelUpload;
+
+- (AlivcUploadStatus)currentStatus;
+
+- (NSString *)coverImagePath;
+
+
+
+
+
+
+
+
+
+
+
+
+@end

+ 278 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AlivcShortVideoUploadManager.m

@@ -0,0 +1,278 @@
+//
+//  AlivcShortVideoUploadManager.m
+//  AliyunVideoClient_Entrance
+//
+//  Created by Zejian Cai on 2018/11/9.
+//  Copyright © 2018年 Alibaba. All rights reserved.
+//
+
+#import "AlivcShortVideoUploadManager.h"
+#import "AliyunMediaConfig.h"
+#import "AliyunPublishService.h"
+#import "AliyunSVideoApi.h"
+//#import "AliVideoClientUser.h"
+#import <sys/utsname.h>
+
+@interface AlivcShortVideoUploadManager () <AliyunIVodUploadCallback>
+
+@property(nonatomic, copy) NSString *coverImagePath; //封面图路径
+@property(nonatomic, copy) NSString *videoPath;  //视频所在路径
+@property(nonatomic, copy) AliyunUploadSVideoInfo *videoInfo; //视频信息
+@property(nonatomic, assign) AlivcUploadStatus newStatus; //上传状态
+
+@property(nonatomic, copy) NSString *coverImageUrl;  //封面图的URL
+@property(nonatomic, copy) NSString *videoId; //视频上传成功之后得到视频id
+
+@end
+
+static AlivcShortVideoUploadManager *_instance = nil;
+static AliyunVodPublishManager *_uploadManager = nil;
+
+@implementation AlivcShortVideoUploadManager
+
+#pragma mark - 单例
+
++ (instancetype)shared {
+    if (_instance == nil) {
+        
+        _instance = [[AlivcShortVideoUploadManager alloc]init];
+        _uploadManager = [[AliyunVodPublishManager alloc]init];
+    }
+    
+    return _instance;
+}
+
++ (instancetype)allocWithZone:(struct _NSZone *)zone {
+    
+    if (_instance == nil) {
+        
+        _instance = [super allocWithZone:zone];
+    }
+    
+    return _instance;
+}
+
+- (id)copy {
+    
+    return self;
+}
+
+- (id)mutableCopy {
+    
+    return self;
+}
+
+- (id)copyWithZone:(NSZone *)zone {
+    
+    return self;
+}
+
+- (id)mutableCopyWithZone:(NSZone *)zone {
+    
+    return self;
+}
+
+#pragma mark - 上传
+
+- (void)setCoverImagePath:(NSString *)imagePath videoInfo:(AliyunUploadSVideoInfo *)videoInfo videoPath:(NSString *)videoPath{
+    _coverImagePath = imagePath;
+    _videoInfo = videoInfo;
+    _videoPath = videoPath;
+}
+
+- (BOOL)haveUploadSource {
+    if (_coverImagePath && _videoInfo) {
+        return YES;
+    }
+    return NO;
+}
+
+/**
+ 开始上传
+
+ */
+- (void)startUpload {
+
+    if (![self haveUploadSource]) {
+        [self handleUploadFailed];
+        return;
+    }
+    
+    _uploadManager.uploadCallback = self;
+    if (self.coverImageUrl) {
+        //上传视频
+        [self startUploadVideo];
+    }else{
+        //上传图片
+        [self startUploadImage];
+    }
+    _newStatus = AlivcUploadStatusUploading;
+    if (_managerDelegate &&
+        [_managerDelegate respondsToSelector:@selector(uploadManager:
+                                                       uploadStatusChangedTo:)]) {
+        [_managerDelegate uploadManager:self
+                  uploadStatusChangedTo:AlivcUploadStatusUploading];
+    }
+
+}
+
+/**
+ 对于上传失败的处理 - 代理回调
+ */
+- (void)handleUploadFailed{
+    _newStatus = AlivcUploadStatusFailure;
+    if (_managerDelegate && [_managerDelegate respondsToSelector:@selector(uploadManager:uploadStatusChangedTo:)]) {
+        [_managerDelegate uploadManager:self uploadStatusChangedTo:AlivcUploadStatusFailure];
+    }
+}
+
+- (void)cancelUpload {
+    _newStatus = AlivcUploadStatusCancel;
+    [_uploadManager cancelUpload];
+    if (_managerDelegate && [_managerDelegate respondsToSelector:@selector(uploadManager:uploadStatusChangedTo:)]) {
+        [_managerDelegate uploadManager:self uploadStatusChangedTo:AlivcUploadStatusCancel];
+    }
+}
+
+- (AlivcUploadStatus)currentStatus {
+    return _newStatus;
+}
+- (NSString *)coverImagePath {
+    return _coverImagePath;
+}
+
+
+
+#pragma mark - Private Method
+/**
+ 上传封面图
+ */
+- (void)startUploadImage{
+//    [AliyunSVideoApi getImageUploadAuthWithToken:[AliVideoClientUser shared].token title:@"DefaultTitle" filePath:self.coverImagePath tags:@"DefaultTags" handler:^(NSString * _Nullable uploadAddress, NSString * _Nullable uploadAuth, NSString * _Nullable imageURL, NSString * _Nullable imageId, NSError * _Nullable error) {
+//        if (error) {
+//            NSLog(@"error获取封面凭证:%@", error.description);
+//            [self handleUploadFailed];
+//            return;
+//        }
+//        self.coverImageUrl = imageURL;
+//        [_uploadManager uploadImageWithPath:self.coverImagePath uploadAddress:uploadAddress uploadAuth:uploadAuth];
+//    }];
+}
+
+/**
+ 上传视频
+ */
+- (void)startUploadVideo{
+//    [AliyunSVideoApi getVideoUploadAuthWithWithToken:[AliVideoClientUser shared].token title:_videoInfo.title filePath:self.videoPath coverURL:self.coverImageUrl desc:_videoInfo.desc tags:_videoInfo.tags handler:^(NSString * _Nullable uploadAddress, NSString * _Nullable uploadAuth, NSString * _Nullable videoId, NSError * _Nullable error) {
+//        if (error) {
+//            NSLog(@"error:获取视频凭证%@", error.description);
+//            [self handleUploadFailed];
+//            return;
+//        }
+//        self.videoId = videoId;
+//        [_uploadManager uploadVideoWithPath:self.videoPath uploadAddress:uploadAddress uploadAuth:uploadAuth];
+//    }];
+}
+
+
+- (void)refreshVideo{
+//    [AliyunSVideoApi refreshVideoUploadAuthWithToken:[AliVideoClientUser shared].token videoId:self.videoId handler:^(NSString * _Nullable uploadAddress, NSString * _Nullable uploadAuth, NSError * _Nullable error) {
+//        if (error) {
+//            NSLog(@"error:%@", error.description);
+//            [self handleUploadFailed];
+//            return;
+//        }
+//        [_uploadManager refreshWithUploadAuth:uploadAuth];
+//    }];
+}
+
+
+
+- (NSString *)getDeviceId {
+    return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
+}
+
+- (NSString *)getDeviceModel {
+    struct utsname systemInfo;
+    uname(&systemInfo);
+    NSString *deviceString = [NSString stringWithCString:systemInfo.machine
+                                                encoding:NSUTF8StringEncoding];
+    return deviceString;
+}
+
+
+#pragma mark - AliyunIVodUploadCallback
+
+- (void)publishManagerUploadSuccess:(AliyunVodPublishManager *)manager {
+    NSLog(@"upload success");
+    if (manager.uploadState == AliyunVodUploadImage) {
+        [self startUploadVideo];
+    }else {
+        NSLog(@"upload success vid:%@, imageurl:%@", self.videoId, self.coverImageUrl);
+        _newStatus = AlivcUploadStatusSuccess;
+        if (_managerDelegate &&
+            [_managerDelegate respondsToSelector:@selector(uploadManager:
+                                                           uploadStatusChangedTo:)]) {
+            [_managerDelegate uploadManager:self
+                      uploadStatusChangedTo:AlivcUploadStatusSuccess];
+        }
+        if (_managerDelegate && [_managerDelegate respondsToSelector:@selector(uploadManager:succesWithVid:coverImageUrl:)]) {
+            [_managerDelegate uploadManager:self succesWithVid:self.videoId coverImageUrl:self.coverImageUrl];
+        }
+        _videoInfo = nil;
+        _coverImagePath = nil;
+        _managerDelegate = nil;
+        _coverImageUrl = nil;
+    }
+}
+
+- (void)publishManager:(AliyunVodPublishManager *)manager uploadFailedWithCode:(NSString *)code message:(NSString *)message {
+    NSLog(@"upload failed code:%@, message:%@", code, message);
+    dispatch_async(dispatch_get_main_queue(), ^{
+        _newStatus = AlivcUploadStatusFailure;
+        if (_managerDelegate &&
+            [_managerDelegate respondsToSelector:@selector(uploadManager:
+                                                           uploadStatusChangedTo:)]) {
+            [_managerDelegate uploadManager:self
+                      uploadStatusChangedTo:AlivcUploadStatusFailure];
+        }
+    });
+}
+
+- (void)publishManager:(AliyunVodPublishManager *)manager uploadProgressWithUploadedSize:(long long)uploadedSize totalSize:(long long)totalSize {
+    if (manager.uploadState == AliyunVodUploadVideo) {
+        if (totalSize) {
+            _newStatus = AlivcUploadStatusUploading;
+            if (_managerDelegate &&
+                [_managerDelegate respondsToSelector:@selector(uploadManager:
+                                                               updateProgress:)]) {
+                CGFloat progressValue = uploadedSize / (double)totalSize;
+                [_managerDelegate uploadManager:self updateProgress:progressValue];
+            }
+        }
+    }
+}
+
+- (void)publishManagerUploadTokenExpired:(AliyunVodPublishManager *)manager {
+    if (manager.uploadState == AliyunVodUploadImage) {
+        [self startUploadImage];
+    } else {
+        if (self.videoId) {
+            [self refreshVideo];
+        }else{
+            [self startUploadVideo];
+        }
+        
+    }
+}
+
+- (void)publishManagerUploadRetry:(AliyunVodPublishManager *)manager {
+    NSLog(@"上传重试");
+}
+
+- (void)publishManagerUploadRetryResume:(AliyunVodPublishManager *)manager {
+    NSLog(@"上传继续重试");
+}
+
+
+@end

+ 31 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunCompositionInfo.h

@@ -0,0 +1,31 @@
+//
+//  AliyunCompositionInfo.h
+//  AliyunVideo
+//
+//  Created by Worthy on 2017/3/11.
+//  Copyright (C) 2010-2017 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <AVFoundation/AVFoundation.h>
+#import <UIKit/UIKit.h>
+#import <Photos/PHAsset.h>
+
+typedef enum : NSUInteger {
+    AliyunCompositionInfoTypeVideo,
+    AliyunCompositionInfoTypePhoto,
+    AliyunCompositionInfoTypeGif
+} AliyunCompositionInfoType;
+
+@interface AliyunCompositionInfo : NSObject
+@property (nonatomic, assign) CGFloat duration;
+@property (nonatomic, assign) CGFloat startTime;
+@property (nonatomic, strong) AVURLAsset *asset;
+@property (nonatomic, copy) NSString *sourcePath;
+@property (nonatomic, strong) UIImage *thumbnailImage;
+@property (nonatomic, strong) PHAsset *phAsset;
+@property (nonatomic, strong) UIImage *phImage;
+@property (nonatomic, assign) AliyunCompositionInfoType type;
+@property (nonatomic, assign) BOOL isFromCrop;
+
+@end

+ 13 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunCompositionInfo.m

@@ -0,0 +1,13 @@
+//
+//  AliyunCompositionInfo.m
+//  AliyunVideo
+//
+//  Created by Worthy on 2017/3/11.
+//  Copyright (C) 2010-2017 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import "AliyunCompositionInfo.h"
+
+@implementation AliyunCompositionInfo
+
+@end

+ 0 - 8
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunEffectMvGroup.h

@@ -37,12 +37,4 @@ typedef NS_ENUM(NSInteger, AliyunEffectMVRatio) {
  */
 @property (nonatomic, copy) NSArray <AliyunEffectMvInfo *> *mvList;
 
-/**
- 根据MV比例获取MV资源本地路径
-
- @param r MV比例
- @return MV资源本地路径
- */
-- (NSString *)localResoucePathWithVideoRatio:(AliyunEffectMVRatio)r;
-
 @end

+ 0 - 81
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunEffectMvGroup.m

@@ -10,85 +10,4 @@
 
 @implementation AliyunEffectMvGroup
 
-
-- (NSString *)localResoucePathWithVideoRatio:(AliyunEffectMVRatio)r {
-    
-    if (!self.resourcePath) return nil;
-    
-    NSString *rootPath = [self localMVSourcePath];
-    NSString *folderName = nil;
-    NSArray *subPaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:rootPath error:nil];
-    if (subPaths.count) {
-        BOOL hasFolder = NO;
-        for (NSString *subPath in subPaths) {
-            if ([subPath hasPrefix:@"folder"]) {
-                hasFolder = YES;
-                folderName = subPath;
-                break;
-            }
-        }
-        if (!hasFolder) {
-            return rootPath;
-        }
-    }
-    
-    NSString *folder = folderName;
-    NSLog(@"%@",folder);
-    float videoAspect;
-    switch (r) {
-        case AliyunEffectMVRatio1To1:
-            folder = @"folder1.1";
-            videoAspect = 1 / 1.0;
-            break;
-        case AliyunEffectMVRatio16To9:
-            folder = @"folder16.9";
-            videoAspect = 16 / 9.0;
-            break;
-        case AliyunEffectMVRatio9To16:
-            folder = @"folder9.16";
-            videoAspect = 9 / 16.0;
-            break;
-        case AliyunEffectMVRatio4To3:
-            folder = @"folder4.3";
-            videoAspect = 4 / 3.0;
-            break;
-        case AliyunEffectMVRatio3To4:
-            folder = @"folder1.1";
-            videoAspect = 3 / 4.0;
-            break;
-        default:
-            break;
-    }
-    if (folder) {
-        NSString *path = [rootPath stringByAppendingPathComponent:folder];
-        BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
-        if (exists) {
-            return path;
-        } else {
-            // 不存在时  取分辨率最近值的mv
-            NSDictionary *dic = @{@(fabs(videoAspect - (9/16.0))):@"folder9.16",
-                                  @(fabs(videoAspect - (3/4.0))):@"folder3.4",
-                                  @(fabs(videoAspect - (1.0))):@"folder1.1",
-                                  @(fabs(videoAspect - (4/3.0))):@"folder4.3",
-                                  @(fabs(videoAspect - (16/9.0))):@"folder16.9"};
-            NSArray *keySort = [[dic allKeys] sortedArrayUsingSelector:@selector(compare:)];
-            
-            for (int index = 0; index < keySort.count; index ++) {
-                NSNumber *currentMinKey = keySort[index];
-                NSString *currentPath = [rootPath stringByAppendingPathComponent:[dic objectForKey:currentMinKey]];
-                if ([[NSFileManager defaultManager] fileExistsAtPath:currentPath]){
-                    NSLog(@"mvPath:%@", currentPath);
-                    return currentPath;
-                }
-            }
-
-        }
-    }
-    return rootPath;
-}
-
-- (NSString *)localMVSourcePath {
-    return [NSHomeDirectory() stringByAppendingPathComponent:self.resourcePath];
-}
-
 @end

+ 41 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunPublishService.h

@@ -0,0 +1,41 @@
+//
+//  AliyunPublishService.h
+//  qusdk
+//
+//  Created by Worthy on 2017/10/30.
+//  Copyright © 2017年 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <AliyunVideoSDKPro/AliyunPublishManager.h>
+
+@interface AliyunPublishService : NSObject
+
+@property (nonatomic, weak) id<AliyunIExporterCallback> exportCallback;
+@property (nonatomic, weak) id<AliyunIUploadCallback> uploadCallback;
+
++ (instancetype)service;
+
+- (BOOL)exportWithTaskPath:(NSString *)taskPath outputPath:(NSString *)outputPath;
+
+//- (void)setTailWaterMark:(UIImage *)image frame:(CGRect)frame duration:(CGFloat)duration;
+
+- (void)setTailWaterMark:(AliyunEffectImage *)image;
+
+- (void)cancelExport;
+
+- (BOOL)uploadWithImagePath:(NSString *)imagePath
+                 svideoInfo:(AliyunUploadSVideoInfo *)svideoInfo
+                accessKeyId:(NSString *)accessKeyId
+            accessKeySecret:(NSString *)accessKeySecret
+                accessToken:(NSString *)accessToken;
+
+- (void)refreshWithAccessKeyId:(NSString *)accessKeyId
+               accessKeySecret:(NSString *)accessKeySecret
+                   accessToken:(NSString *)accessToken
+                    expireTime:(NSString *)expireTime;
+
+- (void)cancelUpload;
+
+
+@end

+ 134 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunPublishService.m

@@ -0,0 +1,134 @@
+//
+//  AliyunPublishService.m
+//  qusdk
+//
+//  Created by Worthy on 2017/10/30.
+//  Copyright © 2017年 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import "AliyunPublishService.h"
+#import <AVFoundation/AVFoundation.h>
+#import <AssetsLibrary/AssetsLibrary.h>
+#import <UIKit/UIKit.h>
+
+@interface AliyunPublishService () <AliyunIExporterCallback,
+                                    AliyunIUploadCallback>
+@property(nonatomic, strong) AliyunPublishManager *manager;
+@end
+
+@implementation AliyunPublishService
+
+- (instancetype)init {
+  self = [super init];
+  if (self) {
+    _manager = [AliyunPublishManager new];
+    _manager.exportCallback = self;
+    _manager.uploadCallback = self;
+    _manager.transcode = NO;
+  }
+  return self;
+}
+
++ (instancetype)service {
+  static dispatch_once_t onceToken;
+  static AliyunPublishService *service = nil;
+  dispatch_once(&onceToken, ^{
+    service = [[AliyunPublishService alloc] init];
+  });
+  return service;
+}
+
+- (void)setTailWaterMark:(UIImage *)image
+                   frame:(CGRect)frame
+                duration:(CGFloat)duration {
+  [_manager setTailWaterMark:image frame:frame duration:duration];
+}
+
+- (void)setTailWaterMark:(AliyunEffectImage *)image{
+    [_manager setTailWaterMark:image];
+}
+
+- (BOOL)exportWithTaskPath:(NSString *)taskPath
+                outputPath:(NSString *)outputPath {
+  return [_manager exportWithTaskPath:taskPath outputPath:outputPath];
+}
+
+- (void)cancelExport {
+  [_manager cancelExport];
+}
+
+- (BOOL)uploadWithImagePath:(NSString *)imagePath
+                 svideoInfo:(AliyunUploadSVideoInfo *)svideoInfo
+                accessKeyId:(NSString *)accessKeyId
+            accessKeySecret:(NSString *)accessKeySecret
+                accessToken:(NSString *)accessToken {
+  return [_manager uploadWithImagePath:imagePath
+                            svideoInfo:svideoInfo
+                           accessKeyId:accessKeyId
+                       accessKeySecret:accessKeySecret
+                           accessToken:accessToken];
+}
+
+- (void)refreshWithAccessKeyId:(NSString *)accessKeyId
+               accessKeySecret:(NSString *)accessKeySecret
+                   accessToken:(NSString *)accessToken
+                    expireTime:(NSString *)expireTime {
+  [_manager refreshWithAccessKeyId:accessKeyId
+                   accessKeySecret:accessKeySecret
+                       accessToken:accessToken
+                        expireTime:expireTime];
+}
+
+- (void)cancelUpload {
+  [_manager cancelUpload];
+}
+
+#pragma mark - callback
+
+- (void)exportError:(int)errorCode {
+  [_exportCallback exportError:errorCode];
+}
+
+- (void)exporterDidEnd:(NSString *)outputPath {
+  [_exportCallback exporterDidEnd:outputPath];
+}
+
+- (void)exporterDidStart {
+  [_exportCallback exporterDidStart];
+}
+
+- (void)exporterDidCancel {
+  [_exportCallback exporterDidCancel];
+}
+
+- (void)exportProgress:(float)progress {
+  [_exportCallback exportProgress:progress];
+}
+
+- (void)uploadSuccessWithVid:(NSString *)vid imageUrl:(NSString *)imageUrl {
+  [_uploadCallback uploadSuccessWithVid:vid imageUrl:imageUrl];
+}
+
+- (void)uploadFailedWithCode:(NSString *)code message:(NSString *)message {
+  [_uploadCallback uploadFailedWithCode:code message:message];
+}
+
+- (void)uploadProgressWithUploadedSize:(long long)uploadedSize
+                             totalSize:(long long)totalSize {
+  [_uploadCallback uploadProgressWithUploadedSize:uploadedSize
+                                        totalSize:totalSize];
+}
+
+- (void)uploadTokenExpired {
+  [_uploadCallback uploadTokenExpired];
+}
+
+- (void)uploadRetry {
+  [_uploadCallback uploadRetry];
+}
+
+- (void)uploadRetryResume {
+  [_uploadCallback uploadRetryResume];
+}
+
+@end

+ 66 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunSVideoApi.h

@@ -0,0 +1,66 @@
+//
+//  AliyunSVideoApi.h
+//  qusdk
+//
+//  Created by Worthy Zhang on 2019/1/2.
+//  Copyright © 2019 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface AliyunSVideoApi : NSObject
+
+
+/**
+ 获取图片上传的凭证
+
+ @param tokenString 用户token
+ @param title 标题
+ @param filePath 图片路径
+ @param tags tag-标签
+ @param handler 回调
+ */
++ (void)getImageUploadAuthWithToken:(NSString *_Nullable)tokenString
+                              title:(NSString * _Nullable)title
+                           filePath:(NSString *)filePath
+                               tags:(NSString * _Nullable)tags
+                            handler:(void (^)(NSString *_Nullable uploadAddress, NSString *_Nullable uploadAuth, NSString *_Nullable imageURL, NSString *_Nullable imageId, NSError *_Nullable error))handler;
+
+
+/**
+ 获取视频上传的凭证
+
+ @param tokenString 用户token
+ @param title 视频标题
+ @param filePath 视频路径
+ @param coverURL 封面图
+ @param desc 描述
+ @param tags tag-标签
+ @param handler 回调
+ */
++ (void)getVideoUploadAuthWithWithToken:(NSString *_Nullable)tokenString
+                                  title:(NSString *)title
+                               filePath:(NSString *)filePath
+                               coverURL:(NSString * _Nullable)coverURL
+                                   desc:(NSString *_Nullable)desc
+                                   tags:(NSString * _Nullable)tags
+                                handler:(void (^)(NSString *_Nullable uploadAddress, NSString *_Nullable uploadAuth, NSString *_Nullable videoId, NSError *_Nullable error))handler;
+
+/**
+ 刷新视频上传凭证
+
+ @param tokenString 用户凭证
+ @param videoId 视频id
+ @param handler 回调
+ */
++ (void)refreshVideoUploadAuthWithToken:(NSString *_Nullable)tokenString
+                                videoId:(NSString *)videoId
+                                handler:(void (^)(NSString *_Nullable uploadAddress, NSString *_Nullable uploadAuth, NSError *_Nullable error))handler;
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 218 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/Model/AliyunSVideoApi.m

@@ -0,0 +1,218 @@
+//
+//  AliyunSVideoApi.m
+//  qusdk
+//
+//  Created by Worthy Zhang on 2019/1/2.
+//  Copyright © 2019 Alibaba Group Holding Limited. All rights reserved.
+//
+
+#import "AliyunSVideoApi.h"
+#import "AlivcDefine.h"
+#import "AlivcMacro.h"
+
+
+@implementation AliyunSVideoApi
+
++ (void)getImageUploadAuthWithToken:(NSString *)tokenString title:(NSString *)title filePath:(NSString *)filePath tags:(NSString *)tags handler:(void (^)(NSString * _Nullable, NSString * _Nullable, NSString * _Nullable, NSString * _Nullable, NSError * _Nullable))handler{
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    [params addEntriesFromDictionary:@{
+                                       @"imageType":@"cover",
+                                       @"imageExt":filePath.lastPathComponent.pathExtension
+                                       }];
+    if (title) {
+        [params addEntriesFromDictionary:@{@"title":title}];
+    }
+    if (tags) {
+        [params addEntriesFromDictionary:@{@"tags":tags}];
+    }
+    
+    
+    NSString *getUrl = @"/demo/getImageUploadAuth";
+    AlivcOutputProductType type = kAlivcProductType;
+    if (type == AlivcOutputProductTypeSmartVideo) {
+        getUrl = @"/vod/getImageUploadAuth";
+        if (tokenString) {
+            [params addEntriesFromDictionary:@{@"token":tokenString}];
+        }
+    }
+    
+    [self getWithPath:getUrl params:params completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
+        if (error) {
+            handler(nil, nil, nil, nil, error);
+        }else {
+            NSString *uploadAddress = [responseObject objectForKey:@"uploadAddress"];
+            NSString *uploadAuth = [responseObject objectForKey:@"uploadAuth"];
+            NSString *imageURL = [responseObject objectForKey:@"imageURL"];
+            NSString *imageId = [responseObject objectForKey:@"imageId"];
+            handler(uploadAddress, uploadAuth, imageURL, imageId, nil);
+        }
+    }];
+}
+
++ (void)getVideoUploadAuthWithWithToken:(NSString *)tokenString title:(NSString *)title filePath:(NSString *)filePath coverURL:(NSString *)coverURL desc:(NSString *)desc tags:(NSString *)tags handler:(void (^)(NSString * _Nullable, NSString * _Nullable, NSString * _Nullable, NSError * _Nullable))handler{
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    [params addEntriesFromDictionary:@{
+                                       @"title":title,
+                                       @"fileName":filePath.lastPathComponent
+                                       }];
+    if (coverURL) {
+        [params addEntriesFromDictionary:@{@"coverURL":coverURL}];
+    }
+    if (desc) {
+        [params addEntriesFromDictionary:@{@"description":desc}];
+    }
+    if (tags) {
+        [params addEntriesFromDictionary:@{@"tags":tags}];
+    }
+   
+    NSString *getUrl = @"/demo/getVideoUploadAuth";
+    AlivcOutputProductType type = kAlivcProductType;
+    if (type == AlivcOutputProductTypeSmartVideo) {
+        getUrl = @"/vod/getVideoUploadAuth";
+        if (tokenString) {
+            [params addEntriesFromDictionary:@{@"token":tokenString}];
+        }
+    }
+    
+    [self getWithPath:getUrl params:params completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
+        if (error) {
+            handler(nil, nil, nil, error);
+        }else {
+            NSString *uploadAddress = [responseObject objectForKey:@"uploadAddress"];
+            NSString *uploadAuth = [responseObject objectForKey:@"uploadAuth"];
+            NSString *videoId = [responseObject objectForKey:@"videoId"];
+            handler(uploadAddress, uploadAuth, videoId, nil);
+        }
+    }];
+}
+
+
++ (void)refreshVideoUploadAuthWithToken:(NSString *)tokenString videoId:(NSString *)videoId handler:(void (^)(NSString * _Nullable, NSString * _Nullable, NSError * _Nullable))handler{
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    if (videoId) {
+        [params addEntriesFromDictionary:@{@"videoId":videoId}];
+    }
+    
+    
+    NSString *getUrl = @"/demo/refreshVideoUploadAuth";
+    AlivcOutputProductType type = kAlivcProductType;
+    if (type == AlivcOutputProductTypeSmartVideo) {
+        getUrl = @"/vod/refreshVideoUploadAuth";
+        if (tokenString) {
+            [params addEntriesFromDictionary:@{@"token":tokenString}];
+        }
+    }
+    [self getWithPath:getUrl params:params completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
+        if (error) {
+            handler(nil, nil, error);
+        }else {
+            NSString *uploadAddress = [responseObject objectForKey:@"uploadAddress"];
+            NSString *uploadAuth = [responseObject objectForKey:@"uploadAuth"];
+            handler(uploadAddress, uploadAuth, nil);
+        }
+    }];
+}
+
+
+
+
+#pragma mark - Private Method
+
++ (void)getWithPath:(NSString *)path params:(NSDictionary *)params completionHandler:(void (^)(NSURLResponse *response, id responseObject,  NSError * error))completionHandler {
+    NSString *paramsString = [self getParamsString:params];
+    NSString *urlString = [NSString
+                    stringWithFormat:@"%@%@?%@", kAlivcQuUrlString, path, paramsString];
+    
+    NSURLSessionConfiguration *sessionConfiguration =
+    [NSURLSessionConfiguration defaultSessionConfiguration];
+    
+    NSURLSession *session =
+    [NSURLSession sessionWithConfiguration:sessionConfiguration];
+    NSURL *url = [NSURL URLWithString:urlString];
+    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
+    [urlRequest addValue:@"application/json"
+      forHTTPHeaderField:@"Content-Type"];
+    [urlRequest addValue:@"application/json" forHTTPHeaderField:@"Accept"];
+    
+    NSURLSessionDataTask *task =
+    [session dataTaskWithRequest:urlRequest
+               completionHandler:^(NSData *_Nullable data,
+                                   NSURLResponse *_Nullable response,
+                                   NSError *_Nullable error) {
+                   if (error) {
+                       if (completionHandler) {
+                           completionHandler(response, nil, error);
+                       }
+                       return;
+                   }
+                   
+                   if (data == nil) {
+                       NSError *emptyError =
+                       [[NSError alloc] initWithDomain:@"AliyunSVideoApi"
+                                                  code:-10000
+                                              userInfo:nil];
+                       if (completionHandler) {
+                           completionHandler(response, nil, emptyError);
+                       }
+                       return;
+                   }
+                   
+                   id jsonObj = [NSJSONSerialization
+                                 JSONObjectWithData:data
+                                 options:NSJSONReadingAllowFragments
+                                 error:&error];
+                   if (error) {
+                       completionHandler(response, nil, error);
+                       return;
+                   }
+                   
+                   NSInteger code = [[jsonObj objectForKey:@"code"] integerValue];
+                   if (code != 200) {
+                       NSError *error = [NSError errorWithDomain:@"AliyunSVideoApi" code:code userInfo:jsonObj];
+                       if (completionHandler) {
+                           completionHandler(response, nil, error);
+                       }
+                       return;
+                   }
+                   
+                   if (completionHandler) {
+                       completionHandler(response, [jsonObj objectForKey:@"data"], nil);
+                   }
+                   
+               }];
+    
+    [task resume];
+    
+    
+}
+
+
++ (NSString *)getParamsString:(NSDictionary *)params {
+    NSMutableArray *parts = [NSMutableArray array];
+    for (id key in params.allKeys) {
+        id value = [params objectForKey:key];
+        NSString *part = [NSString stringWithFormat:@"%@=%@", [self percentEncode:key], [self percentEncode:value]];
+        [parts addObject: part];
+    }
+    
+    NSArray<NSString *> *sortedArray = [parts sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
+    NSString *string = [sortedArray componentsJoinedByString:@"&"];
+    return string;
+}
+
++ (NSString *)percentEncode:(id)object {
+    NSString *string = [NSString stringWithFormat:@"%@", object];
+    
+    NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@?/"; // does not include "?" or "/" due to RFC 3986 - Section 3.4
+    NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;=";
+    NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
+    [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]];
+    
+    
+    NSString *percentstring = [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
+    NSString * plusReplaced = [percentstring stringByReplacingOccurrencesOfString:@"+" withString:@"%20"];
+    NSString * starReplaced = [plusReplaced stringByReplacingOccurrencesOfString:@"*" withString:@"%2A"];
+    NSString * waveReplaced = [starReplaced stringByReplacingOccurrencesOfString:@"%7E" withString:@"~"];
+    return waveReplaced;
+}
+@end

+ 1 - 20
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/MusicPick/AliyunMusicPickViewController.m

@@ -757,8 +757,6 @@
         AliyunMusicPickModel *model = self.musics[self.selectedSection];
         model.expand = NO;
         if (self.selectedSection > 0) {
-            //            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:_selectedSection];
-            //            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
             [self.tableView reloadData];
         }
         
@@ -814,31 +812,14 @@
     [self.player pause];
     
     
-    //    AliyunMusicPickModel *model = self.musics[_selectedSection];
     AliyunMusicPickModel *model = self.selectedMusic;
     model.duration = _duration;
-    //     配音功能只支持aac格式,mp3格式的音乐需要转码
-    //     建议使用aac格式的音乐资源
-    //    AliyunNativeParser *parser = [[AliyunNativeParser alloc] initWithPath:model.path];
-    //    NSString *format = [parser getValueForKey:ALIYUN_AUDIO_CODEC];
-    //    if ([format isEqualToString:@"mp3"]) {
-    //        _musicCrop = [[AliyunCrop alloc] initWithDelegate:self];
-    //        NSString *outputPath = [[AliyunPathManager createMagicRecordDir] stringByAppendingPathComponent:[model.path lastPathComponent]];
-    //        _musicCrop.inputPath = model.path;
-    //        _musicCrop.outputPath = outputPath;
-    //        _musicCrop.startTime = model.startTime;
-    //        _musicCrop.endTime = model.duration + model.startTime;
-    //        model.path = outputPath;
-    //        [_musicCrop startCrop];
-    //    }else {
+    
     [self.navigationController popViewControllerAnimated:YES];
     if (self.delegate && [self.delegate respondsToSelector:@selector(didSelectMusic:tab:)]) {
         [self.delegate didSelectMusic:model tab:self.selectedTab];
     }
     
-    
-    //    }
-    
 }
 
 #pragma mark - tab view delegate

+ 96 - 71
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/Controller/AliyunCropViewController.m

@@ -12,10 +12,14 @@
 #import <AliyunVideoSDKPro/AliyunCrop.h>
 #import <AliyunVideoSDKPro/AliyunImageCrop.h>
 #import <AliyunVideoSDKPro/AliyunErrorCode.h>
+#import <AliyunVideoSDKPro/AliyunImporter.h>
 #import "AliyunCropThumbnailView.h"
 #import "AliyunCycleProgressView.h"
 #import "AliyunCropViewBottomView.h"
 #import "AliyunPathManager.h"
+#import "AlivcShortVideoRoute.h"
+#import "AliyunCompositionInfo.h"
+#import "AlivcShortVideoPublishManager.h"
 #import "AVC_ShortVideo_Config.h"
 #import "MBProgressHUD+AlivcHelper.h"
 #import "AlivcMacro.h"
@@ -64,10 +68,17 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
 @property (nonatomic, strong) CALayer *stillImageLayer;
 @property (nonatomic, strong) UIImage *stillImage;
 
+/**
+ 裁剪对象参数
+ */
+@property (nonatomic, strong) AliyunCompositionInfo *cropCompositionInfo;
 
 @end
 
 @implementation AliyunCropViewController
+{
+    AliyunImporter *_importor;
+}
 
 - (void)viewDidLoad {
     [super viewDidLoad];
@@ -77,26 +88,13 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     }
     [self setupSubViews];
     
-    if (_cutInfo.phAsset) {//是图片资源
-        if (_cutInfo.phImage) {
-            _originalMediaSize = CGSizeMake(_cutInfo.phImage.size.width, _cutInfo.phImage.size.height);
-            _destRatio = _cutInfo.outputSize.width / _cutInfo.outputSize.height;
-            _orgVideoRatio = _originalMediaSize.width / _originalMediaSize.height;
-        }else {
-            _originalMediaSize = CGSizeMake(_cutInfo.phAsset.pixelWidth, _cutInfo.phAsset.pixelHeight);
-            _destRatio = _cutInfo.outputSize.width / _cutInfo.outputSize.height;
-            _orgVideoRatio = _originalMediaSize.width / _originalMediaSize.height;
-        }
-        [self setupStillImageLayer];
-    } else {
-        NSURL *sourceURL = [NSURL fileURLWithPath:_cutInfo.sourcePath];
-        _avAsset = [AVAsset assetWithURL:sourceURL];
-        _originalMediaSize = [_avAsset avAssetNaturalSize];
-        _destRatio = _cutInfo.outputSize.width / _cutInfo.outputSize.height;
-        _orgVideoRatio = _originalMediaSize.width / _originalMediaSize.height;
-        [self setAVPlayer];
-        _thumbnailView.avAsset = _avAsset;
-    }
+    NSURL *sourceURL = [NSURL fileURLWithPath:_cutInfo.sourcePath];
+    _avAsset = [AVAsset assetWithURL:sourceURL];
+    _originalMediaSize = [_avAsset avAssetNaturalSize];
+    _destRatio = _cutInfo.outputSize.width / _cutInfo.outputSize.height;
+    _orgVideoRatio = _originalMediaSize.width / _originalMediaSize.height;
+    [self setAVPlayer];
+    _thumbnailView.avAsset = _avAsset;
 }
 
 - (void)viewDidAppear:(BOOL)animated {
@@ -131,12 +129,12 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     [self.previewScrollView addGestureRecognizer:tapGesture];
     
     if (!_cutInfo.phAsset) {
-        self.thumbnailView = [[AliyunCropThumbnailView alloc] initWithFrame:CGRectMake(0, ScreenHeight - 40 - ScreenWidth/8.0 - 12 - SafeBottom, ScreenWidth, ScreenWidth / 8 + 12) withCutInfo:_cutInfo];
+        self.thumbnailView = [[AliyunCropThumbnailView alloc] initWithFrame:CGRectMake(0, ScreenHeight - 20 - 110 - SafeBottom, ScreenWidth, 110) withCutInfo:_cutInfo];
         self.thumbnailView.delegate = (id<AliyunCutThumbnailViewDelegate>)self;
         [self.view addSubview:self.thumbnailView];
     }
     
-    self.bottomView = [[AliyunCropViewBottomView alloc] initWithFrame:CGRectMake(0, ScreenHeight - 40 - SafeBottom, ScreenWidth, 40)];
+    self.bottomView = [[AliyunCropViewBottomView alloc] initWithFrame:CGRectMake(0, SafeTop, ScreenWidth, 44)];
     self.bottomView.delegate = (id<AliyunCropViewBottomViewDelegate>)self;
     [self.view addSubview:self.bottomView];
     
@@ -216,12 +214,8 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     _previewScrollView.frame = frame;
     _previewScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
     if (_cutInfo.cutMode == AliyunMediaCutModeScaleAspectCut) {
-        
-        [self.bottomView.ratioButton setImage:[AliyunImage imageNamed:@"cut_ratio"] forState:0];
         [self fitModeCut];
     } else {
-        
-        [self.bottomView.ratioButton setImage:[AliyunImage imageNamed:@"normal"] forState:0];
         [self fitModeFill];
     }
 }
@@ -304,7 +298,6 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
         [alert show];
         self.thumbnailView.userInteractionEnabled = YES;
         self.bottomView.cropButton.userInteractionEnabled = YES;
-        self.bottomView.ratioButton.userInteractionEnabled = YES;
         [self destoryAVPlayer];
         [self setAVPlayer];
  
@@ -333,9 +326,13 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
         }
         _cutInfo.endTime = _cutInfo.endTime - _cutInfo.startTime;
         _cutInfo.startTime = 0;
-        if (self.delegate) {
-            [self.delegate cropViewControllerFinish:self.cutInfo viewController:self];
-        }
+        
+        // 本页面处理,不做回调
+//        if (self.delegate) {
+//            [self.delegate cropViewControllerFinish:self.cutInfo viewController:self];
+//        }
+        
+        [self dealWithCropWith:self.cutInfo];
     }
     _bottomView.cropButton.enabled =YES;
 }
@@ -343,39 +340,83 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
 - (void)cropTaskOnCancel {
     self.progressView.progress = 0;
     _bottomView.cropButton.enabled =YES;
-    _bottomView.ratioButton.enabled = YES;
     NSLog(@"cancel");
 }
 
-#pragma mark ---
-- (void)photoCrop {
-    AliyunImageCrop *imageCrop = [[AliyunImageCrop alloc] init];
-    imageCrop.originImage = _stillImage;
-    imageCrop.cropMode = (AliyunImageCropMode)_cutInfo.cutMode;
-    imageCrop.outputSize = _cutInfo.outputSize;
-    imageCrop.fillBackgroundColor = _cutInfo.backgroundColor;
-    
-    if (_cutInfo.cutMode == 1) {
-        imageCrop.cropRect = [self configureReservationRect];
+// 裁剪后的处理
+- (void)dealWithCropWith:(AliyunMediaConfig *)mediaInfo {
+    _cropCompositionInfo = [[AliyunCompositionInfo alloc] init];
+    _cropCompositionInfo.sourcePath = mediaInfo.outputPath;
+    if (![mediaInfo.outputPath isEqualToString:mediaInfo.sourcePath]) {
+        _cropCompositionInfo.asset = [AVURLAsset assetWithURL:[NSURL fileURLWithPath:mediaInfo.outputPath]];
     }
+    _cropCompositionInfo.duration = [_cropCompositionInfo.asset avAssetVideoTrackDuration];
     
-    UIImage *image = [imageCrop generateImage];
+    _cropCompositionInfo.startTime = mediaInfo.startTime;
+    _cropCompositionInfo.duration = mediaInfo.endTime - mediaInfo.startTime;
     
-    self.cutInfo.phImage = image;
+    [self jumpToEditController];
+}
+
+// 跳转至编辑页面
+- (void)jumpToEditController {
+    NSString *editDir = [AliyunPathManager compositionRootDir];
+    NSString *taskPath = [editDir stringByAppendingPathComponent:[AliyunPathManager randomString]];
+    
+    _importor = [[AliyunImporter alloc] initWithPath:taskPath outputSize:_cutInfo.outputSize];
+    NSMutableArray *saveAVURLAssetArray = [[NSMutableArray alloc] init];
+    AliyunCompositionInfo *info = _cropCompositionInfo;
+    AliyunClip *clip = [[AliyunClip alloc] initWithVideoPath:info.sourcePath startTime:info.startTime duration:info.duration animDuration:0];
+    [_importor addMediaClip:clip];
+    if (info.asset) {
+        [saveAVURLAssetArray addObject:info.asset];
+    }
+    if ([_cutInfo mediaRatio] == AliyunMediaRatio9To16) {
+        _cutInfo.cutMode = AliyunMediaCutModeScaleAspectCut;
+    }else {
+        _cutInfo.cutMode = AliyunMediaCutModeScaleAspectFill;
+    }
     
-   
-    NSString *tmpPhotoPath = [[[AliyunPathManager compositionRootDir] stringByAppendingPathComponent:[AliyunPathManager randomString] ] stringByAppendingPathExtension:@"jpg"];
-    NSData *imageData = UIImageJPEGRepresentation(image, 1);
-    [imageData writeToFile:tmpPhotoPath atomically:YES];
-    self.cutInfo.sourcePath = tmpPhotoPath;
     
-    if (self.delegate) {
-        [self.delegate cropViewControllerFinish:self.cutInfo viewController:self];
+    // set video param
+    AliyunVideoParam *param = [[AliyunVideoParam alloc] init];
+    param.fps = _cutInfo.fps;
+    param.gop = _cutInfo.gop;
+    param.bitrate = _cutInfo.bitrate;
+    param.videoQuality = (AliyunVideoQuality)_cutInfo.videoQuality;
+    if (_cutInfo.cutMode == AliyunMediaCutModeScaleAspectCut) {
+        param.scaleMode = AliyunScaleModeFit;
+    }else{
+        param.scaleMode = AliyunScaleModeFill;
+    }
+    // 编码模式
+    if (_cutInfo.encodeMode ==  AliyunEncodeModeHardH264) {
+        param.codecType = AliyunVideoCodecHardware;
+    }else if(_cutInfo.encodeMode == AliyunEncodeModeSoftFFmpeg) {
+        param.codecType = AliyunVideoCodecFFmpeg;
     }
-}
-
-- (void)didStartClip {
     
+    [_importor setVideoParam:param];
+    // generate config
+    [_importor generateProjectConfigure];
+    // output path
+    _cutInfo.outputPath = [[taskPath stringByAppendingPathComponent:[AliyunPathManager randomString]]stringByAppendingPathExtension:@"mp4"];
+    
+    
+    // edit view controller
+    [[AlivcShortVideoRoute shared] registerEditVideoPath:nil];
+    [[AlivcShortVideoRoute shared] registerEditMediasPath:taskPath];
+    [[AlivcShortVideoRoute shared] registerMediaConfig:_cutInfo];
+    UIViewController *editVC = [[AlivcShortVideoRoute shared] alivcViewControllerWithType:AlivcViewControlEdit];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self.navigationController pushViewController:editVC animated:YES];
+        //存储点击的相册资源,防止之后合成没有相关资源导致失败
+        [[AlivcShortVideoPublishManager shared]saveResources:(NSArray *)saveAVURLAssetArray];
+    });
+}
+
+#pragma mark ------
+- (void)didStartClip {
     [self pauseVideo];
     self.thumbnailView.userInteractionEnabled = NO;
     if (_previewScrollView.isDragging) {
@@ -388,8 +429,6 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     }
     _cutPanel = [[AliyunCrop alloc] init];
     _cutPanel.delegate = (id<AliyunCropDelegate>)self;
-//    _cutPanel.inputPath = tmp32Path;
-//    _cutPanel.outputPath = mp32Path;
     _cutPanel.inputPath = _cutInfo.sourcePath;
     _cutPanel.outputPath = _cutInfo.outputPath;
 
@@ -425,7 +464,7 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     
     NSLog(@"TestLog, %@:%@", @"log_crop_start_time", @([NSDate date].timeIntervalSince1970));
 
-    int res =[_cutPanel startCrop];
+    int res = [_cutPanel startCrop];
     if (res == -100002){
         dispatch_async(dispatch_get_main_queue(), ^{
             [MBProgressHUD showWarningMessage:@"当前视频格式不支持" inView:[UIApplication sharedApplication].keyWindow];
@@ -478,7 +517,6 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     self.progressView.progress = 0;
     self.thumbnailView.userInteractionEnabled = YES;
     self.bottomView.cropButton.enabled = YES;
-    self.bottomView.ratioButton.enabled = YES;
     [_cutPanel cancel];
 }
 
@@ -606,23 +644,10 @@ typedef NS_ENUM(NSInteger, AliyunCropPlayerStatus) {
     [self.navigationController popViewControllerAnimated:YES];
 }
 
-
-- (void)onClickRatioButton {
-    _cutInfo.cutMode = !_cutInfo.cutMode;
-    [self cropViewFitRect];
-}
-
-
 - (void)onClickCropButton {
-    NSLog(@"点击了裁剪按钮");
-    if (_cutInfo.phAsset) {
-        [self photoCrop];
-    } else {
-        [self didStartClip];
-    }
+    [self didStartClip];
 }
 
-
 - (void)viewWillDisappear:(BOOL)animated {
     [self pauseVideo];
     self.cutInfo.cutMode = _cutMode;

+ 21 - 21
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropThumbnailView.m

@@ -56,11 +56,11 @@
 
 - (void)setupCollectionView {
     UICollectionViewFlowLayout *followLayout = [[UICollectionViewFlowLayout alloc] init];
-    followLayout.itemSize = CGSizeMake(ScreenWidth / 8.0 , ScreenWidth / 8.0);
+    followLayout.itemSize = CGSizeMake(ScreenWidth / 8.0 , 72);
     followLayout.minimumLineSpacing = 0;
     followLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
     
-    _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 12, ScreenWidth, ScreenWidth / 8.0) collectionViewLayout:followLayout];
+    _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 38, ScreenWidth, 72) collectionViewLayout:followLayout];
     _collectionView.dataSource = (id<UICollectionViewDataSource>)self;
     [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
     [self addSubview:_collectionView];
@@ -69,29 +69,29 @@
 - (void)setupSubviews {
     
     _progressView = [[UIImageView alloc] initWithImage:[AliyunImage imageNamed:@"progress"]];
-    _progressView.bounds = CGRectMake(0, 0, ScreenWidth / 8.0, ScreenWidth / 8.0);
+    _progressView.bounds = CGRectMake(0, 0, ScreenWidth / 8.0, 72);
     _progressView.center = CGPointMake(0, CGRectGetMidY(self.bounds) + 6);
     [self addSubview:_progressView];
     
-    _durationLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 0, ScreenWidth - 200, 12)];
-    _durationLabel.textColor = RGBToColor(240, 84, 135);
-    _durationLabel.textAlignment = 1;
-    _durationLabel.font = [UIFont systemFontOfSize:12];
+    _durationLabel = [[UILabel alloc] initWithFrame:CGRectMake(14, 0, ScreenWidth - 200, 18)];
+    _durationLabel.textColor = [UIColor whiteColor];
+    _durationLabel.textAlignment = UITextAlignmentLeft;
+    _durationLabel.font = [UIFont systemFontOfSize:13];
     [self addSubview:_durationLabel];
     
     _imageViewWith = ScreenWidth / 8.0 * 0.35;
-    _imageViewLeft = [[UIImageView alloc] initWithImage:[AliyunImage imageNamed:@"cut_bar_left"]];
-    _imageViewLeft.frame = CGRectMake(0, 12, _imageViewWith, ScreenWidth / 8.0);
+    _imageViewLeft = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"video_edit_left"]];
+    _imageViewLeft.frame = CGRectMake(0, 38, _imageViewWith, 72);
     _imageViewLeft.userInteractionEnabled = YES;
-    _imageViewRight = [[UIImageView alloc] initWithImage:[AliyunImage imageNamed:@"cut_bar_right"]];
-    _imageViewRight.frame = CGRectMake(ScreenWidth - _imageViewWith, 12, _imageViewWith, ScreenWidth / 8.0);
+    _imageViewRight = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"video_edit_right"]];
+    _imageViewRight.frame = CGRectMake(ScreenWidth - _imageViewWith, 38, _imageViewWith, 72);
     _imageViewRight.userInteractionEnabled = YES;
     
     
-    _topLineView = [[UIImageView alloc]initWithFrame:CGRectMake(_imageViewWith - 3 , 12, ScreenWidth - _imageViewWith *2 + 6, 3)];
+    _topLineView = [[UIImageView alloc]initWithFrame:CGRectMake(_imageViewWith - 3 , 38, ScreenWidth - _imageViewWith *2 + 6, 3)];
     _topLineView.backgroundColor = [AliyunIConfig config].cutTopLineColor;
     
-    _underLineView = [[UIImageView alloc]initWithFrame:CGRectMake(_imageViewWith - 3, _imageViewLeft.frame.size.height + 12 - 3  , ScreenWidth - _imageViewWith *2 + 6, 3)];
+    _underLineView = [[UIImageView alloc]initWithFrame:CGRectMake(_imageViewWith - 3, _imageViewLeft.frame.size.height + 38 - 3  , ScreenWidth - _imageViewWith *2 + 6, 3)];
     _underLineView.backgroundColor = [AliyunIConfig config].cutBottomLineColor;
     
     [self addSubview:_topLineView];
@@ -101,8 +101,8 @@
     [self addSubview:_imageViewRight];
     
 
-    _imageViewLeftMask = [[UIImageView alloc]initWithFrame:CGRectMake(0, 12, 0, _imageViewLeft.frame.size.height)];
-    _imageViewRightMask = [[UIImageView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(_imageViewRight.frame), 12, 0, _imageViewLeft.frame.size.height)];
+    _imageViewLeftMask = [[UIImageView alloc]initWithFrame:CGRectMake(0, 38, 0, _imageViewLeft.frame.size.height)];
+    _imageViewRightMask = [[UIImageView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(_imageViewRight.frame), 38, 0, _imageViewLeft.frame.size.height)];
     
     _imageViewLeftMask.backgroundColor = [AliyunIConfig config].backgroundColor;
     _imageViewLeftMask.alpha = 0.8;
@@ -113,14 +113,14 @@
     [self addSubview:_imageViewRightMask];
 
     _imageViewBackground = [[UIImageView alloc] initWithImage:[AliyunImage imageNamed:@"paster_time_edit_slider_bg"]];
-    _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), ScreenWidth / 8.0);
+    _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), 72);
     [self addSubview:_imageViewBackground];
     
 }
 
 - (void)loadThumbnailData {
     
-    _durationLabel.text = [NSString stringWithFormat:@"%.2f",_cutInfo.endTime - _cutInfo.startTime];
+    _durationLabel.text = [NSString stringWithFormat:@"已选取%.1fs",_cutInfo.endTime - _cutInfo.startTime];
     CMTime startTime = kCMTimeZero;
     NSMutableArray *array = [NSMutableArray array];
 //    CMTime addTime = CMTimeMake(1000,1000);
@@ -233,8 +233,8 @@
             _imageViewLeftMask.frame = maskFrame;
             
             _cutInfo.startTime = left;
-            _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), ScreenWidth / 8.0);
-            _durationLabel.text = [NSString stringWithFormat:@"%.2f",_cutInfo.endTime - _cutInfo.startTime];
+            _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), 72);
+            _durationLabel.text = [NSString stringWithFormat:@"已选取%.1fs",_cutInfo.endTime - _cutInfo.startTime];
             if ([_delegate respondsToSelector:@selector(cutBarDidMovedToTime:)]) {
                 [_delegate cutBarDidMovedToTime:left];
             }
@@ -251,8 +251,8 @@
             maskFrame.origin.x = frame.origin.x + frame.size.width;
             maskFrame.size.width = ScreenWidth - maskFrame.origin.x;
             _imageViewRightMask.frame = maskFrame;
-            _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), ScreenWidth / 8.0);
-            _durationLabel.text = [NSString stringWithFormat:@"%.2f", _cutInfo.endTime - _cutInfo.startTime];
+            _imageViewBackground.frame = CGRectMake(CGRectGetMaxX(_imageViewLeft.frame), CGRectGetMinY(_imageViewLeft.frame), CGRectGetMinX(_imageViewRight.frame) - CGRectGetMaxX(_imageViewLeft.frame), 72);
+            _durationLabel.text = [NSString stringWithFormat:@"已选取%.1fs", _cutInfo.endTime - _cutInfo.startTime];
             if ([_delegate respondsToSelector:@selector(cutBarDidMovedToTime:)]) {
                 [_delegate cutBarDidMovedToTime:right];
             }

+ 0 - 6
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropViewBottomView.h

@@ -11,18 +11,12 @@
 @protocol AliyunCropViewBottomViewDelegate <NSObject>
 
 - (void)onClickBackButton;
-- (void)onClickRatioButton;
 - (void)onClickCropButton;
 
 @end
 
 @interface AliyunCropViewBottomView : UIView
 
-/**
- 裁剪模式切换按钮
- */
-@property (nonatomic, strong) UIButton *ratioButton;
-
 /**
  确定按钮
  */

+ 9 - 13
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoCrop/View/AliyunCropViewBottomView.m

@@ -8,6 +8,7 @@
 
 #import "AliyunCropViewBottomView.h"
 #import "AVC_ShortVideo_Config.h"
+#import "AlivcMacro.h"
 
 @interface AliyunCropViewBottomView ()
 
@@ -40,14 +41,16 @@
     
     CGFloat height = CGRectGetHeight(self.frame);
     CGFloat width = CGRectGetWidth(self.frame);
-    self.backButton = [self buttonWithRect:(CGRectMake(0, 0, height, height)) image:[AliyunImage imageNamed:@"cancel"] action:@selector(backButtonAction)];
+    self.backButton = [self buttonWithRect:(CGRectMake(5, 2, 40, 40)) image:[UIImage imageNamed:@"navbar_back_white"] action:@selector(backButtonAction)];
     [self addSubview:self.backButton];
     
-    self.ratioButton = [self buttonWithRect:(CGRectMake(0, 0, height, height)) image:[AliyunImage imageNamed:@"cut_ratio"] action:@selector(ratioButtonAction)];
-    self.ratioButton.center = CGPointMake(width / 2, height / 2);
-    [self addSubview:self.ratioButton];
-    
-    self.cropButton = [self buttonWithRect:(CGRectMake(width - height, 0, height, height)) image:[AliyunImage imageNamed:@"check"] action:@selector(cropButtonAction)];
+    self.cropButton = [self buttonWithRect:(CGRectMake(width - 14 - 64, 8, 64, 26)) image:nil action:@selector(cropButtonAction)];
+    [self.cropButton setTitle:@"下一步" forState:UIControlStateNormal];
+    [self.cropButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    self.cropButton.backgroundColor = RGBToColor(98, 204, 116);
+    self.cropButton.titleLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium];
+    self.cropButton.layer.cornerRadius = 13;
+    self.cropButton.layer.masksToBounds = YES;
     [self addSubview:self.cropButton];
 }
 
@@ -69,15 +72,8 @@
     }
 }
 
-- (void)ratioButtonAction {
-    if (self.delegate) {
-        [self.delegate onClickRatioButton];
-    }
-}
-
 - (void)cropButtonAction {
     self.cropButton.enabled = NO;
-    self.ratioButton.enabled = NO;
     if (self.delegate) {
         [self.delegate onClickCropButton];
     }

+ 107 - 54
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoEdit/Controller/AliyunEditViewController.m

@@ -37,8 +37,9 @@
 #import "AliyunTimelineMediaInfo.h"
 #import "AliyunTimelineView.h"
 
-
+#import "AliyunCoverPickViewController.h"
 #import "AliyunEditButtonsView.h"
+#import "AliyunPublishService.h"
 
 //其它
 #import "AVAsset+VideoInfo.h"
@@ -49,6 +50,7 @@
 #import "AliyunEffectTimeFilterView.h"
 #import "AliyunMusicPickViewController.h"
 #import "AlivcMacro.h"
+#import "AlivcAlertView.h"
 
 //底部UI适配
 #import "AlivcEditItemManager.h"
@@ -115,8 +117,9 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
 @property(nonatomic, strong) AliyunDBHelper *dbHelper;
 
 @property(nonatomic, assign) BOOL isExporting;
-@property(nonatomic, assign) BOOL isPublish;
 @property(nonatomic, assign) BOOL isBackground;
+@property(nonatomic, assign) BOOL exportFinished;
+@property(nonatomic, assign) BOOL exportFailed;
 
 /**
  是否是编辑时间的拖动动作
@@ -620,8 +623,8 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
     [self.player stop];
     [self.editor stopEdit];
     
-    NSDictionary *coverDic = @{@"outputSize":@(_outputSize), @"videoPath":_config.outputPath};
-    [[NSNotificationCenter defaultCenter] postNotificationName: @"PushNotificationEditToCover" object: coverDic];
+    // 开始导出(导出后跳转至封面选择)
+    [self tryExport];
 }
 
 #pragma mark - Notification
@@ -662,6 +665,10 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
             [self play];
             [self.currentTimelineView seekToTime:[self.player getCurrentTime]];
         }
+        if (!_exportFinished && !_exportFailed) {
+            [[AliyunPublishService service] exportWithTaskPath:_taskPath
+                                                    outputPath:_config.outputPath];
+        }
         self.isBackground = NO;
     }
     self.playButton.enabled = YES;
@@ -905,6 +912,33 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
 
 #pragma mark - Common Method - Other
 
+- (void)tryExport {
+    if (!_exportFinished) {
+        // 片尾水印
+        if (_config.hasEnd) {
+            NSString *tailWatermarkPath = [[NSBundle mainBundle] pathForResource:@"tail" ofType:@"png"];
+            AliyunEffectImage *tailWatermark = [[AliyunEffectImage alloc] initWithFile:tailWatermarkPath];
+            tailWatermark.frame = CGRectMake(self.outputSize.width / 2 - 42,self.outputSize.height / 2 - 30, 84, 60);
+            tailWatermark.endTime = 2;
+            [[AliyunPublishService service] setTailWaterMark:tailWatermark];
+        }
+        [AliyunPublishService service].exportCallback = self;
+        NSLog(@"合成参数:%@", _config.outputPath);
+        BOOL isSuccess =
+        [[AliyunPublishService service] exportWithTaskPath:_taskPath
+                                                outputPath:_config.outputPath];
+        if (!isSuccess) {
+            AlivcAlertView *alertView =
+            [[AlivcAlertView alloc] initWithAlivcTitle:nil
+                                               message:@"合成失败,请返回重试"
+                                              delegate:self
+                                     cancelButtonTitle:nil
+                                    confirmButtonTitle:@"确定"];
+            [alertView show];
+        }
+    }
+}
+
 - (void)cancelExport {
     self.isExporting = NO;
     [self.exporter cancelExport];
@@ -1149,58 +1183,20 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
 #pragma mark - AliyunIExporterCallback
 
 - (void)exporterDidStart {
-    NSLog(@"TestLog, %@:%@", @"log_edit_start_time",
-          @([NSDate date].timeIntervalSince1970));
-    
     MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
     hud.mode = MBProgressHUDModeDeterminate;
     hud.removeFromSuperViewOnHide = YES;
-    [hud.button setTitle:NSLocalizedString(@"cancel_camera_import", nil)
-                forState:UIControlStateNormal];
-    [hud.button addTarget:self
-                   action:@selector(cancelExport)
-         forControlEvents:UIControlEventTouchUpInside];
     hud.label.text = NSLocalizedString(@"video_is_exporting_edit", nil);
+    
+    //开始合成禁用侧滑返回
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
 }
 
-- (void)exporterDidEnd:(NSString *)outputPath {
-    
-    NSLog(@"TestLog, %@:%@", @"log_edit_complete_time",@([NSDate date].timeIntervalSince1970));
-    
-    [[MBProgressHUD HUDForView:self.view] hideAnimated:YES];
-    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
-    if (self.isExporting) {
-        self.isExporting = NO;
-        
-        NSURL *outputPathURL = [NSURL fileURLWithPath:_config.outputPath];
-        AVAsset *as = [AVAsset assetWithURL:outputPathURL];
-        CGSize size = [as aliyunNaturalSize];
-        CGFloat videoDuration = [as aliyunVideoDuration];
-        float frameRate = [as aliyunFrameRate];
-        float bitRate = [as aliyunBitrate];
-        float estimatedKeyframeInterval = [as aliyunEstimatedKeyframeInterval];
-        
-        NSLog(@"TestLog, %@:%@", @"log_output_resolution",
-              NSStringFromCGSize(size));
-        NSLog(@"TestLog, %@:%@", @"log_video_duration", @(videoDuration));
-        NSLog(@"TestLog, %@:%@", @"log_frame_rate", @(frameRate));
-        NSLog(@"TestLog, %@:%@", @"log_bit_rate", @(bitRate));
-        NSLog(@"TestLog, %@:%@", @"log_i_frame_interval",@(estimatedKeyframeInterval));
-        
-        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
-        [library writeVideoAtPathToSavedPhotosAlbum:outputPathURL completionBlock:^(NSURL *assetURL, NSError *error) {
-             /* process assetURL */
-             if (!error) {
-                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString(@"video_exporting_finish_edit", nil) message:NSLocalizedString(@"video_local_save_edit",nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
-                 [alert show];
-             } else {
-                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"video_exporting_finish_fail_edit",nil) message:NSLocalizedString(@"video_exporting_check_autho",nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
-                 [alert show];
-             }
-         }];
-    }
-    [self play];
+- (void)exportProgress:(float)progress {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        MBProgressHUD *hub = [MBProgressHUD HUDForView:self.view];
+        hub.progress = progress;
+    });
 }
 
 - (void)exporterDidCancel {
@@ -1209,16 +1205,39 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
     [self resume];
 }
 
-- (void)exportProgress:(float)progress {
-    dispatch_async(dispatch_get_main_queue(), ^{
-        MBProgressHUD *hub = [MBProgressHUD HUDForView:self.view];
-        hub.progress = progress;
-    });
+- (void)exporterDidEnd:(NSString *)outputPath {
+    _exportFinished = YES;
+    
+    [[MBProgressHUD HUDForView:self.view] hideAnimated:YES];
+    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    
+    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
+    [library
+     writeVideoAtPathToSavedPhotosAlbum:[NSURL
+                                         fileURLWithPath:_config.outputPath]
+     completionBlock:^(NSURL *assetURL, NSError *error) {
+         /* process assetURL */
+         if (!error) {
+             NSLog(@"视频已保存到相册");
+             dispatch_async(dispatch_get_main_queue(), ^{
+                 [self jumpToCoverImage];
+             });
+             
+         } else {
+             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"video_exporting_finish_fail_edit",nil) message:NSLocalizedString(@"video_exporting_check_autho",nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
+             [alert show];
+         }
+     }];
+    
+    if (self.isExporting) {
+        self.isExporting = NO;
+    }
 }
 
 - (void)exportError:(int)errorCode {
     NSLog(@"exportError:%d,%x", errorCode, errorCode);
     [[MBProgressHUD HUDForView:self.view] hideAnimated:YES];
+    [self showExportError:errorCode];
     self.navigationController.interactivePopGestureRecognizer.enabled = YES;
     if (self.isBackground) {
         //        self.editorError = YES;
@@ -1227,6 +1246,40 @@ AliyunIExporterCallback, AliyunIPlayerCallback, AliyunMusicPickViewControllerDel
     }
 }
 
+/**
+ 非代理方法
+ @param errorCode 显示错误处理
+ */
+- (void)showExportError:(int)errorCode {
+    //正常合成失败
+    _exportFailed = YES;
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+        UIAlertView *alert = [[UIAlertView alloc]
+                              initWithTitle:[NSString stringWithFormat:@"合成失败 \n code:%d",
+                                             errorCode]
+                              message:nil
+                              delegate:nil
+                              cancelButtonTitle:@"确定"
+                              otherButtonTitles:nil, nil];
+        [alert show];
+    });
+}
+
+- (void)jumpToCoverImage {
+    AliyunCoverPickViewController *vc = [AliyunCoverPickViewController new];
+    vc.outputSize = _outputSize;
+    vc.videoPath = _config.outputPath;
+    vc.finishHandler = ^(UIImage *image) {
+        //        _image = image;
+        //        _coverImageView.image = image;
+        //        _backgroundView.image = image;
+        
+        NSLog(@"----coverImage == %@", image);
+    };
+    [self.navigationController pushViewController:vc animated:YES];
+}
+
 #pragma mark - AliyunTimelineView相关 -
 - (void)addAnimationFilterToTimeline:(AliyunEffectFilter *)animationFilter {
     AliyunTimelineFilterItem *filterItem = [[AliyunTimelineFilterItem alloc] init];

+ 2 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/VideoRecord/Controller/AliyunMagicCameraViewController.m

@@ -1053,10 +1053,12 @@
 
 - (void)listDidAppear {
 //    recorder.startPreview()
+    NSLog(@"----listDidAppear");
 }
 
 - (void)listDidDisappear {
 //    recorder.stopPreview()
+    NSLog(@"----listDidDisappear");
 }
 
 @end

binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_add@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_add@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_animation@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_animation@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_color@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_color@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_font@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_font@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_keybord@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_tab_caption_keybord@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_transition_icon@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_transition_icon@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_triangle@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/shortVideo_triangle@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_left@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_left@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_right@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/timeLine_cut_sweep_right@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover.@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover.@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_circle_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Nor.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Sel@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_cover_point_Sel@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_down_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_fade_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_left_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_lineswipe_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_lineswipe_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_null_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_right_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_scale_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_scale_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_shuffer_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_star_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Cover@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Cover@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Nor@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/transition_up_Nor@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/AlivcShortVideoImage.bundle/yuanhao8.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/LB@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/LB@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_auto@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_auto@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_close@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_close@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_dis@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_dis@3x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_on@2x.png


binární
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_flash_on@3x.png


+ 0 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoResource/QPSDK.bundle/camera_id@2x.png


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů