I have mp4s in different h264 profiles so that older devices can play the lower profiles. The problem with this is that there is no current way to tell the player which profile each video is.
It would be great to be able to do something like this.
levels: [
{ file: "videos/high.mp4", profile: "high" },
{ file: "videos/main.mp4", profile: "main" },
{ file: "videos/baseline.mp4", profile: "baseline_3.0" }
]This way, the JW player can know that is it on an iPhone 3G, and therefore play the Baseline video, yet still play the High video on the iPad 2. Versioning of the profile may also be something that is needed as older devices do not play the latest profiles.
We have looked into such an option, but I don't think this would be very useful. Players have no way to query devices to ask which profiles they play. Additionally, as you pointed out, there's many "ifs" and "buts" with device profile support.
It's better to stick to certain profiles for certain resolutions. This is our rule of thumb:
*) Everything under 360p should be Baseline.
*) Everything from 360p up to and including 720p should be Main.
*) Everything that's larger than 720p (1080p) should be High.
At 720p, the difference between Main and High is marginal. Only at large resolutions, the 8x8dct feature of High really leads to considerable filesize reductions.