Discussion Forums  >  Plugins, Customizing, Source Code

Replies: 13    Views: 618

Bonzo
Apple Fan
Profile
Posts: 783
Reg: Jan 30, 2012
Basingstoke
13,530
06/15/20 01:44 PM (4 years ago)

Fix for AT53_Video_Player? still looking for JSON.h

Does anyone have a quick fix for the AT53_video_Player plugin. It was never made BT4 compliant and the code fails where it cant find the old Skool #import "JSON.h" Seen the odd fix posted for this issue but those fixes dont seem to fix this plugin for me? ** code ** // // ATRAIN53 BuzzTouch Video Player plug-in // [email protected] // // Created by ATRAIN53 8/1/12 // Copyright (c) 2012 skompdev. All rights reserved. // /* * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice which includes the * name(s) of the copyright holders. It must also retain this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of David Book, or buzztouch.com nor the names of its contributors * may be used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. */ //AT53 VIDEO //VER 1.6 9/2/2014 //Includes Overlay Option and new rotated views #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import "JSON.h" #import "BT_application.h" #import "BT_color.h" #import "BT_strings.h" #import "BT_viewUtilities.h" #import "BT_fileManager.h" #import "totecalc_appDelegate.h" #import "BT_item.h" #import "BT_debugger.h" #import "At53_video_player.h" @implementation At53_video_player @synthesize buttonPlay; @synthesize imageVideo, imageVideoLandscape; @synthesize imageVideoiPad, imageVideoiPadLandscape; @synthesize textDescription, textDescriptionLandscape; @synthesize textDescriptioniPad, textDescriptioniPadLandscape; @synthesize iPhoneOverlay, iPhoneOverlayURL, iPadOverlay, iPadOverlayURL; @synthesize quotePortraitView; @synthesize quoteLandscapeView; @synthesize backgroundView; //viewDidLoad -(void)viewDidLoad{ [BT_debugger showIt:self theMessage:@"viewDidLoad"]; [super viewDidLoad]; //set text for description...4 outlets using SAME JSON Value from CP [textDescription setText:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescription" defaultValue:@""]]; [textDescriptionLandscape setText:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescription" defaultValue:@""]]; [textDescriptioniPad setText:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescription" defaultValue:@""]]; [textDescriptioniPadLandscape setText:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescription" defaultValue:@""]]; //set descirption colord...4 outlets using SAME JSON value from CP if([[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescriptionColor" defaultValue:@""] length] > 3){ [textDescription setTextColor:[BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescriptionColor" defaultValue:@""]]]; [textDescriptionLandscape setTextColor:[BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescriptionColor" defaultValue:@""]]]; [textDescriptioniPad setTextColor:[BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescriptionColor" defaultValue:@""]]]; [textDescriptioniPadLandscape setTextColor:[BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoDescriptionColor" defaultValue:@""]]]; } //set video image if provided...4 outlets for each Device and Roation // if([[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoImageFileName" defaultValue:@""] length] > 3){ UIImage* imgiPhone = [UIImage imageNamed:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoImageFileName" defaultValue:@""]]; [imageVideo setImage:imgiPhone]; UIImage* imgiPhoneL = [UIImage imageNamed:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"VIDEOIMAGEIPHONELANDSCAPE" defaultValue:@""]]; [imageVideoLandscape setImage:imgiPhoneL]; UIImage* imgiPad = [UIImage imageNamed:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"VIDEOIMAGEIPAD" defaultValue:@""]]; [imageVideoiPad setImage:imgiPad]; UIImage* imgiPadL = [UIImage imageNamed:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"VIDEOIMAGEIPADLANDSCAPE" defaultValue:@""]]; [imageVideoiPadLandscape setImage:imgiPadL]; } //view will appear -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [BT_debugger showIt:self theMessage:@"viewWillAppear"]; //orientation [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; orientation = (UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation; { orientation = UIDeviceOrientationPortrait; } // Orientation logic if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:quoteLandscapeView atIndex:0]; } else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:quotePortraitView atIndex:0]; } } //Video Player button actions -(IBAction)playMovie:(id)sender{ [BT_debugger showIt:self theMessage:@"playMovie"]; NSString *videoFileName = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoFileName" defaultValue:@""]; NSString *videoURL = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoURL" defaultValue:@""]; NSURL *escapedURL = nil; BOOL bolFoundVideo = false; /* video file -------------------------------- a) No dataURL is provided in the screen data - use the localFileName configured in the screen data b) A dataURL is provided, check for local copy, download if not available */ if([videoURL length] < 3){ if([videoFileName length] > 3){ if([BT_fileManager doesFileExistInBundle:videoFileName]){ NSString *rootPath = [[NSBundle mainBundle] resourcePath]; NSString *filePath = [rootPath stringByAppendingPathComponent:videoFileName]; escapedURL = [NSURL fileURLWithPath:filePath isDirectory:NO]; bolFoundVideo = true; } } }else{ //merge possible varialbes in url... videoURL = [BT_strings mergeBTVariablesInString:videoURL]; escapedURL = [NSURL URLWithString:[videoURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; bolFoundVideo = true; } //new Play Audio option if user specifies audio file from Control panel NSString *isAudio = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"AT53AUDIOFILE" defaultValue:@"NO"]; if ([isAudio isEqualToString: @"YES"]){ [self playAudioFromFileOrURL:escapedURL]; }else{ //play video if found... if(bolFoundVideo){ [BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"playMovie: found file or URL, trigger play method using: %@", [escapedURL absoluteString]]]; [self playVideoFromFileOrURL:escapedURL]; } } } //play video method -(void)playVideoFromFileOrURL:(NSURL*)theFilePathOrURL{ [BT_debugger showIt:self theMessage:@"playVideoFromFileOrURL"]; // Initialize the movie player view controller with a video URL string MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:theFilePathOrURL]; //make sure to remove a possible "playback did finish" notification from last time (if we are playing movie again)... [[NSNotificationCenter defaultCenter] removeObserver:playerVC name:MPMoviePlayerPlaybackDidFinishNotification object:playerVC.moviePlayer]; //register an observer so we know when the player is done playing... [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieEndedMethod:) name:MPMoviePlayerPlaybackDidFinishNotification object:playerVC.moviePlayer]; //trasnition the movie player onto screen using built in "cross dissolve" effect... playerVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; //show the movie player view controller... [self presentViewController:playerVC animated:YES completion:nil]; [playerVC.moviePlayer prepareToPlay]; [playerVC.moviePlayer play]; } //new play Audio method instead of video -(void)playAudioFromFileOrURL:(NSURL*)theFilePathOrURL{ [BT_debugger showIt:self theMessage:@"playAudioFromFileOrURL"]; // Initialize the movie player view controller with a video URL string MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:theFilePathOrURL]; //make sure to remove a possible "playback did finish" notification from last time (if we are playing movie again)... [[NSNotificationCenter defaultCenter] removeObserver:playerVC name:MPMoviePlayerPlaybackDidFinishNotification object:playerVC.moviePlayer]; //register an observer so we know when the player is done playing... [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieEndedMethod:) name:MPMoviePlayerPlaybackDidFinishNotification object:playerVC.moviePlayer]; //trasnition the movie player onto screen using built in "cross dissolve" effect... playerVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; //show the movie player view controller... [self presentViewController:playerVC animated:YES completion:nil]; //begin mods for ver 1.6 custom overlays totecalc_appDelegate *appDelegate = (totecalc_appDelegate *) [[UIApplication sharedApplication] delegate]; //iPad Overlay if([appDelegate.rootDevice isIPad]){ //Get Overlay Image from BT Control Panel code UIImage *tmpImage = nil; iPadOverlay = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPAD" defaultValue:@""]; iPadOverlayURL = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPADURL" defaultValue:@""]; //decided whether to get the image from project or one from a URL. Default is from file if both possible. if([iPadOverlay length] > 0){ //is it in the project?... if([BT_fileManager doesFileExistInBundle:iPadOverlay]){ tmpImage = [UIImage imageNamed:iPadOverlay]; } }else{ if([iPadOverlayURL length] > 0){ NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:iPadOverlayURL]]; tmpImage = [[UIImage alloc] initWithData:imageData]; } } [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; // Then rotate the view and re-align it: [[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"]; UIColor *bgColor = [BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPADBACKGROUNDCOLOR" defaultValue:@"#000000"]]; [playerVC.moviePlayer.backgroundView setBackgroundColor:bgColor]; UIImage *overlayImage = tmpImage; backgroundView = [[UIImageView alloc] initWithImage:overlayImage]; [playerVC.moviePlayer.backgroundView addSubview:backgroundView]; [playerVC.moviePlayer prepareToPlay]; [playerVC.moviePlayer play]; }else { //iPhone overlay if not iPad UIImage *tmpImage = nil; iPhoneOverlay = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPHONE" defaultValue:@""]; iPhoneOverlayURL = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPHONEURL" defaultValue:@""]; //decided whether to get the image from project or one from a URL. Default is from file if both possible. if([iPhoneOverlay length] > 0){ //is it in the project?... if([BT_fileManager doesFileExistInBundle:iPhoneOverlay]){ tmpImage = [UIImage imageNamed:iPhoneOverlay]; } }else{ if([iPhoneOverlayURL length] > 0){ NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:iPhoneOverlayURL]]; tmpImage = [[UIImage alloc] initWithData:imageData]; } } //rotate the view [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; // Then rotate the view and re-align it: [[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"]; UIColor *bgColor = [BT_color getColorFromHexString:[BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"ATVIDEOOVERLAYIPHONEBACKGROUNDCOLOR" defaultValue:@"#000000"]]; [playerVC.moviePlayer.backgroundView setBackgroundColor:bgColor]; UIImage *overlayImage = tmpImage; backgroundView = [[UIImageView alloc] initWithImage:overlayImage]; [playerVC.moviePlayer.backgroundView addSubview:backgroundView]; [playerVC.moviePlayer prepareToPlay]; [playerVC.moviePlayer play]; } } //movie is done playing... - (void)movieEndedMethod:(NSNotification*)aNotification{ [BT_debugger showIt:self theMessage:@"movieEndedMethod"]; //reference the moviePlayer... MPMoviePlayerController *moviePlayer = [aNotification object]; //get rid of the "listener" ... [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; //get the reason why the movie playback finished... int finishReason = [[[aNotification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; //perform different action depending on the finished reason? if (finishReason == MPMovieFinishReasonPlaybackEnded) { //movie finished playing on it's own... [BT_debugger showIt:self theMessage:@"movieEndedMethod: finished naturally"]; [self dismissViewControllerAnimated:YES completion:nil]; //transition to another screen if configured... //appDelegate totecalc_appDelegate *appDelegate = (totecalc_appDelegate *)[[UIApplication sharedApplication] delegate]; //get possible itemId of the screen to load NSString *loadScreenItemId = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoEndedLoadScreenItemId" defaultValue:@""]; //get possible nickname of the screen to load NSString *loadScreenNickname = [BT_strings getJsonPropertyValue:self.screenData.jsonVars nameOfProperty:@"videoEndedLoadScreenNickname" defaultValue:@""]; BT_item *screenObjectToLoad = nil; if([loadScreenItemId length] > 1){ screenObjectToLoad = [appDelegate.rootApp getScreenDataByItemId:loadScreenItemId]; }else{ if([loadScreenNickname length] > 1){ screenObjectToLoad = [appDelegate.rootApp getScreenDataByNickname:loadScreenNickname]; }else{ if([self.screenData.jsonVars objectForKey:@"videoEndedLoadScreenObject"]){ screenObjectToLoad = [[BT_item alloc] init]; [screenObjectToLoad setItemId:[[self.screenData.jsonVars objectForKey:@"videoEndedLoadScreenObject"] objectForKey:@"itemId"]]; [screenObjectToLoad setItemNickname:[[self.screenData.jsonVars objectForKey:@"videoEndedLoadScreenObject"] objectForKey:@"itemNickname"]]; [screenObjectToLoad setItemType:[[self.screenData.jsonVars objectForKey:@"videoEndedLoadScreenObject"] objectForKey:@"itemType"]]; [screenObjectToLoad setJsonVars:[self.screenData.jsonVars objectForKey:@"videoEndedLoadScreenObject"]]; } } } //load next screen if it's not nil if(screenObjectToLoad != nil){ [self handleTapToLoadScreen:screenObjectToLoad theMenuItemData:self.screenData]; } }else if (finishReason == MPMovieFinishReasonUserExited) { //user used the built in "done" button on the player... [BT_debugger showIt:self theMessage:@"movieEndedMethod: user tapped the done button"]; [self dismissViewControllerAnimated:YES completion:nil]; }else if (finishReason == MPMovieFinishReasonPlaybackError) { //an error occured while the movie was playing... [BT_debugger showIt:self theMessage:@"movieEndedMethod: ended due to an error"]; [self dismissViewControllerAnimated:YES completion:nil]; } } -(void)didRotate:(NSNotification *)notification { UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation]; if (newOrientation != UIDeviceOrientationUnknown && newOrientation != UIDeviceOrientationFaceUp && newOrientation != UIDeviceOrientationFaceDown) { if (orientation != newOrientation) { //ORIENTATION HAS CHANGED // Do orientation logic if ( ((newOrientation == UIDeviceOrientationLandscapeLeft || newOrientation == UIDeviceOrientationLandscapeRight)) && ((orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)) ) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:quoteLandscapeView atIndex:0]; } else if ( ((newOrientation == UIDeviceOrientationPortrait || newOrientation == UIDeviceOrientationPortraitUpsideDown)) && ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) ) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:quotePortraitView atIndex:0]; } orientation = newOrientation; } } } - (void) clearCurrentView { if (quoteLandscapeView.superview) { [quoteLandscapeView removeFromSuperview]; } else if (quotePortraitView.superview) { [quotePortraitView removeFromSuperview]; } } @end
 
Cakebit
Code is Art
Profile
Posts: 501
Reg: Dec 15, 2010
In your local b...
16,510
like
06/15/20 08:47 PM (4 years ago)
Hi Bonzo, To remove the deprecated dependancies and update for 4.0, do the following: --- Delete the JSON.h import (on line 43) Delete the old totecalc_appDelegate.h import reference (around line 48/49) Delete all lines that reference "*appDelegate". (Lines 255 & 374) --- Removing these references should bring the plugin up to 4.0 compiler compatibility and will remove the errors causing it to fail. Let me know if you hit more issues after it compiles- I haven't used this plugin before, so I don't have any sample data to test against.
 
gatorcade
Code is Art
Profile
Posts: 35
Reg: Jul 17, 2011
Gainesville
1,150
like
06/16/20 07:06 AM (4 years ago)
Thank you.
 
Blue
Apple Fan
Profile
Posts: 24
Reg: Jun 20, 2011
Gainesville, Fl...
4,990
like
06/16/20 07:40 AM (4 years ago)
Hello, The app freezes up on the simulator, and get this warning: << Thread 1: Exception: "MPMoviePlayerViewController is no longer available. Use AVPlayerViewController in AVKit." >> #import <UIKit/UIKit.h> int main(int argc, char *argv[]){ //return manualdelcuatro_appDelegate as UIApplicationMain... @autoreleasepool{ int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"manualdelcuatro_appDelegate"); return retVal; } } Thanks
 
Cakebit
Code is Art
Profile
Posts: 501
Reg: Dec 15, 2010
In your local b...
16,510
like
06/16/20 07:43 AM (4 years ago)
Hi Blue! What version of Xcode are you using to compile your project? (I tested in Xcode 10.1). What is the minimum compilation target you're compiling for? (By default, Buzztouch projects compile for iOS 8.0 and up). When do you receive the error? Is it during build or at runtime (ie, screen load). Thanks!!
 
Blue
Apple Fan
Profile
Posts: 24
Reg: Jun 20, 2011
Gainesville, Fl...
4,990
like
06/16/20 07:50 AM (4 years ago)
I am using 11.5. The error happens when I hit play on the app
 
Cakebit
Code is Art
Profile
Posts: 501
Reg: Dec 15, 2010
In your local b...
16,510
like
06/16/20 08:22 AM (4 years ago)
Thanks! Here's a general example of how to upgrade the plugin to use AVPlayerViewController. In At53_video_player.h add these import statements: #import <AVFoundation/AVFoundation.h> #import <AVKit/AVKit.h> Then in At53_video_player.m replace the playVideoFromFileOrURL method with this code-block: //play video method -(void)playVideoFromFileOrURL:(NSURL*)theFilePathOrURL{ [BT_debugger showIt:self theMessage:@"playVideoFromFileOrURL"]; // Initialize the movie player view controller with a video URL string AVPlayer *player = [AVPlayer playerWithURL:theFilePathOrURL]; // create a player view controller AVPlayerViewController *controller = [[AVPlayerViewController alloc] init]; controller.player = player; [player play]; controller.modalPresentationStyle = UIModalPresentationOverFullScreen; [self presentViewController:controller animated:YES completion:nil]; } ---------------------------------------- I tested with a remote video file and the plugin will play it back in a full-screen view. Please note that this doesn't patch support for audio file playback in the plugin or add a fallback of "MPMoviePlayerViewController" for older iOS versions.
 
Blue
Apple Fan
Profile
Posts: 24
Reg: Jun 20, 2011
Gainesville, Fl...
4,990
like
06/16/20 09:52 AM (4 years ago)
It works. Thank You So Much. :)
 
Bonzo
Apple Fan
Profile
Posts: 783
Reg: Jan 30, 2012
Basingstoke
13,530
like
06/16/20 01:51 PM (4 years ago)
Not tested yet but glad others have it working. Can we change the core code on the server so this comes as part of the core download? Basically Buzztouch take ownership of the plugin? Seems an easy fix to have one more plugin available to all? Thanks
 
Cakebit
Code is Art
Profile
Posts: 501
Reg: Dec 15, 2010
In your local b...
16,510
like
06/20/20 10:45 AM (4 years ago)
Hi Bonzo! I haven't used this plugin much to know the full extent of what it does... can you help me understand how you use it in your apps? I'd like to get the current plugins all up to date before adopting any new ones... but when the time comes for us to bring on any existing plugins I can reach out to the plugin author to make sure they're okay with us maintaining it. Perhaps for the time being we could release an updated version, and offer the current version as a download option in the plugin notes... hmm.
 
Bonzo
Apple Fan
Profile
Posts: 783
Reg: Jan 30, 2012
Basingstoke
13,530
like
06/20/20 11:29 AM (4 years ago)
It's just a plug in that allows you to play a video in your app. And mp4 or URL
 
Gledy
Aspiring developer
Profile
Posts: 109
Reg: Feb 25, 2013
Fleet, UK
3,240
like
09/17/20 06:13 AM (4 years ago)
Hi, same sort of question as it's a JSON.h missing problem. The Checklist plugin, I've searched in the forums old and new and have tried the suggested deleting the #import statements etc but it's caused more errors and I'm stuck with what to do. Is there any chance that the checklist plugin will be updated to work with buzztouch 4? As a temporary work around I've made a checklist in html which works fine but I can't get local storage to work so it defeats the work around. Any help or glimmer of hope that the checklist plugin will work again will be very appreciated.
 
Bonzo
Apple Fan
Profile
Posts: 783
Reg: Jan 30, 2012
Basingstoke
13,530
like
05/16/22 07:20 AM (2 years ago)
This seems to have stopped working all together now :( too many 'explicity marked deprecated' warnings can buzztouch get this one going again please cakebit?
 
Bonzo
Apple Fan
Profile
Posts: 783
Reg: Jan 30, 2012
Basingstoke
13,530
like
05/16/22 07:25 AM (2 years ago)
ignore me. it only fails when trying tostream the default mp3. when i input an mp4 stored on device its OK
 

Login + Screen Name Required to Post

pointerLogin to participate so you can start earning points. Once you're logged in (and have a screen name entered in your profile), you can subscribe to topics, follow users, and start learning how to make apps like the pros.