Screen Capture to h.264 using Intel Media SDK - encoding

I am working on a Screen Capture to h.264 bitstream solution using the Intel Media SDK.
I read the new 2nd Generation Intel processors have a hardware accelerated encoder so i am expecting the encode latency to drop and make it realtime.
Using ffmpeg 32bit version doing a screen capture and x264 i get an end to end latency of 200ms on the Pi. Well the Raspberry pi has a hardware decoder so i am guessing it does the decode in around 80ms. I used a Intel i5 520M and a 1st gen i7 to do the decoding the end to end was 250-350ms latency after using the Raspberry pi that went down to 150-200.
How do i link the Direct Show Screen Capture filter to the Intel Media SDK input?
there is not documentation i can follow, if anyone can shine some light.

I had the success of h.264 screen encoding by Direct3X + H.264 H/W encoder using Intel Media SDK.
screen shot by DirectX : 55ms
RGB4 -> NV12 converting by Intel Media SDK / VPP : 1ms
H.264 encoding by Intel Media SDK / H/W encoder : 7ms
Refer this link:
https://software.intel.com/en-us/forums/topic/358602

Related

Raspberry pi camera h.264 codec licence

I have pi camera module v2. I want to make life video stream.
I have tried to read h.264 license agreement but didn't understand: do I need to buy license for h.264 usage or it is included in camera's price?

x264 Decoding time increases with zerolatency

Reference - Why sliced thread affect so much on realtime encoding using ffmpeg x264?
With Zerolatency / sliced-threads enabled, I am observing that the decoding time shoots up! I am encoding on my Windows 10 laptop and streaming to Samsung S4 phone where it is decoded and rendered. If usually, decoding takes 2-3 ms, it shoots up to around 25 ms if I use sliced-threads. It is a real time streaming application so I need low latency and that's why I enabled zerolatency. Can someone help please?
I am using the hardware decoder on the phone.

Unity3D: Cross Platform Video Streaming?

We are working on a prototyp application using unity3d. Your goal is to create a fluid and fun to use cross platform app.
The problem we facing right now is streaming (h.264 - mp4) video content over the web. This will be a major feature of our app.
I have already tried MovieTextures and the www class but it seems the files must be in ogg format which we can not provide. On the other hand handheld.playfullscreenmovie seems to be an android and ios only feature which uses the build in video player. This would be great if it would be supported on other platforms (e.g. Win8-Phone) as well.
Is there another cross platform option to stream (h.264 - mp4) video content over the web and display in full screen or as gui object? Or are there any plans to support something like this in the near future? Or is there a stable plugin for such a task?
Thanks
As of Unity 5 Handheld.PlayFullScreenMovie supports Windows Phone and Windows Store as per http://docs.unity3d.com/ScriptReference/Handheld.PlayFullScreenMovie.html
On Windows Phone 8, Handheld.PlayFullScreenMovie internally uses Microsoft Media Foundation for movie playback. On this platform, calling Handheld.PlayFullScreenMovie with full or minimal control mode is not supported.
On Windows Store Apps and Windows Phone 8.1, Handheld.PlayFullScreenMovie internally uses XAML MediaElement control.
On Windows Phone and Windows Store Apps, there generally isn't movie resolution or bitrate limit, however, higher resolution or bitrate movies will consume more memory for decoding. Weaker devices will also start skipping frames much sooner at extremely high resolutions. For example, Nokia Lumia 620 can only play videos smoothly up to 1920x1080. For these platforms, you can find list of supported formats here: Supported audio and video formats on Windows Store
mp4 is not a streamable container. If you read the ISO specification, you will see that MP4 can not be streamed. This is because the MOOV atom can not be written until all frames are know and accounted for. This 100% incompatible for live video. There are supersets of MP4 used in DASH that make this possible. Essentially, they create a little mp4 (called a fragment) file every couple seconds. Alternatively you can use a container designed for streaming such as FLV or TS.
You will probably need to step outside the unity sdk a bit to enable this.

using ffmpeg to display video on iPhone

anyone can help me on this ?
I have this API
ret = avRecvFrameData(avIndex, buf, VIDEO_BUF_SIZE, (char *)&frameInfo, sizeof(FRAMEINFO_t), &frmNo);
the buffer will fill with the content from the video thread the codec is H264 frameInfo contains the related information. If I want to display on iPhone, how to do it with ffmpeg?
much appreciated with your help .
You should not be using ffmpeg in an iOS for a number of reasons. First, there are real license issues that put including ffmpeg in a legal grey area when it comes to iOS apps. Second, performance will be very very poor. Third, iOS already includes APIs that have access to the h.264 hardware on the device. You can find my example Xcode project at AVDecodeEncode, this is an example of using my library to decode from h.264 and then encode back to h.264.

H.264 Video in MPEG2TS container

I have a hardware codec that encodes video in H.264 (Baseline profile, level 3) which I package into MPEG2 Transport Stream so that I stream it to iDevices (HTTP Live Streaming).
The problem I have is that the video plays only on the more recent iDevices (iPhone 4S/iPhone 5, iPad 2/3) but not on the older iPhones or iPad 1 (there is activity on the screen but nothing even remotely close to actual video).
Further, when it works, the video plays at exactly 1/2 the framerate (30 fps plays as 15 fps).
Safari on Mac Mini or Macbook Pro exhibit no problem whatsoever. VLC & mplayer don't have any problem with the TS files either.
When I package the same video into a MP4 container, all devices play the video properly.
Any suggestions on how to debug this problem?
Is there any way of getting debug information from iPhone or iPad that would help me figure out what's going on?
Reduce your level? Do older devices support level 3? If not go to level 1.2 and check