Reputation: 53
Im currently developing an swf 3D Player for the web with Flex SDK. My goal is to create an air application that lets the user load models and export them to .swf 3D player to make those 3d models viewable over the web. Im using FlashDevelop.
My original goal was to include the mxmlc compiler and the whole flex sdk inside my air apps bin directory and run those with airs native extensions with arguments(command line). The problem is that flex sdk is about 800Mb size and again required JRE to run mxmlc.
Is there a way to include a minimalistic compiler inside my air application which doesn't require 800mb+ ? I know I just could output a general swf that first loads a config file with paths to the model and textures and then loads those, but I want the models and textures to be included inside the swf to make those safe from being easily downloaded. Any suggestions?
Upvotes: 1
Views: 220
Reputation: 8033
This doesn't answer the specific question asked, but it's too long for a comment.
Your problem is not how to include the flex compiler with AIR, it's how to stop the models and textures in the SWF from being downloaded easily.
First of all, there's no 100% secure answer; the SWF format is easily decompiled (so embedding 1 file per SWF is out), and if determined enough, someone can look at the memory of your application to find what they need; this is all about stopping the easy copy.
Off the top of my head, these are some of the ways you can do it, assuming that your end goal is an online 3D model viewer:
1) Have your own format
While technically not impossible, it is pretty awkward; basically you write your own format for storing and displaying models (essentially what most 3D modelling software does). This means that if someone gets hold of a model file, it's useless to them unless they write a parser (naturally, you'll need to protect your display SWF). If the purpose of your viewer is for other users to buy the model, then they'll need it in a format that they can use, so your workflow goes something like this:
Create model in common format -> convert to custom format for display in your player -> user browses and hits "buy" -> they download the common format file
2) Load the 3D model from your site
The simplest option; just load the model directly from your server, similar to how you'd load an image. To stop people from downloading the file directly, store them above the htdocs
folder, and access them through a local URI in flash. So your server file system looks something like this:
Thus only your SWF can access the models (though technically, as it's a file download, it might be in the browser cache - you should test it). To actually put the models into the models
directory, you'll either need FTP access to the server, or need to create a simple script (using PHP or the like) to upload them.
3) Stream the assets to your SWF
As already mentioned, you can use something like ColdFusion to stream the assets directly to your SWF on demand. I've no experience in ColdFusion though, so I can't really say how this would work, but it shouldn't be too hard
4) DB connection
Assuming your models are stored as text blobs in a DB (e.g. MySQL or MongoDB), you can either connect directly with the SWF or use PHP and AMFPHP to connect to the db and stream the model that way.
You'll need to implement some security to make sure that people can't spoof your server calls, but the actual code to connect and return the value isn't too hard. As an added bonus, you're not tied to the SWF format, and can implement JS displayers etc if needed.
Upvotes: 1