Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MP4 H.264 videos with High 10 Profile (Hi10P, 110) or High 4:4:4 Predictive Profile (Hi444PP, 244) doesn't play properly #139

Open
itlancer opened this issue Nov 2, 2019 · 0 comments

Comments

@itlancer
Copy link

@itlancer itlancer commented Nov 2, 2019

Problem Description

MP4 H.264 videos with High 10 Profile (Hi10P, 110) or High 4:4:4 Predictive Profile (Hi444PP, 244) doesn't play properly (or doesn't at all) with AIR.
https://en.wikipedia.org/wiki/Advanced_Video_Coding#Profiles
Tested with multiple devices across many OSes and its versions and firmwares: Windows, macOS, Android, iOS.
It has been tested with multiple AIR SDK versions to latests AIR 32.0.0.144 beta and AIR 33.0.2.288. Tried with simple Video object, StageVideo and VideoTexture.
Same problem in all cases with any H.264 (MP4) videos with specified profiles. May be same problems exists with other High profiles too.
Many others video players and some browsers correct playback these videos on the same devices.

Changing renderMode doesn't help.
NetStream::useHardwareDecoder = true doesn't help.
Changing disableMediaCodec doesn't help - with Android it cause black screen instead of video with audio wheezing at start.
Changing hardwareAccelerated in Android application manifest doesn't help.
Changing containsVideo in application manifest doesn't help.

Related issues (not the same):
#89
#80
#88

Steps to Reproduce

Launch code below with any MP4 H.264 video with High 10 Profile (Hi10P, 110) or High 4:4:4 Predictive Profile (Hi444PP, 244). Application example with sources and example of video with High 10 Profile (Hi10P, 110) attached.
video_high_profile_bug.zip

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.media.StageVideo;
	import flash.geom.Rectangle;
	import flash.events.NetStatusEvent;
	import flash.media.Video;
	
	public class VideoHighProfileBug extends Sprite {
		private var nc:NetConnection;
		private var ns:NetStream;
		
		public function VideoHighProfileBug() {
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			nc = new NetConnection();
			nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			nc.connect(null);
		}
		
		private function netStatusHandler(event:NetStatusEvent):void {
			trace(event.info.code);
			switch (event.info.code){
				case "NetConnection.Connect.Success":
					ns = new NetStream(nc);
					ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
					ns.client = {onMetaData:getMeta, onPlayStatus:onPlayStatus};
					var sv:StageVideo = stage.stageVideos[0];
					sv.viewPort = new Rectangle(0, 0, 1280, 800);
					sv.attachNetStream(ns);
					ns.play("high10Profile.mp4");
					break;
				case "NetStream.Play.StreamNotFound":
					trace("Stream not found");
					break;
			}
		}
		
		private function getMeta(mdata:Object):void {
			trace("avc profile:", mdata["avcprofile"]);//Trace MP4 H.264 video AVC profile
			
			//MP4 H.264 videos with High 10 Profile (Hi10P, 110) or High 4:4:4 Predictive Profile (Hi444PP, 244) doesn't play correctly
			if (mdata["avcprofile"] == 110 || mdata["avcprofile"] == 244) trace("!!! incorrect video playback !!!");
		}
		
		//Seek video to begin after complete
		private function onPlayStatus(infoObject:Object):void {
			ns.seek(0);
		}
	}
}

Actual Result:
Video doesn't play at all or play as white/black screen or play in green colors.
actual
Android:
AIR 32.0.0.89 - video playback failed
AIR 32.0.0.144 - video playback failed
AIR 33.0.2.288 - video playback failed

Windows:
AIR 32.0.0.89 and earlier - video playback in green colors
AIR 32.0.0.109 - video playback failed #80
AIR 32.0.0.144 - no video playback (white screen) #80
AIR 33.0.2.288 - no video playback (white screen) #80

iOS:
AIR 32.0.0.89 - video playback failed
AIR 32.0.0.144 - video playback failed
AIR 33.0.2.288 - video playback failed

macOS:
AIR 30.0.0.107 - video playback in green colors
AIR 32.0.0.129 - no video playback (white screen)
AIR 33.0.2.288 - no video playback (white screen)

Expected Result:
Correct video playback.
expected

Known Workarounds

none

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant
You can’t perform that action at this time.