Я использую класс VLCMediaPlayer из библиотеки MobileVLCKit для создания приложения для потоковой передачи звука. Моя проблема в том, что когда происходит ошибка (например, неправильный URL-адрес потока), он автоматически предупреждает о своем собственном сообщении об ошибке. В моем случае я хотел бы отключить это предупреждающее сообщение и отобразить свое собственное.
Как отключить AlertView при ошибке VLCMediaPlayer?
Ответы (3)
Нет необходимости удалять эту опцию из исходного кода! Просто передайте опцию игрока следующим образом:
NSArray *options = @[@"--extraintf="];
VLCMediaPlayer *player = [[VLCMediaPlayer alloc] initWithOptions:options];
person
NSLeader
schedule
26.04.2015
Большое спасибо!! Может быть, вы можете помочь еще раз :) Как я могу поймать ошибку с делегатом, если она произойдет? Я попробовал
-(void)mediaPlayerStateChanged:(NSNotification *)aNotification
, но не смог получить ошибку... Спасибо.
- person oleynikd; 29.12.2015
Я хочу угостить тебя пивом ????
- person MrBr; 07.04.2017
с последним (MobileVLCKit-prod 2.7.9) MobileVLCKit вы можете реализовать VLCCustomDialogRendererProtocol на каком-то объекте после этого
...
@property (nonatomic, strong) VLCDialogProvider * dialogProvider;
....
//dump information
VLCLibrary * lib=[VLCLibrary sharedLibrary];
//configure dialog provider
self.dialogProvider=[[VLCDialogProvider alloc] initWithLibrary:lib customUI:YES];
self.dialogProvider.customRenderer=self;
...
ваша реализация Dialog Provider может отображать любой диалог, который ей нравится, или вообще ничего. Пример «просто записывать, но ничего не показывать» версии методов делегата
#pragma mark - VLCCustomDialogRendererProtocol methods
/**
* called when VLC wants to show an error
* \param the dialog title
* \param the error message
*/
- (void)showErrorWithTitle:(NSString * _Nonnull)error
message:(NSString * _Nonnull)message {
CLogERROR(LOGDOMAIN_MINIPLAYER,@"VLC Error:%@:%@",error,message);
}
/**
* called when user logs in to something
* If VLC includes a keychain module for your platform, a user can store stuff
* \param login title
* \param an explaining message
* \param a default username within context
* \param indicator whether storing is even a possibility
* \param reference you need to send the results to
*/
- (void)showLoginWithTitle:(NSString * _Nonnull)title
message:(NSString * _Nonnull)message
defaultUsername:(NSString * _Nullable)username
askingForStorage:(BOOL)askingForStorage
withReference:(NSValue * _Nonnull)reference {
CLogWARN(LOGDOMAIN_MINIPLAYER,@"VLC login request:title:%@,message:%@,username:%@ reference:%@",title,message,username,reference);
//we should respond with postUsername... but we can't...and we are not supposed to so anyway
}
/**
* called when VLC needs the user to decide something
* \param the dialog title
* \param an explaining message text
* \param a question type
* \param cancel button text
* \param action 1 text
* \param action 2 text
* \param reference you need to send the action to
*/
- (void)showQuestionWithTitle:(NSString * _Nonnull)title
message:(NSString * _Nonnull)message
type:(VLCDialogQuestionType)questionType
cancelString:(NSString * _Nullable)cancelString
action1String:(NSString * _Nullable)action1String
action2String:(NSString * _Nullable)action2String
withReference:(NSValue * _Nonnull)reference {
NSString * questionTypeString;
switch (questionType) {
case VLCDialogQuestionNormal:
questionTypeString=@"VLCDialogQuestionNormal";
break;
case VLCDialogQuestionWarning:
questionTypeString=@"VLCDialogQuestionWarning";
break;
case VLCDialogQuestionCritical:
questionTypeString=@"VLCDialogQuestionCritical";
break;
}
CLogWARN(LOGDOMAIN_MINIPLAYER,@"VLC Question:Type:%@ Title:%@ Message:%@, cancel:%@,action1:%@,action2:%@,reference:%@",
questionTypeString, title,message,cancelString,action1String,action2String,reference);
//just cancel
[self.dialogProvider postAction:3 forDialogReference:reference];
}
/**
* called when VLC wants to show some progress
* \param the dialog title
* \param an explaining message
* \param indicator whether progress indeterminate
* \param initial progress position
* \param optional string for cancel button if operation is cancellable
* \param reference VLC will include in updates
*/
- (void)showProgressWithTitle:(NSString * _Nonnull)title
message:(NSString * _Nonnull)message
isIndeterminate:(BOOL)isIndeterminate
position:(float)position
cancelString:(NSString * _Nullable)cancelString
withReference:(NSValue * _Nonnull)reference {
CLogWARN(LOGDOMAIN_MINIPLAYER,@"VLC Progress:Title:%@ Message:%@, cancel:%@, position:%f,reference %@",title,message,cancelString,position,reference);
//just try to cancel
[self.dialogProvider dismissDialogWithReference:reference];
}
/** called when VLC wants to update an existing progress dialog
* \param reference to the existing progress dialog
* \param updated message
* \param current position
*/
- (void)updateProgressWithReference:(NSValue * _Nonnull)reference
message:(NSString * _Nullable)message
postion:(float)position {
CLogWARN(LOGDOMAIN_MINIPLAYER,@"VLC Progress update:Message:%@, position:%f,reference:%@",message,position,reference);
//just try to cancel
[self.dialogProvider dismissDialogWithReference:reference];
}
/** VLC decided to destroy a dialog
* \param reference to the dialog to destroy
*/
- (void)cancelDialogWithReference:(NSValue * _Nonnull)reference {
CLogWARN(LOGDOMAIN_MINIPLAYER,@"VLC cancel dialog,referecne %@... ok",reference);
}
person
dkzm
schedule
02.10.2016
Я решил это, перейдя к VLCLibrary.m в исходном коде VLC и удалив эту строку:
@"--extraintf=ios_dialog_provider"];
из вызова _defaultOptions.
удалите его, снова скомпилируйте библиотеку, и вы больше не увидите никаких сообщений.
person
shaish
schedule
04.10.2014