提交 0e82e320 authored 作者: kongdywang's avatar kongdywang

1. fix fileId preDownload not callback when error

2. fix fileId preDownload failed with sign
上级 c25c71fa
...@@ -95,8 +95,11 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown ...@@ -95,8 +95,11 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown
sendSuccessEvent(CommonUtil.getParams(FTXEvent.EVENT_PREDOWNLOAD_ON_COMPLETE, bundle)); sendSuccessEvent(CommonUtil.getParams(FTXEvent.EVENT_PREDOWNLOAD_ON_COMPLETE, bundle));
} }
private void onErrorEvent(int taskId, String url, int code, String msg) { private void onErrorEvent(long tmpTaskId, int taskId, String url, int code, String msg) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
if (tmpTaskId >= 0) {
bundle.putLong("tmpTaskId", tmpTaskId);
}
bundle.putInt("taskId", taskId); bundle.putInt("taskId", taskId);
bundle.putInt("code", code); bundle.putInt("code", code);
bundle.putString("url", url); bundle.putString("url", url);
...@@ -293,7 +296,7 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown ...@@ -293,7 +296,7 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown
@Override @Override
public void onError(int taskID, String url, int code, String msg) { public void onError(int taskID, String url, int code, String msg) {
onErrorEvent(taskID, url, code, msg); onErrorEvent(-1, taskID, url, code, msg);
} }
}); });
IntMsg res = new IntMsg(); IntMsg res = new IntMsg();
...@@ -337,7 +340,7 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown ...@@ -337,7 +340,7 @@ public class FTXDownloadManager implements ITXVodDownloadListener, TXFlutterDown
@Override @Override
public void onError(int taskID, String url, int code, String msg) { public void onError(int taskID, String url, int code, String msg) {
onErrorEvent(taskID, url, code, msg); onErrorEvent(tmpTaskId, taskID, url, code, msg);
} }
}); });
if (isUrlPreload && tmpTaskId >= 0) { if (isUrlPreload && tmpTaskId >= 0) {
......
...@@ -9,11 +9,12 @@ ...@@ -9,11 +9,12 @@
#import "FTXEvent.h" #import "FTXEvent.h"
#import "CommonUtil.h" #import "CommonUtil.h"
#import "FtxMessages.h" #import "FtxMessages.h"
#import "PredownloadFileHelperDelegate.h"
@interface FTXDownloadManager ()<FlutterStreamHandler, TXVodPreloadManagerDelegate, TXVodDownloadDelegate, TXFlutterDownloadApi> @interface FTXDownloadManager ()<FlutterStreamHandler, TXVodPreloadManagerDelegate, TXVodDownloadDelegate, TXFlutterDownloadApi>
@property (nonatomic, strong) dispatch_queue_t mPreloadQueue; @property (nonatomic, strong) dispatch_queue_t mPreloadQueue;
@property (atomic, strong) NSMutableDictionary *mPreloadFileDic; @property (atomic, strong) NSMutableArray *delegateArray;
@end @end
...@@ -36,7 +37,7 @@ ...@@ -36,7 +37,7 @@
NSString *path = [NSString stringWithFormat:@"%@/videoCache",cachesDir]; NSString *path = [NSString stringWithFormat:@"%@/videoCache",cachesDir];
[[TXVodDownloadManager shareInstance] setDownloadPath:path]; [[TXVodDownloadManager shareInstance] setDownloadPath:path];
self.mPreloadQueue = dispatch_queue_create(@"cloud.tencent.com.preload", NULL); self.mPreloadQueue = dispatch_queue_create(@"cloud.tencent.com.preload", NULL);
self.mPreloadFileDic = @{}.mutableCopy; self.delegateArray = [[NSMutableArray alloc] init];
} }
return self; return self;
} }
...@@ -60,15 +61,31 @@ ...@@ -60,15 +61,31 @@
[_eventSink success:[FTXDownloadManager getParamsWithEvent:EVENT_PREDOWNLOAD_ON_START withParams:dict]]; [_eventSink success:[FTXDownloadManager getParamsWithEvent:EVENT_PREDOWNLOAD_ON_START withParams:dict]];
} }
- (void)addPreloadFileStartTask:(NSString*)fileId tmpTaskId:(long)tmpTaskId { - (void)onErrorEvent:(long)tmpTaskId taskId:(int)taskID url:(NSString *)url error:(NSError *)error {
@synchronized (self.mPreloadFileDic) { NSMutableDictionary *dict = [NSMutableDictionary dictionary];
self.mPreloadFileDic[fileId] = @(tmpTaskId); if (tmpTaskId >= 0) {
[dict setObject:@(tmpTaskId) forKey:@"tmpTaskId"];
}
[dict setObject:@(taskID) forKey:@"taskId"];
[dict setObject:url forKey:@"url"];
[dict setObject:@(error.code) forKey:@"code"];
if (nil != error.userInfo.description) {
[dict setObject:error.userInfo.description forKey:@"msg"];
}
[_eventSink success:[FTXDownloadManager getParamsWithEvent:EVENT_PREDOWNLOAD_ON_ERROR withParams:dict]];
}
- (void)removePreDelegate:(PredownloadFileHelperDelegate*)delegate {
@synchronized (self.delegateArray) {
[self.delegateArray removeObject:delegate];
} }
} }
- (void)removePreloadFileStartTask:(NSString*)fileId { - (void)addPreDelegate:(PredownloadFileHelperDelegate*)delegate {
@synchronized (self.mPreloadFileDic) { @synchronized (self.delegateArray) {
[self.mPreloadFileDic removeObjectForKey:fileId]; if (![self.delegateArray containsObject:delegate]) {
[self.delegateArray addObject:delegate];
}
} }
} }
...@@ -107,16 +124,6 @@ ...@@ -107,16 +124,6 @@
#pragma mark - TXVodPreloadManager delegate #pragma mark - TXVodPreloadManager delegate
- (void)onStart:(int)taskID fileId:(NSString *)fileId url:(NSString *)url param:(NSDictionary *)param {
if (self.mPreloadFileDic[fileId] && [self.mPreloadFileDic[fileId] isKindOfClass:[NSNumber class]]) {
long tmpTaskId = [self.mPreloadFileDic[fileId] longValue];
if (tmpTaskId >= 0) {
[self onStartEvent:tmpTaskId taskID:taskID fileId:fileId url:url param:param];
[self removePreloadFileStartTask:fileId];
}
}
}
- (void)onComplete:(int)taskID url:(NSString *)url - (void)onComplete:(int)taskID url:(NSString *)url
{ {
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSMutableDictionary *dict = [NSMutableDictionary dictionary];
...@@ -127,14 +134,7 @@ ...@@ -127,14 +134,7 @@
- (void)onError:(int)taskID url:(NSString *)url error:(NSError *)error - (void)onError:(int)taskID url:(NSString *)url error:(NSError *)error
{ {
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [self onErrorEvent:-1 taskId:taskID url:url error:error];
[dict setObject:@(taskID) forKey:@"taskId"];
[dict setObject:url forKey:@"url"];
[dict setObject:@(error.code) forKey:@"code"];
if (nil != error.userInfo.description) {
[dict setObject:error.userInfo.description forKey:@"msg"];
}
[_eventSink success:[FTXDownloadManager getParamsWithEvent:EVENT_PREDOWNLOAD_ON_ERROR withParams:dict]];
} }
#pragma mark - TXDownloadManager #pragma mark - TXDownloadManager
...@@ -354,16 +354,23 @@ ...@@ -354,16 +354,23 @@
params.appId = (msg.appId != nil && [msg.appId isKindOfClass:[NSNumber class]]) ? [msg.appId intValue] : 0; params.appId = (msg.appId != nil && [msg.appId isKindOfClass:[NSNumber class]]) ? [msg.appId intValue] : 0;
params.fileId = fileId; params.fileId = fileId;
params.sign = (msg.pSign != nil && [msg.pSign isKindOfClass:[NSString class]]) ? msg.pSign : @""; params.sign = (msg.pSign != nil && [msg.pSign isKindOfClass:[NSString class]]) ? msg.pSign : @"";
[self addPreloadFileStartTask:fileId tmpTaskId:tmpTaskId]; __block PredownloadFileHelperDelegate *delegate = [[PredownloadFileHelperDelegate alloc] initWithBlock:tmpTaskId start:^(long tmpTaskId, int taskID, NSString * _Nonnull fileId, NSString * _Nonnull url, NSDictionary * _Nonnull param) {
[self onStartEvent:tmpTaskId taskID:taskID fileId:fileId url:url param:param];
} complete:^(int taskID, NSString * _Nonnull url) {
[self onComplete:taskID url:url];
[self removePreDelegate:delegate];
} error:^(long tmpTaskId, int taskID, NSString * _Nonnull url, NSError * _Nonnull error) {
[self onErrorEvent:-1 taskId:taskID url:url error:error];
[self removePreDelegate:delegate];
}];
// retain delegate
[self addPreDelegate:delegate];
int taskID = [[TXVodPreloadManager sharedManager] startPreloadWithModel:params int taskID = [[TXVodPreloadManager sharedManager] startPreloadWithModel:params
preloadSize:preloadSizeMB preloadSize:preloadSizeMB
preferredResolution:preferredResolution preferredResolution:preferredResolution
delegate:self]; delegate:delegate];
if (isUrlPreload) { if (isUrlPreload && tmpTaskId >= 0) {
if (tmpTaskId >= 0) {
[self onStartEvent:tmpTaskId taskID:taskID fileId:fileId url:msg.playUrl param:@{}]; [self onStartEvent:tmpTaskId taskID:taskID fileId:fileId url:msg.playUrl param:@{}];
[self removePreloadFileStartTask:fileId];
}
} }
}); });
} }
......
// Copyright (c) 2022 Tencent. All rights reserved.
#ifndef SUPERPLAYER_FLUTTER_IOS_CLASSES_HELPER_PREDOWNLOADFILEHELPERDELEGATE_H_
#define SUPERPLAYER_FLUTTER_IOS_CLASSES_HELPER_PREDOWNLOADFILEHELPERDELEGATE_H_
#import <Foundation/Foundation.h>
#import <TXLiteAVSDK_Professional/TXVodPreloadManager.h>
NS_ASSUME_NONNULL_BEGIN
typedef void (^FTXPreDownloadOnStart)(long tmpTaskId, int taskID, NSString* fileId, NSString* url, NSDictionary* param);
typedef void (^FTXPreDownloadOnCompelete)(int taskID, NSString* url);
typedef void (^FTXPreDownloadOnError)(long tmpTaskId, int taskID, NSString* url, NSError* error);
@interface PredownloadFileHelperDelegate : NSObject<TXVodPreloadManagerDelegate>
- (instancetype)initWithBlock:(long)tmpTaskId start:(FTXPreDownloadOnStart)onStart
complete:(FTXPreDownloadOnCompelete)onComplete
error:(FTXPreDownloadOnError)onError;
@end
NS_ASSUME_NONNULL_END
#endif // SUPERPLAYER_FLUTTER_IOS_CLASSES_HELPER_PREDOWNLOADFILEHELPERDELEGATE_H_
// Copyright (c) 2022 Tencent. All rights reserved.
#import "PredownloadFileHelperDelegate.h"
@interface PredownloadFileHelperDelegate()
@property (nonatomic, assign)long tmpTaskId;
@property (nonatomic, strong)FTXPreDownloadOnStart onStartBlock;
@property (nonatomic, strong)FTXPreDownloadOnCompelete onCompleteBlock;
@property (nonatomic, strong)FTXPreDownloadOnError onErrorBlock;
@end
@implementation PredownloadFileHelperDelegate
- (instancetype)initWithBlock:(long)tmpTaskId start:(FTXPreDownloadOnStart)onStart complete:(FTXPreDownloadOnCompelete)onComplete error:(FTXPreDownloadOnError)onError {
self = [super init];
if (self) {
self.tmpTaskId = tmpTaskId;
self.onStartBlock = onStart;
self.onCompleteBlock = onComplete;
self.onErrorBlock = onError;
}
return self;
}
- (void)onStart:(int)taskID fileId:(NSString *)fileId url:(NSString *)url param:(NSDictionary *)param {
if (self.onStartBlock) {
self.onStartBlock(self.tmpTaskId, taskID, fileId, url, param);
}
}
- (void)onComplete:(int)taskID url:(NSString *)url {
if (self.onCompleteBlock) {
self.onCompleteBlock(taskID, url);
}
}
- (void)onError:(int)taskID url:(NSString *)url error:(NSError *)error {
if (self.onErrorBlock) {
self.onErrorBlock(self.tmpTaskId, taskID, url, error);
}
}
@end
...@@ -73,7 +73,8 @@ class TXVodDownloadController { ...@@ -73,7 +73,8 @@ class TXVodDownloadController {
return taskId; return taskId;
} }
Future<void> startPreload(TXPlayInfoParams txPlayInfoParams, Future<void> startPreload(
TXPlayInfoParams txPlayInfoParams,
final int preloadSizeMB, final int preloadSizeMB,
final int preferredResolution, { final int preferredResolution, {
FTXPredownlodOnCompleteListener? onCompleteListener, FTXPredownlodOnCompleteListener? onCompleteListener,
...@@ -86,6 +87,7 @@ class TXVodDownloadController { ...@@ -86,6 +87,7 @@ class TXVodDownloadController {
..playUrl = txPlayInfoParams.url ..playUrl = txPlayInfoParams.url
..fileId = txPlayInfoParams.fileId ..fileId = txPlayInfoParams.fileId
..appId = txPlayInfoParams.appId ..appId = txPlayInfoParams.appId
..pSign = txPlayInfoParams.psign
..preloadSizeMB = preloadSizeMB ..preloadSizeMB = preloadSizeMB
..preferredResolution = preferredResolution); ..preferredResolution = preferredResolution);
_fileIdBeforeStartListeners[tmpPreloadTaskId] = _PreloadListener() _fileIdBeforeStartListeners[tmpPreloadTaskId] = _PreloadListener()
...@@ -252,13 +254,19 @@ class TXVodDownloadController { ...@@ -252,13 +254,19 @@ class TXVodDownloadController {
_preloadListeners.remove(taskId); _preloadListeners.remove(taskId);
break; break;
case TXVodPlayEvent.EVENT_PREDOWNLOAD_ON_ERROR: case TXVodPlayEvent.EVENT_PREDOWNLOAD_ON_ERROR:
int tmpTaskId = map['tmpTaskId'] ?? -1;
int taskId = map['taskId']; int taskId = map['taskId'];
String url = map['url']; String url = map['url'];
int code = map['code'] ?? 0; int code = map['code'] ?? 0;
String msg = map['msg'] ?? ''; String msg = map['msg'] ?? '';
LogUtils.d(TAG, 'receive EVENT_PREDOWNLOAD_ON_ERROR, taskID=$taskId ,url=$url, code=$code , msg=$msg'); LogUtils.d(TAG, 'receive EVENT_PREDOWNLOAD_ON_ERROR, taskID=$taskId ,url=$url, code=$code , msg=$msg');
if (tmpTaskId >= 0) {
_fileIdBeforeStartListeners[tmpTaskId]!.onErrorListener?.call(taskId, url, code, msg);
_fileIdBeforeStartListeners.remove(tmpTaskId);
} else {
_preloadListeners[taskId]?.onErrorListener?.call(taskId, url, code, msg); _preloadListeners[taskId]?.onErrorListener?.call(taskId, url, code, msg);
_preloadListeners.remove(taskId); _preloadListeners.remove(taskId);
}
break; break;
case TXVodPlayEvent.EVENT_PREDOWNLOAD_ON_START: case TXVodPlayEvent.EVENT_PREDOWNLOAD_ON_START:
int tmpTaskId = map['tmpTaskId']; int tmpTaskId = map['tmpTaskId'];
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论