Jump to content
daPyr0x

ANSWERED Cannot transcode music: Too many levels of symbolic link

Recommended Posts

daPyr0x

Hi there,

I have Emby installed in a docker.  It works for playing back movies and TV without issue, transcoding or otherwise.  When I try to listen to music, however, I get an error that states "No compatible streams found."  Reviewing the log I see two ffmpeg errors both stating "Too many levels of symbolic links" when trying to open/read the file.  The music files themselves are accessed through the same folder structure as TV/Movies, all of which work fine.  My googling has not been very fruitful on this error so I'm unsure where to go to next, any ideas?  Excerpt from log file below.

 

2020-07-13 22:26:01.267 Error FileSystem: Error determining LastAccessTimeUtc for /mnt/share1/Music/The 1975/Notes on a Conditional Form/02 - People.flac
	*** Error Report ***
	Version: 4.4.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Unix 4.19.0.9
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///system/System.Private.CoreLib.dll
	System.Environment.Version: 3.1.2
	Processor count: 3
	Program data path: /config
	Application directory: /system
	System.IO.IOException: System.IO.IOException: Too many levels of symbolic links
	   at System.IO.FileStatus.EnsureStatInitialized(ReadOnlySpan`1 path, Boolean continueOnError)
	   at System.IO.FileStatus.GetLastWriteTime(ReadOnlySpan`1 path, Boolean continueOnError)
	   at System.IO.FileSystem.GetLastWriteTime(String fullPath)
	   at System.IO.File.GetLastWriteTimeUtc(String path)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetLastWriteTimeUtc(String path, Boolean fileExists)
	Source: System.IO.FileSystem
	TargetSite: Void EnsureStatInitialized(System.ReadOnlySpan`1[System.Char], Boolean)
	
2020-07-13 22:26:01.276 Error HttpServer: Error processing request
	*** Error Report ***
	Version: 4.4.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Unix 4.19.0.9
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///system/System.Private.CoreLib.dll
	System.Environment.Version: 3.1.2
	Processor count: 3
	Program data path: /config
	Application directory: /system
	System.IO.IOException: System.IO.IOException: Too many levels of symbolic links
	   at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
	   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options, MediaProtocol protocol)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetContent(StaticFileResultOptions options, Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Server.MediaEncoding.Api.Progressive.BaseProgressiveStreamingService.ProcessRequest(StreamRequest request, Boolean isHeadRequest)
	   at Emby.Server.MediaEncoding.Api.UniversalAudioService.GetUniversalStream(GetUniversalAudioStream request, Boolean isHeadRequest, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, ReadOnlyMemory`1 urlString, ReadOnlyMemory`1 localPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Void ThrowExceptionForIoErrno(ErrorInfo, System.String, Boolean, System.Func`2[Interop+ErrorInfo,Interop+ErrorInfo])
	
2020-07-13 22:26:01.277 Info HttpServer: HTTP Response 500 to 192.168.199.11. Time: 20ms. http://home:8096/emby/Audio/80200/universal?UserId=cde7260e318b4c54b687eed3b173ac04&DeviceId=0ee6da38-6e09-4e5f-ab26-5001d2c7fa43&MaxStreamingBitrate=140000000&Container=opus,mp3|mp3,mp2,mp3|mp2,m4a|aac,flac,webma,webm,wav|PCM_S16LE,ogg&TranscodingContainer=aac&TranscodingProtocol=hls&AudioCodec=aac&PlaySessionId=1594640963570&StartTimeTicks=0&EnableRedirection=true
2020-07-13 22:26:01.285 Info HttpServer: HTTP GET http://home:8096/emby/Audio/80200/universal?UserId=cde7260e318b4c54b687eed3b173ac04&DeviceId=0ee6da38-6e09-4e5f-ab26-5001d2c7fa43&MaxStreamingBitrate=140000000&Container=opus,mp3|mp3,mp2,mp3|mp2,m4a|aac,flac,webma,webm,wav|PCM_S16LE,ogg&TranscodingContainer=aac&TranscodingProtocol=hls&AudioCodec=aac&PlaySessionId=1594640963570&StartTimeTicks=0&EnableRedirection=true. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
2020-07-13 22:26:01.287 Info MediaInfoService: User policy for omv. EnableAudioPlaybackTranscoding: True
2020-07-13 22:26:01.287 Info MediaInfoService: RemoteClientBitrateLimit: 9000000, RemoteIp: 192.168.199.11, IsInLocalNetwork: True
2020-07-13 22:26:01.287 Info MediaInfoService: RemoteClientBitrateLimit: 9000000, RemoteIp: 192.168.199.11, IsInLocalNetwork: True
2020-07-13 22:26:01.287 Info MediaInfoService: RemoteClientBitrateLimit: 9000000, RemoteIp: 192.168.199.11, IsInLocalNetwork: True
2020-07-13 22:26:01.295 Error FileSystem: Error determining LastAccessTimeUtc for /mnt/share1/Music/The 1975/Notes on a Conditional Form/02 - People.flac
	*** Error Report ***
	Version: 4.4.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Unix 4.19.0.9
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///system/System.Private.CoreLib.dll
	System.Environment.Version: 3.1.2
	Processor count: 3
	Program data path: /config
	Application directory: /system
	System.IO.IOException: System.IO.IOException: Too many levels of symbolic links
	   at System.IO.FileStatus.EnsureStatInitialized(ReadOnlySpan`1 path, Boolean continueOnError)
	   at System.IO.FileStatus.GetLastWriteTime(ReadOnlySpan`1 path, Boolean continueOnError)
	   at System.IO.FileSystem.GetLastWriteTime(String fullPath)
	   at System.IO.File.GetLastWriteTimeUtc(String path)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetLastWriteTimeUtc(String path, Boolean fileExists)
	Source: System.IO.FileSystem
	TargetSite: Void EnsureStatInitialized(System.ReadOnlySpan`1[System.Char], Boolean)
	
2020-07-13 22:26:01.305 Error HttpServer: Error processing request
	*** Error Report ***
	Version: 4.4.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Unix 4.19.0.9
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///system/System.Private.CoreLib.dll
	System.Environment.Version: 3.1.2
	Processor count: 3
	Program data path: /config
	Application directory: /system
	System.IO.IOException: System.IO.IOException: Too many levels of symbolic links
	   at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
	   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options, MediaProtocol protocol)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetContent(StaticFileResultOptions options, Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Server.MediaEncoding.Api.Progressive.BaseProgressiveStreamingService.ProcessRequest(StreamRequest request, Boolean isHeadRequest)
	   at Emby.Server.MediaEncoding.Api.UniversalAudioService.GetUniversalStream(GetUniversalAudioStream request, Boolean isHeadRequest, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, ReadOnlyMemory`1 urlString, ReadOnlyMemory`1 localPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Void ThrowExceptionForIoErrno(ErrorInfo, System.String, Boolean, System.Func`2[Interop+ErrorInfo,Interop+ErrorInfo])
	

 

Share this post


Link to post
Share on other sites
Luke

Hi there, are you using symbolic links?

Share this post


Link to post
Share on other sites
daPyr0x

Sorry, I probably should've explained that up front.

 

I am not using symbolic links, but in the eyes of ffmpeg it's possible I guess?  Files are stored on a file server running OpenMediaVault in a mergerFS volume.  This volume is mounted via NFS to a separate VM running Debian and Docker.  Emby runs within that docker with the NFS mounted volume shared to it.

Share this post


Link to post
Share on other sites
mastrmind11
10 minutes ago, daPyr0x said:

Sorry, I probably should've explained that up front.

 

I am not using symbolic links, but in the eyes of ffmpeg it's possible I guess?  Files are stored on a file server running OpenMediaVault in a mergerFS volume.  This volume is mounted via NFS to a separate VM running Debian and Docker.  Emby runs within that docker with the NFS mounted volume shared to it.

try this https://serverfault.com/questions/640895/why-do-some-host-volumes-in-docker-containers-give-the-error-too-many-levels-of

  • Thanks 1

Share this post


Link to post
Share on other sites
daPyr0x
Posted (edited)
On 7/14/2020 at 9:54 AM, mastrmind11 said:

Thanks mastrmind11.  This pointed me in the right direction, though I used a slightly different solution.

For future google results:  When launching the docker container, add :shared to your media volume declaration when using NFS to prevent this issue.

docker run -d \
    --volume /path/to/programdata:/config \ # This is mandatory
    --volume /path/to/share1:/mnt/share1:shared \ # To mount a share using NFS
    --device /dev/dri:/dev/dri \ # To mount all render nodes for VAAPI/NVDEC/NVENC
    --runtime=nvidia \ # To expose your NVIDIA GPU
    --publish 8096:8096 \ # To expose the HTTP port
    --publish 8920:8920 \ # To expose the HTTPS port
    --env UID=1000 \ # The UID to run emby as (default: 2)
    --env GID=100 \ # The GID to run emby as (default 2)
    --env GIDLIST=100 \ # A comma-separated list of additional GIDs to run emby as (default: 2)
    emby/embyserver:latest

 

Edited by daPyr0x

Share this post


Link to post
Share on other sites
Luke

Thanks for the feedback.

Share this post


Link to post
Share on other sites

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...