Jump to content

Intel N150 Transcoding Not Working


Go to solution Solved by Ra'Jiska,

Recommended Posts

Phalcon
Posted

As much as I prefer Emby I guess I'll buy Plex instead before the price increase since the GPU is supported.

I was really hoping for an update to drop before that price update, fingers crossed, there's still a few hours left.

AlienFarmer
Posted (edited)
4 hours ago, Phalcon said:

As much as I prefer Emby I guess I'll buy Plex instead before the price increase since the GPU is supported.

I was really hoping for an update to drop before that price update, fingers crossed, there's still a few hours left.

The fact that we are getting very little response from Emby Team and the lack of action is very disappointed. You can imagine when the next new CPU comes out, it will be the same thing again.

Edited by AlienFarmer
toudou
Posted

Indeed I can confirm this is an Emby issue, transcoding via GPU on the same setup for me works with Plex without any problem see the screenshot attached

Screenshot 2025-04-28 at 09.57.14.png

toudou
Posted

Hi @Lukedo you have any info on when you'll compile ffmpeg with the proper lib supported? If you want I can do some testings

  • Agree 1
toudou
Posted

I have switched to JellyFin...

Phalcon
Posted

Same

  • 3 weeks later...
PIkeoftheLake
Posted

Just checking in on this.

Paging @Luke

It has been 5 months since the original query and still nothing. Could we at least get a status report?

quorn23
Posted (edited)

Was about to order a N150 and did a quick check, found this thread.

Luke, can you push a beta for the willing people to test?

 

Edit: And if able, remove the "solution" tag from this thread?

Edited by quorn23
Posted
Just now, quorn23 said:

Was about to order a N150 and did a quick check, found this thread.

Luke, can you push a beta for the willing people to test?

 

 

A beta of what?

quorn23
Posted
On 3/24/2025 at 7:59 PM, Luke said:

Hi, we should have an updated ffmpeg build on the server beta channel in the very near future. Thanks guys.

^ As per your post here

  • Like 2
  • 2 weeks later...
PIkeoftheLake
Posted

I just upgraded to the Truenas app beta version 4.9.1.0 and still no hardware transcoding for N150.

  • Agree 1
MSDaniel
Posted

I'm interested in the solution for the Intel N150 processor too. This is mid-year of 2025, and the transcoding still is not working.

  • Agree 4
UDSteve
Posted

Hi @Luke, any update on this? I can get ffmpeg to work on my system and hardware transcode, but not through the docker image. I suspect this is because the intel-media-driver needs to be built with the latest version. Running on  Ubuntu server 25.04, installing via packages would not work, but directly building the latest releases worked for me. To make the docker image work it is likely needed to build from latest version.

  • Agree 1
  • Thanks 1
Posted

We'll have an updated ffmpeg build on the server beta channel in the near future. Thanks.

  • Thanks 1
AlienFarmer
Posted
55 minutes ago, Luke said:

We'll have an updated ffmpeg build on the server beta channel in the near future. Thanks.

Same response as a few months ago. Luke's definition of near future is worrisome.

  • Agree 2
  • Solution
Ra'Jiska
Posted (edited)

After many trial-and-error I've finally been able to get it working by rebuilding the `intel-media-driver` library with the latest version, the hard part was compiling this with dependencies having compatible ABI as the ones running on the Emby image (thanks closed source), which I found with image `ubuntu:18.04`.

Sharing here to everyone who was stuck like me. To get this working you need to make your custom image of the emby image with the updated dependencies. The following steps took me 15 minutes to build on a 20 cores CPU, the build process will take longer with less cores (therefore, much longer on a N150 if you're compiling directly there).

1) Create an empty folder with a file `Dockerfile` file with the following content

FROM ubuntu:18.04 AS builder

WORKDIR /workspace

RUN apt-get update && \
    apt-get install -y \
	build-essential \
	git \
	cmake \
	automake \
	autoconf \
	libtool \
	m4 \
	pkg-config \
	libdrm-dev

RUN mkdir build build/usr build/lib

# Libva
RUN \
	git clone https://github.com/intel/libva.git  && \
	cd libva && \
	git checkout 2.22.0 && \
	./autogen.sh --prefix=/workspace/build/usr --libdir=/workspace/build/lib && \
	make -j$(nproc) && \
	make install && \
	cd -

# Gmmlib
RUN \
	git clone https://github.com/intel/gmmlib.git && \
	cd gmmlib && \
	git checkout intel-gmmlib-22.7.2 && \
	mkdir build && \
	cd build && \
	cmake -DCMAKE_INSTALL_PREFIX=/workspace/build/usr -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_INSTALL_LIBDIR=/workspace/build/lib -DCMAKE_BUILD_TYPE=ReleaseInternal .. && \
	make -j$(nproc) && \
	make install && \
	cd ../../

# Media Driver
RUN \
	git clone https://github.com/intel/media-driver.git && \
	cd media-driver && \
	mkdir build && \
	cd build && \
	export PKG_CONFIG_PATH=/workspace/build/lib/pkgconfig && \
	cmake -DCMAKE_LIBRARY_PATH=/workspace/build/lib -DCMAKE_INSTALL_PREFIX=/workspace/build/usr -DCMAKE_INSTALL_LIBDIR=/workspace/build/lib .. && \
	make -j$(nproc) && \
	make install

RUN find /workspace/build -name "*.so" -exec strip --strip-unneeded {} \;

FROM emby/embyserver:4.9.1.0 AS emby

COPY --from=builder /workspace/build/lib /lib

2) Build the image using `docker build -t emby-n150-fixed .` This will take a while, the more CPU cores you have the shorter (took me about 30 minutes with 20 cores)

3) Check that this is working by running `docker run --rm -it --device /dev/dri:/dev/dri --entrypoint vainfo emby-n150-fixed`, if this returns something as follows, then it worked:

Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 25.2.5 (4b3a078bd)
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointFEI
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointFEI
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointFEI
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain               :	VAEntrypointEncSliceLP
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointEncSliceLP
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile1            :	VAEntrypointVLD
      VAProfileVP9Profile1            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile3            :	VAEntrypointVLD
      VAProfileVP9Profile3            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain12             :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointEncSlice
      VAProfileHEVCMain422_10         :	VAEntrypointVLD
      VAProfileHEVCMain422_10         :	VAEntrypointEncSlice
      VAProfileHEVCMain422_12         :	VAEntrypointVLD
      VAProfileHEVCMain422_12         :	VAEntrypointEncSlice
      VAProfileHEVCMain444            :	VAEntrypointVLD
      VAProfileHEVCMain444            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10         :	VAEntrypointVLD
      VAProfileHEVCMain444_10         :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_12         :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain10          :	VAEntrypointVLD
      VAProfileHEVCSccMain10          :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444         :	VAEntrypointVLD
      VAProfileHEVCSccMain444         :	VAEntrypointEncSliceLP
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointEncSliceLP

You can compare and run the same command on the emby image, you should have a bunch of errors instead.

4) (OPTIONAL) For your convenience, I uploaded the image on DockerHub if you want an easy way to see if it works, use the image rajiska/emby-n150-fixed:4.9.1.0, though I'd recommend to build the image yourself

Edited by Ra'Jiska
Updated image to contain the tag
  • Like 6
  • Thanks 4
zeyoner
Posted (edited)
On 5/26/2025 at 2:57 PM, Luke said:

A beta of what?

Is he trolling?

Responses are so meh. Lets not forget this is still a paid for product. The competition all already have this ability. It's like yea we know. It'll someday be in a beta in a galaxy far far away. Pretty poor approach to those who have been using Emby for some time. I don't think that we're asking for a lot here. Had there been an actual attempt to show that it is actually being worked on. I think we would all be happy. It's now been months and very little attempt shown we're being heard. A member has even complied a docker image.

Having us beg for this is wild.

Edited by zeyoner
  • Agree 4
sukerbole1
Posted
On 6/16/2025 at 3:45 PM, Ra'Jiska said:

4) (OPTIONAL) For your convenience, I uploaded the image on DockerHub if you want an easy way to see if it works, use the image rajiska/emby-n150-fixed:4.9.1.0, though I'd recommend to build the image yourself

Thanks a lot! Just gave this a quick spin. I have an N355 and all is well now. 

Docker inside an LXC on Proxmox, and actually got video transcoding. 

image.png.48011a46ba5978fd8c81bf9347f4e6a0.png

  • Like 1
  • Thanks 1
AlienFarmer
Posted
On 16/06/2025 at 09:45, Ra'Jiska said:

After many trial-and-error I've finally been able to get it working by rebuilding the `intel-media-driver` library with the latest version, the hard part was compiling this with dependencies having compatible ABI as the ones running on the Emby image (thanks closed source), which I found with image `ubuntu:18.04`.

Sharing here to everyone who was stuck like me. To get this working you need to make your custom image of the emby image with the updated dependencies. The following steps took me 15 minutes to build on a 20 cores CPU, the build process will take longer with less cores (therefore, much longer on a N150 if you're compiling directly there).

1) Create an empty folder with a file `Dockerfile` file with the following content

FROM ubuntu:18.04 AS builder

WORKDIR /workspace

RUN apt-get update && \
    apt-get install -y \
	build-essential \
	git \
	cmake \
	automake \
	autoconf \
	libtool \
	m4 \
	pkg-config \
	libdrm-dev

RUN mkdir build build/usr build/lib

# Libva
RUN \
	git clone https://github.com/intel/libva.git  && \
	cd libva && \
	git checkout 2.22.0 && \
	./autogen.sh --prefix=/workspace/build/usr --libdir=/workspace/build/lib && \
	make -j$(nproc) && \
	make install && \
	cd -

# Gmmlib
RUN \
	git clone https://github.com/intel/gmmlib.git && \
	cd gmmlib && \
	git checkout intel-gmmlib-22.7.2 && \
	mkdir build && \
	cd build && \
	cmake -DCMAKE_INSTALL_PREFIX=/workspace/build/usr -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_INSTALL_LIBDIR=/workspace/build/lib -DCMAKE_BUILD_TYPE=ReleaseInternal .. && \
	make -j$(nproc) && \
	make install && \
	cd ../../

# Media Driver
RUN \
	git clone https://github.com/intel/media-driver.git && \
	cd media-driver && \
	mkdir build && \
	cd build && \
	export PKG_CONFIG_PATH=/workspace/build/lib/pkgconfig && \
	cmake -DCMAKE_LIBRARY_PATH=/workspace/build/lib -DCMAKE_INSTALL_PREFIX=/workspace/build/usr -DCMAKE_INSTALL_LIBDIR=/workspace/build/lib .. && \
	make -j$(nproc) && \
	make install

RUN find /workspace/build -name "*.so" -exec strip --strip-unneeded {} \;

FROM emby/embyserver:4.9.1.0 AS emby

COPY --from=builder /workspace/build/lib /lib

2) Build the image using `docker build -t emby-n150-fixed .` This will take a while, the more CPU cores you have the shorter (took me about 30 minutes with 20 cores)

3) Check that this is working by running `docker run --rm -it --device /dev/dri:/dev/dri --entrypoint vainfo emby-n150-fixed`, if this returns something as follows, then it worked:

Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 25.2.5 (4b3a078bd)
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointFEI
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointFEI
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointFEI
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain               :	VAEntrypointEncSliceLP
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointEncSliceLP
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile1            :	VAEntrypointVLD
      VAProfileVP9Profile1            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointEncSliceLP
      VAProfileVP9Profile3            :	VAEntrypointVLD
      VAProfileVP9Profile3            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain12             :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointEncSlice
      VAProfileHEVCMain422_10         :	VAEntrypointVLD
      VAProfileHEVCMain422_10         :	VAEntrypointEncSlice
      VAProfileHEVCMain422_12         :	VAEntrypointVLD
      VAProfileHEVCMain422_12         :	VAEntrypointEncSlice
      VAProfileHEVCMain444            :	VAEntrypointVLD
      VAProfileHEVCMain444            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10         :	VAEntrypointVLD
      VAProfileHEVCMain444_10         :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_12         :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain10          :	VAEntrypointVLD
      VAProfileHEVCSccMain10          :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444         :	VAEntrypointVLD
      VAProfileHEVCSccMain444         :	VAEntrypointEncSliceLP
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointEncSliceLP

You can compare and run the same command on the emby image, you should have a bunch of errors instead.

4) (OPTIONAL) For your convenience, I uploaded the image on DockerHub if you want an easy way to see if it works, use the image rajiska/emby-n150-fixed:4.9.1.0, though I'd recommend to build the image yourself

Thanks buddy, your Docker image works wonders. Thanks very much! For the time being, I will use your image until the laid back Emby Team figures this out.

  • Like 1
Ra'Jiska
Posted
19 hours ago, sukerbole1 said:

Thanks a lot! Just gave this a quick spin. I have an N355 and all is well now. 

10 hours ago, AlienFarmer said:

Thanks buddy, your Docker image works wonders. Thanks very much! For the time being, I will use your image until the laid back Emby Team figures this out.

Happy to know this could help you guys and that it works on other CPUs (I only have N150 to test on).

Since I am not sure how long it will take Emby's team to update libraries, I made a Github repo with actions that automatically build an image with the updated libraries when a new Emby release is published.

  • Like 3
  • Agree 1
  • Thanks 1
quorn23
Posted

Thanks for the workaround Ra'Jiska, but i think it's a bad idea to label this as solution. It's a workaround, a solution would be an updated beta that works, as this is a half year old issue with people asking for something reasonable like support for "current" CPUs.

 

 Besides that, nice work, love the Repo with the workflow!

  • Agree 2
AlienFarmer
Posted

Agreed, but we have been begging too long for a real solution. So let's call it a temporary solution.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...