jellyfin-archive / jellyfin-docs Goto Github PK
View Code? Open in Web Editor NEWDocumentation for Jellyfin
Home Page: https://jellyfin.org
License: Creative Commons Attribution Share Alike 4.0 International
Documentation for Jellyfin
Home Page: https://jellyfin.org
License: Creative Commons Attribution Share Alike 4.0 International
Traefik 2.0 uses different configuration format which is not backwards compatible. /cc @PrplHaz4
We should also document the Jellyfin API.
Hey, is there any plans to allow the community to translate the docs to other languages? I've only checked the weblate instance and there isn't one for the documentation. It would also be nice if we could translate the website, but that's another issue.
Right now I'm sure that most of the people who even know about Jellyfin can speak english. But for the future, once it gets more popular, it would be nice to remove this barrier.
As discussed in #40, improve the reverse proxy configs to have examples of how to use LetsEncrypt authentication.
For details see jellyfin/jellyfin#1085 (comment) and other comments in that issue
There is no page describing the book media type. File naming conventions and other relevant information should be added.
See the Music page for an example.
There is currently a broken link in jellyfin-web
because this page does not exist. https://github.com/jellyfin/jellyfin-web/blob/master/src/controllers/medialibrarypage.js#L228
Add some more information to the client apps page
I know it at least binds 8096/tcp (HTTP) and 8920/tcp (HTTPS), but we should check if it binds anything else and document those as well.
Okay, if you follow the instructions found un the official Docu for Reverse Proxys for Traefik all you get once done is an https upgraded 403 response.
Side note: My setup uses a self signed cert for LAN access (yes, I have Jellyfin behind a Proxy for my LAN only with now remote sharing. pls don't judge me ๐ )
alternative (that yields the same result without RP)
docker run -p 8096:8096 -v jellyfin_config:/config -v /host/media:/media jellyfin/jellyfin:10.3.7
Setup the docker-compose files and toml file as shown by the docu => allows the user to access jellyfin
Traefik
version: '3.7'
services:
traefik:
image: traefik:alpine
command: --web --docker --docker.domain="local.lan" --logLevel="INFO"
networks:
- traefik
ports:
- 80:80
- 443:443
expose:
- 8080
volumes:
- ./certs:/certs
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
restart: unless-stopped
labels:
- "traefik.frontend.rule=Host:traefik.local.lan"
- "traefik.port=8080"
- "traefik.backend=Traefik-Admin"
- "traefik.frontend.entryPoints=https"
- "traefik.frontend.headers.forceSTSHeader=true"
- "traefik.frontend.headers.STSSeconds=86400"
- "traefik.frontend.headers.STSIncludeSubdomains=true"
- "traefik.frontend.headers.STSPreload=true"
networks:
traefik:
external: true
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
[docker]
domain = "local.lan"
watch = true
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
minVersion = "VersionTLS12"
cipherSuites = [
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
]
[[entryPoints.https.tls.certificates]]
certFile = "/certs/local_lan_wildcard.crt"
keyFile = "/certs/local_lan_wildcard.key"
Jellyfin
version: '3.7'
services:
jellyfin:
image: jellyfin/jellyfin:10.3.7
environment:
- TZ=Europe/Vienna
expose:
- 8096
labels:
- "traefik.frontend.rule=Host:jellyfin.local.lan"
- "traefik.port=8096"
- "traefik.backend=JellyFin"
- "traefik.frontend.entryPoints=https"
- "traefik.frontend.headers.forceSTSHeader=true"
- "traefik.frontend.headers.STSSeconds=86400"
- "traefik.frontend.headers.STSIncludeSubdomains=true"
- "traefik.frontend.headers.STSPreload=true"
volumes:
- type: volume
source: jellyfin_config
target: /config
- type: volume
source: jellyfin_cache
target: /cache
- type: bind
source: /mnt/nfs_media
target: /media
restart: unless-stopped
networks:
- traefik
volumes:
jellyfin_config:
external: true
jellyfin_cache:
external: true
networks:
traefik:
external: true
This Issue seems to be related to jellyfin#255, yet not really as it seems to be a bit of a different behaviour.
Should I have opened this issue in the wrong repo then I'm terribly sorry, same goes for the case if this whole issue is only limited to my setup and me missing something
Final Note Iโm sure it is not Traefiks fault, since I use it as a reverse proxy for Portainer and have no problems there ๐ค
For Jellyfin I'll change back to using network_mode: "host"
and life with just http for the meantime
The contribution guide for server needs to be update to include the new build step for jellyfin-web.
https://github.com/jellyfin/jellyfin-docs/blob/master/general/contributing/development.md
Add documentation similar to this: https://github.com/MediaBrowser/Wiki/wiki/Live-TV-Channel-Mapping
While using the search, I got some odd behavior. An image was missing and so I pulled a new image.
Reviewing the logs, it looked like some inefficiencies and calls are occurring. I recently updated to master and cleared my cache with the update, I am finding slow system response as the cache rebuilds and I am reviewing logs while it rebuilds.
[2020-02-25 23:46:24.866 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:01.126996. "http://domain/Artists?searchTerm=thieves&IncludePeople=false&IncludeMedia=false&IncludeGenres=false&IncludeStudios=false&IncludeArtists=true&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1&userId=bd3cd6572a584e08b43f6d2652e0c2c6"
[2020-02-25 23:46:25.216 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:01.4779472. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&MediaTypes=Video&ExcludeItemTypes=Movie%2CEpisode&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:25.234 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:01.4971402. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Playlist&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:25.926 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:00.5061166. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Episode&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:25.927 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:04.1363007. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Episode&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:26.243 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:00.7172261. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&MediaTypes=Photo&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:26.338 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:02.6438431. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Audio&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
[2020-02-25 23:46:26.338 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:00.8399665. "http://domain/Users/bd3cd6572a584e08b43f6d2652e0c2c6/Items?searchTerm=thieves&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Audio&Limit=24&Fields=PrimaryImageAspectRatio%2CCanDelete%2CBasicSyncInfo%2CMediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1"
These are calls to each library type to get results back on the keyword. I searched for thieves
. Looks like it'd be pretty easy to add in searches for stuff like genres
[2020-02-25 23:46:36.399 +00:00] [ERR] Error processing request
System.Net.Http.HttpRequestException: Resource temporarily unavailable
---> System.Net.Sockets.SocketException (11): Resource temporarily unavailable
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Emby.Server.Implementations.HttpClientManager.HttpClientManager.SendAsyncInternal(HttpRequestOptions options, HttpMethod httpMethod)
at Emby.Server.Implementations.HttpClientManager.HttpClientManager.SendAsync(HttpRequestOptions options, HttpMethod httpMethod)
at MediaBrowser.Providers.Manager.ProviderManager.SaveImage(BaseItem item, String url, ImageType type, Nullable`1 imageIndex, CancellationToken cancellationToken)
at Emby.Server.Implementations.Library.LibraryManager.ConvertImageToLocal(BaseItem item, ItemImageInfo image, Int32 imageIndex)
at Emby.Drawing.ImageProcessor.ProcessImage(ImageProcessingOptions options)
at MediaBrowser.Api.Images.ImageService.GetImageResult(BaseItem item, Guid itemId, ImageRequest request, ItemImageInfo image, Boolean cropwhitespace, IReadOnlyCollection`1 supportedFormats, Nullable`1 cacheDuration, IDictionary`2 headers, Boolean isHeadRequest)
at Emby.Server.Implementations.Services.ServiceExecGeneral.GetTaskResult(Task task)
at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, HttpResponse httpRes, ILogger logger, CancellationToken cancellationToken)
at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IHttpRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
This was an ungraceful return. Looks like no image was returned for an object. On the search page, the picture was missing. I did recently update the server and that cleared the cache. So perhaps this was lost in the cache?
[2020-02-25 23:46:36.402 +00:00] [WRN] HTTP Response 500 to "192.168.1.1". Time (slow): 0:00:10.0163711. "http://domain/Items/f5aab68a012efd583775248aeb625d1c/Images/Primary?tag=9da574074fa69f3e4bed5a9e4cda5f19&quality=90"
[2020-02-25 23:47:35.097 +00:00] [INF] GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9", Type: Video }, DirectPlayProfile { Container: "opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma,webm", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "ogg", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "VP8", Type: Video }, DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "VP9", Type: Video }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "webm", Type: Video, VideoCodec: "vpx", AudioCodec: "vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: External, DidlMode: null, Language: null, Container: null }] }
This is the server's reaction to the void metadata. This is one nasty gram too. The header is extremely loooong.
[2020-02-25 23:47:35.099 +00:00] [INF] User policy for "artiume". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-02-25 23:47:35.099 +00:00] [INF] Profile: "Unknown Profile", Path: "/media/movies/P/Princess of Thieves (2001)/Princess of Thieves (2001) Bluray-720p.mp4", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-02-25 23:47:35.099 +00:00] [INF] RemoteClientBitrateLimit: 1000000, RemoteIp: "192.168.1.1", IsInLocalNetwork: True
[2020-02-25 23:47:35.099 +00:00] [INF] Profile: "Unknown Profile", Path: "/media/movies/P/Princess of Thieves (2001)/Princess of Thieves (2001) Bluray-720p.mp4", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-02-25 23:47:35.099 +00:00] [INF] RemoteClientBitrateLimit: 1000000, RemoteIp: "192.168.1.1", IsInLocalNetwork: True
[2020-02-25 23:47:35.099 +00:00] [INF] Profile: "Unknown Profile", Path: "/media/movies/P/Princess of Thieves (2001)/Princess of Thieves (2001) Bluray-720p.mp4", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-02-25 23:47:38.267 +00:00] [INF] Getting image size for item "Movie" "/media/movies/P/Princess of Thieves (2001)/poster.jpg"
[2020-02-25 23:47:38.301 +00:00] [INF] Getting image size for item "Movie" "/media/movies/P/Princess of Thieves (2001)/fanart.jpg"
[2020-02-25 23:47:44.518 +00:00] [INF] Getting image size for item "Movie" "/media/movies/P/Princess of Thieves (2001)/landscape.jpg"
[2020-02-25 23:47:44.942 +00:00] [WRN] HTTP Response 200 to "192.168.1.1". Time (slow): 0:00:09.6398925. "http://domain/Items/0047b22b4256ae48bbbdc881005b33c4/Images/Primary?tag=c3aa4d5d63599c5f2d3ba758138adf47&quality=90"
[2020-02-25 23:50:52.348 +00:00] [INF] WS "http://domain/socket?api_key=91fbc9c&deviceId=TW96aWxsYS81LjAgKFgxMTsgVWJ1bnR1OyBMaW51eCB4ODZfNjQ7IHJ2OjcwLjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNzAuMHwxNTc1Mzc3MzQ5NjU4". UserAgent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0"
This is after finding what I was looking for and requesting a new image Primary cover. For some reason, media gets processed as a Profile. The concern I have for this section is that after fetching the new image, the dialog window failed to close. I didn't check the console to see if any issues were occurring.
I used this documentation : https://jellyfin.readthedocs.io/en/latest/administrator-docs/reverse-proxy/ .
Some items were not clear to me.
Anyway so i figured i can add a VirualHost on my machine running jellyfin, pointed a DNS subdomain to this machine IP, added the code snippet, activated the site.
If I go to jellyfin.my-site.xxx, i will obtain : "INTERNAL SERVER ERROR'. Server log says, "[Tue Mar 05 23:28:28.924719 2019] [proxy:warn] [pid 24036] [client xx.xxx.xx.xxx:56940] AH01144: No protocol handler was valid for the URL /embywebsocket. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule."
At the moment i did not figured issue yet, but almost certain the doc does not explain what to do. (Missing prerequisite?)
However rather than my little issue the reason i open this ticket is to discuss the documentation.
The DocFX compiler reports the following:
[19-09-11 09:23:12.019]Warning:[BuildCommand.Postprocess.HandlePostProcessorsWithIncremental.HandlePostProcessors.Processing html.ValidateBookmark](docs/faq.md#L28)Invalid link: '[requesting features](xref:contrib-issues#requesting-features)'. The file docs/contributing/issues.md doesn't contain a bookmark named 'requesting-features'.
[19-09-11 09:23:12.020]Warning:[BuildCommand.Postprocess.HandlePostProcessorsWithIncremental.HandlePostProcessors.Processing html.ValidateBookmark](index.md#L36)Invalid link: '[Docker](xref:admin-installing#docker-hub)'. The file docs/administration/installing.md doesn't contain a bookmark named 'docker-hub'.
[19-09-11 09:23:12.020]Warning:[BuildCommand.Postprocess.HandlePostProcessorsWithIncremental.HandlePostProcessors.Processing html.ValidateBookmark](index.md#L63)Invalid link: '[Requesting Features](xref:contrib-issues#requesting-features)'. The file docs/contributing/issues.md doesn't contain a bookmark named 'requesting-features'.
This one is not really a bug, but a security problem!
As because of this:
docker/for-linux#788
Adding a folder with submounts read only like:
-v /media:/media:ro
doesn't make mountpoints underneath /media, like /media/movies, read only, if movies is a mountpoint.
This should be documented here:
https://jellyfin.readthedocs.io/en/latest/administrator-docs/installing/#docker-hub
I was wondering, as jellyfin wrote nfo files and posters to a bind mount that I thought is read only, although it isn't!
I know of many people having their media added to jellyfin like this, who believe, their media is safe this way!
@Artiume
jellyfin-qsv.log
jellyfin-vaapi.log
Have a look at the QSV log does it even use QSV? It's fast enough, but it does not have it in the commandline
I think there have been some reliance on just giving emby a network path and having emby fix it. With jellyfin we have consensus that this is the task of the OS. So to be user friendly we need documentation on how to do this with some different OSes.
(feel free to add more)
and for a few different network share types.
(feel free to add more)
I'm kind of old school, so I would do this in fstab. I'm unfamiliar with docker so any extra steps needed for docker needs to be documented.
I'd like to change some things in the docker hub readme, namely clarifying the need to enable --net=host
for DLNA to work.
I think the cleanest way to do this would be to mirror the existing Docker Hub README here and just manually copy changes back when needed.
At https://jellyfin.readthedocs.io/en/latest/#administrator-documentation
Return a 404 page.
The last time DocFX Build pipeline ran succesfully was run #20200216.4 . This ran with DocFX release 2.48.1
.
With run #20200217.1 DocFX release 2.49
. is used, which fails parsing several triple-slash-comments
.
Any way to revert to 2.48.1 until this is fixed ?
Provide a set of instructions for Windows users on how to update their installations.
Referenced here:
https://www.reddit.com/r/jellyfin/comments/bysa53/jellyfin_1035_released/eqqz0hb/
The connectivity page references a non-existent file 'port-forwarding'. PR #113 really show cases this cause it checks all cross-references.
Hi there,
I've moved from Plex to Jellyfin as I prefer the FOSS approach.
I just asked myself how a proper QoS could be configured?
So far I managed to create a policy according to the ports I have found here: [https://jellyfin.org/docs/general/networking/index.html](Jellyfin Networking).
Any proper solutions/ideas?
I think it would go a long way towards helping people test, debug and fix things themselves if we had some high-level flows documented.
For each of these bullets - what file contains the entrypoint into these activities?
When a user clicks a movie in the web client:
Once the android app has officially launched on the playstore, add a link pointing towards the app page to https://jellyfin.readthedocs.io/en/latest/clients/#jellyfin-for-android
Jellyfin has a lot of image types:
Some of those I know of what they are meant for; primary is the cover, logo is as it says a logo.
However, for most I still have no idea where they are used and what aspect ratio is required. Recommended resolution would also be nice.
My suggestion here is to create a new page in the documentation explaining all those different image types with their use case and optimal aspect ratio / resolution.
As a stopgap measure we should be saying this much in documentation:
In the
logging.json
file under theconfigdir
(defaultdatadir/config
), you change:"MinimumLevel": "Information",
to
"MinimumLevel": "Debug",
And then restart Jellyfin. The debug messages show up in the log with the tag
DBG
.
And hide the option from Web UI (or make it a link pointing to the documentation).
Originally posted by @JustAMan in jellyfin/jellyfin#1130 (comment)
Nginx configuration for subpath needs to be updated due to base URL changing in the recent update.
I had to add /jellyfin/
for the proxy_pass
too.
I'm not sure about Nginx without subpath and the other configurations tho.
https://www.reddit.com/r/jellyfin/comments/febbcb/hardware_transcoding_question/
A few good notes to track
As the title says - at least document the implications of changing modes...DLNA, HDHR and Chromecast appear to be impacted in strange ways.
Ref: jellyfin/jellyfin#2259, jellyfin/jellyfin#1396 (comment)
URL returned to the Client - 10.5.0
x | Status | ping test | DLNA (SSDP NOTIFY) | HDHR (ffmpeg) | Chromecast |
---|---|---|---|---|---|
Disabled | โ๏ธ | http://server-ip:8096 |
http://server-ip:8096 |
http://127.0.0.1:8096 |
|
Preferred | โ | https://server-ip:8096 FAIL |
None FAIL | https://127.0.0.1:8096 FAIL |
|
Required | ๐ถ | ||||
Handled by RP | ๐ถ |
Apologies i have no idea where to share my experience with your (amazing) software but i am not at all familiar with git. Thought the documentation could probably benefit from my experience:
Setup:
What happens:
Fix:
after this change the video is working beautifully. no buffering anymore.
Couldn't get a movie with a dvd iso and a 480p MKV file to be seen as one in Emby or in Jellyfin. After talking to those cool cats in the Riot channel, we discovered that in order for the server to see multiple versions of a movie as one you must follow the rule of naming your movie as "movie name (19XX) - .dvd.iso". I was following this wiki instruction:
https://web.archive.org/web/20181216114832/https://github.com/MediaBrowser/Wiki/wiki/Movie-naming
to no avail. Luckily we found the solution. Seems like this should be updated in documentation or the code needs to be changed/updated. THank you! :)
Good writeup from reddit user arham_qureshi here with permission for somebody else to adapt. Could use some slight cleaning up and generalization, but lots of good info.
@JustAMan I add
proxy_buffering off;
. So you may needs to update documents underNginx with subpath
section. :)
Originally posted by @caoli5288 in jellyfin/jellyfin#1663 (comment)
We need to add the proxy_buffering off;
line to all nginx-related sections.
As per jellyfin/jellyfin#217 (comment), we should begin to document what features currently work/don't work as a result of the fork.
Sorry if this is inappropriate or if there is a better place to put this, but, after trying to install 10.2.2. Debian package on MX Linux 18.1 (and failing...due to it being a non-systemd distro), I started playing with the generic linux build. The documentation to date suggests using the "portable" build for linux, but unfortunately does not explain how to install or use it. When downloading it I see nothing obvious to run (there is a jellyfin.dll, but I don't see a jellyfin or jellyfin.exe for Windows users). It appears the desired download should be the "linux-amd64" variant.
The following is what I did to get it working (mostly), although there are still some holes I don't know how to fill. Can the following (or similar) be added to the documentation? Can the "to-dos" be filled in while we're at it? Again, apologies as I'm not the least bit familiar with how readthedocs gets updated. The following is more of a walkthrough, not sure this is how you want to handle documentation.
The basic process to get the generic linux build working is as follows.
Create a directory in opt for jellyfin and it's files as a root user, and change into it. The following assumes the directory is called "jellyfin"
# mkdir /opt/jellyfin
# cd /opt/jellyfin
Download the latest generic linux build from the Jellyfin release page. The generic linux build ends with "linux-amd64.tar.gz". The rest of these instructions assume version 10.2.2 is being installed (i.e. jellyfin_10.2.2_linux-amd64.tar.gz). Download the generic build, then extract the archive:
# wget https://github.com/jellyfin/jellyfin/releases/download/v10.2.2/jellyfin_10.2.2_linux-amd64.tar.gz
# tar xvzf jellyfin_10.2.2_linux-amd64.tar.gz
Create a symbolic link to the Jellyfin 10.2.2 directory. This allows an upgrade by repeating the above steps and enabling it by simply re-creating the symbolic link to the new version.
# ln -s jellyfin_10.2.2 jellyfin
If you're curious, at this point you can run the executable with the --help parameter to see all command line options. Hint: This may help you follow what is being done in the next steps.
# ./jellyfin/jellyfin --help
Create four sub-directories for Jellyfin data:
# mkdir data cache config log
If you are running Debian or a derivative, you must also download and install the Jellyfin specific ffmpeg. Be sure to download the latest release that matches your OS (4.0.3-5 for Debian Stretch assumed below).
# wget https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v4.0.3-5/jellyfin-ffmpeg_4.0.3-5-stretch_amd64.deb
# dpkg --install jellyfin-ffmpeg_4.0.3-5-stretch_amd64.deb
Due to the number of command line options that must be passed, it is easiest to create a small script (here called jellyfin.sh
) to run Jellyfin. Modify the paths as needed (the following assumes the use of the Jellyfin specific ffmpeg).
# cat jellyfin.sh
#!/bin/bash
JELLYFINDIR="/opt/jellyfin"
FFMPEGDIR="/usr/share/jellyfin-ffmpeg"
$JELLYFINDIR/jellyfin/jellyfin \
-d $JELLYFINDIR/data \
-C $JELLYFINDIR/cache \
-c $JELLYFINDIR/config \
-l $JELLYFINDIR/log \
--ffmpeg $FFMPEGDIR/ffmpeg \
--ffprobe $FFMPEGDIR/ffprobe
Assuming you desire Jellyfin to run as a non-root user, chmod all files and directories to your normal login user and group. Also make the startup script above executable.
# chown -R user:group *
# chmod u+x jellyfin.sh
Finally you can drop down to your normal user and run it. You will see lots of log information when run, this is normal. Setup is as usual in the web browser.
$ ./jellyfin.sh
To-Dos:
How does the "--service" parameter work? I expected this would make Jellyfin run as a background task, but adding this parameter doesn't seem to do anything.
What is required for a functional restart script? Is this why I don't see a 'Restart' option in the WebUI?
Thanks for hearing me out ;-).
Gist text here: https://gist.github.com/anthonylavado/9fd3acb0f0c68d5818dbf9f89b0b7fc9
Should be added to the guide.
In #16, the name Emby is used. This should be changed with Jellyfin.
could https://jellyfin.readthedocs.io/ get a 302/301 to https://docs.jellyfin.org/ having a 30 second delay is a little long
Now that the plugin repo is live and (semi) populated, https://jellyfin.readthedocs.io/en/latest/administrator-docs/plugins/ should be updated on how to use them and (possibly) include a short description about what each plugin does.
I may get to this myself eventually, but I'm opening an issue so it doesn't get lost among other things
I'd like to suggest removing the link to LazyMan from the third party plugins listed here:
https://jellyfin.readthedocs.io/en/latest/server/plugins/#lazyman
From the reddit page for LazyMan:
A simple program that lets you stream every NHL and MLB game from your favorite media player for free
While this may be acceptable in some countries, in other countries I cannot imagine where this would be legal 100% of the time. Further, while I do not disagree with the 'service' existing, it doesn't appear in the best interest for the JF project to endorse it by having it listed in the docs. This is the same stance that the Kodi team follows.
Documentation links in the Docker Hub Overview (https://hub.docker.com/r/jellyfin/jellyfin) are still pointing to the old documentation site (https://jellyfin.readthedocs.io/).
Related #15
Running jellyfin behind a reverse proxy is a common practice. I think the docs should show working configurations for Apache2 and nginx.
I have a quite well working Apache2 VirtualHost configuration:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName jellyfin.example.com
Redirect permanent / https://jellyfin.example.com
ErrorLog /var/log/apache2/jellyfin.example.com-error.log
CustomLog /var/log/apache2/jellyfin.example.com-access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName jellyfin.example.com
ProxyPreserveHost On
ProxyPass "/embywebsocket" "ws://127.0.0.1:8096/embywebsocket"
ProxyPassReverse "/embywebsocket" "ws://127.0.0.1:8096/embywebsocket"
ProxyPass "/" "http://127.0.0.1:8096/"
ProxyPassReverse "/" "http://127.0.0.1:8096/"
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/jellyfin.example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/jellyfin.example.com.key
ErrorLog /var/log/apache2/jellyfin.example.com-error.log
CustomLog /var/log/apache2/jellyfin.example.com-access.log combined
</VirtualHost>
</IfModule>
It works with: Mozilla Firefox 60 / Linux, Mozilla Firefox 64 / Android, Google Chrome 71 / Android
It does not work with PS4 and the Emby Android Mobile or TV app. The UI can be displayed but no video.
Maybe we can use this example as a base and improve it to work with more clients.
Since unlocking locked-out users (jellyfin/jellyfin#1127) is a manual process, we should document it for various platforms.
I think it may be a good option to add the Turnkey image in the documentation: https://www.turnkeylinux.org/mediaserver
So apart from just telling people to use a script.
We should not be telling people to build from the Solution. People should build and publish from the *.csproj file.
So all the commands in the documentation need a final positional argument Jellyfin.Server
.
This should be linked to jellyfin/jellyfin#335
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.