Jump to content

Dynamic folder content in channel plugin


ZR1000A1

Recommended Posts

ZR1000A1

I'm working on a channel plugin that contains nested folders. I need to be able to update the content of a folder dynamically every time the folder is entered. Is it possible?

I've tried few things (based on examples and info I could find), but nothing works. Basically, I need

public Task<ChannelItemResult> GetChannelItems(InternalChannelItemQuery query, CancellationToken cancellationToken)

method to be called every time a user enters a folder.

 

I tried:

1. Implement

IHasCacheKey 
public string GetCacheKey(string userId)

method and return random string. Does not help. Actually, I don't even see (in the Debugger) that this method gets called at all.

 

2. Many examples shows a use of

ISupportsLatestMedia
Task<IEnumerable<ChannelItemInfo>> GetLatestMedia(ChannelLatestMediaSearch request, CancellationToken cancellationToken)

but the interface does not have this method anymore and I couldn't find definition of ChannelLatestMediaSearch anywhere. But, that's probably irrelevant to my issue anyway...

 

As there is absolutely no objects/interfaces documentations, I'd like to know if there is any way to have a folder content updated every time the folder is entered?

 

Thanks

Edited by ZR1000A1
Link to comment
Share on other sites

Hi, it's no longer possible. Channel contents are updated in a background process now. This prevents stalling the UI due to channels responding slowly, and it also allows integration with all Emby features by having the content available in the database.

Link to comment
Share on other sites

ZR1000A1

Thanks for the quick reply.

Unfortunately, that makes the plugin I was going to implement totally useless. So, no reason to waste any more time... :( :( :( :(

Link to comment
Share on other sites

ZR1000A1

Unfortunately, not. The content is changing dynamically and the streams may or may not be available at the time. The idea was to make HTTP request to a server and based on its response populate folders and create media items.

Yes, it may slow down UI and I agree that it should not be the default behavior. But, it would be nice feature to have allowing a plugin to provide items update via callback

Link to comment
Share on other sites

pünktchen

Look at one of the live tv plugins. They have a "ContentChanged" event in their recording channel. Maybe you can call this event every time a user enters a subfolder category.

Link to comment
Share on other sites

ZR1000A1

Look at one of the live tv plugins. They have a "ContentChanged" event in their recording channel. Maybe you can call this event every time a user enters a subfolder category.

 

Thank you. I've looked at DVBViewerTVPlugin plugin (https://github.com/MediaBrowser/DVBViewerTVPlugin/blob/master/MediaBrowser.Plugins.DVBViewer/RecordingChannel.cs). The "ContentChanged" event is called on timer there. Do you know how I can call it when a user enters a subfolder? How does the  channel know (what method/event is called in the channel) when a user enters a subfolder?

Edited by ZR1000A1
Link to comment
Share on other sites

 

How does the  channel know (what method/event is called in the channel) when a user enters a subfolder?

 

 

There's no way to know this. The best you could do is trigger it really often, like every minute or so.

Link to comment
Share on other sites

ZR1000A1

There's no way to know this. The best you could do is trigger it really often, like every minute or so.

 

Thanks!

One more question. The channel implements:

IRequiresMediaInfoCallback
public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaInfo(string id, CancellationToken cancellationToken)

But, the method gets called only once. As soon as it returns MediaInfo, the server does not call this method again.

Is it possible to force the server to call the method every time a user selects the media item?

Link to comment
Share on other sites

ZR1000A1

Did you try playing it?

 

Yes.

The channel creates a media type item (without media info). When a user selects the item, GetChannelItemMediaInfo() gets called, it returns media info and plays a stream fine. But if the play stops and the user selects the same item again, the server does not call GetChannelItemMediaInfo() anymore (does it cache media info???).

In my case the underlying media info path (stream URL) can be changed over time and I'd like GetChannelItemMediaInfo() to be called every time the user plays the item, so I can provide an up-to-date URL. Is it possible?

 

UPDATE:

After farther testing it appears that the server does call GetChannelItemMediaInfo() again, but only if the item is selected to play after a few minutes of being stopped. It's good enough for me, but I'd like to know what causes the delay and whether it's configurable?

Edited by ZR1000A1
Link to comment
Share on other sites

ZR1000A1

When I install my plugin on Linux (Ubuntu 18.40) and new items are added, I see a lot of the same errors in the log (but the plugin still seems to work fine):

2019-11-21 00:00:33.739 Error BaseItem: Error refreshing item
	*** Error Report ***
	Version: 4.2.1.0
	Command line: /opt/emby-server/system/EmbyServer.dll -programdata /var/lib/emby -ffdetect /opt/emby-server/bin/ffdetect -ffmpeg /opt/emby-server/bin/ffmpeg -ffprobe /opt/emby-server/bin/ffprobe -restartexitcode 3 -updatepackage emby-server-deb_{version}_amd64.deb
	Operating system: Unix 4.15.0.58
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///opt/emby-server/system/System.Private.CoreLib.dll
	Processor count: 4
	Program data path: /var/lib/emby
	Application directory: /opt/emby-server/system
	System.NullReferenceException: System.NullReferenceException: Object reference not set to an instance of an object.
	   at Emby.Server.Implementations.IO.SharpCifsFileSystem.IsEnabledForPath(String path)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetDirectoryName(String path)
	   at MediaBrowser.Controller.Entities.Video.get_ContainingFolderPath()
	   at MediaBrowser.Controller.Entities.Movies.Movie.BeforeMetadataRefresh(Boolean replaceAllMetdata)
	   at MediaBrowser.Providers.Manager.MetadataService`2.RefreshMetadata(BaseItem item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
	   at MediaBrowser.Controller.Entities.BaseItem.RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken)
	   at MediaBrowser.Controller.Entities.Folder.RefreshMetadataRecursive(BaseItem[] children, MetadataRefreshOptions refreshOptions, Boolean recursive, IProgress`1 progress, CancellationToken cancellationToken)
	Source: Emby.Server.Implementations
	TargetSite: Boolean IsEnabledForPath(System.String)

That doesn't happen on Windows server (no errors in the log)

Any idea what can cause the exception on Linux?

Link to comment
Share on other sites

ZR1000A1

UPDATE:

After farther investigation, it looks like deletion of an item (not addition) causes the error above. Just before the error, there are these lines in the log:

2019-11-21 03:26:24.063 Info App: Removing item from database, Type: Movie, Name: 720p, Path: , Id: 13434
2019-11-21 03:26:24.063 Info App: Deleting path /data/embymetadata/metadata/library/95/95601cbdc28d4110ac614d09bcbaf6b5
2019-11-21 03:26:24.064 Info App: Removing item from database, Type: Movie, Name: 720p 60fps, Path: , Id: 13435
2019-11-21 03:26:24.064 Info App: Deleting path /data/embymetadata/metadata/library/22/227e3ff5ff7947c0bbaece7ef2dd5139
2019-11-21 03:26:24.066 Info App: Removing item from database, Type: Movie, Name: 504p, Path: , Id: 13436
2019-11-21 03:26:24.066 Info App: Deleting path /data/embymetadata/metadata/library/70/70e6b06ca8194095823787c3e767631c
2019-11-21 03:26:24.067 Info App: Removing item from database, Type: Movie, Name: 216p, Path: , Id: 13437
2019-11-21 03:26:24.067 Info App: Deleting path /data/embymetadata/metadata/library/fd/fd31c7d2b6154a5aa244ce50029becf9
2019-11-21 03:26:24.068 Info App: Removing item from database, Type: Movie, Name: 288p, Path: , Id: 13438
2019-11-21 03:26:24.068 Info App: Deleting path /data/embymetadata/metadata/library/86/86a2f22577a24367a9c45332b5c1dcd9
2019-11-21 03:26:24.069 Info App: Removing item from database, Type: Movie, Name: 360p, Path: , Id: 13439
2019-11-21 03:26:24.069 Info App: Deleting path /data/embymetadata/metadata/library/25/252464a04608413a8d829319daf697d3
2019-11-21 03:26:24.070 Info App: Removing item from database, Type: Movie, Name: 540p, Path: , Id: 13440
2019-11-21 03:26:24.070 Info App: Deleting path /data/embymetadata/metadata/library/a5/a599fcc4f6d547e992304ae731e03164
2019-11-21 03:26:24.072 Info App: Removing item from database, Type: Movie, Name: 720p, Path: , Id: 13441
2019-11-21 03:26:24.072 Info App: Deleting path /data/embymetadata/metadata/library/38/3894c8899b2d473499235ee9da7e5b94
2019-11-21 03:26:24.073 Info App: Removing item from database, Type: Movie, Name: 720p 60fps, Path: , Id: 13442
2019-11-21 03:26:24.073 Info App: Deleting path /data/embymetadata/metadata/library/5f/5f14fdec0d1b4acb8341582a0c9e7840

Some paths, like "/data/embymetadata/metadata/library/5f/", don't actually exist.

Is it a bug in the server?

Link to comment
Share on other sites

ZR1000A1

Another weird thing. When item ID contains '+' (plus sign), like AAAA|BBBB|CCC+|DDDD (I use '|' as a separator), the server fails to play this item! The error is:

2019-11-21 19:08:31.177 Error HttpServer: Error processing request
	*** Error Report ***
	Version: 4.2.1.0
	Command line: /opt/emby-server/system/EmbyServer.dll -programdata /var/lib/emby -ffdetect /opt/emby-server/bin/ffdetect -ffmpeg /opt/emby-server/bin/ffmpeg -ffprobe /opt/emby-server/bin/ffprobe -restartexitcode 3 -updatepackage emby-server-deb_{version}_amd64.deb
	Operating system: Unix 4.15.0.58
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Runtime: file:///opt/emby-server/system/System.Private.CoreLib.dll
	Processor count: 4
	Program data path: /var/lib/emby
	Application directory: /opt/emby-server/system
	System.ArgumentNullException: System.ArgumentNullException: Value cannot be null.
	Parameter name: mediaSource
	   at Emby.Server.MediaEncoding.Encoder.EncodingHelper.AttachMediaSourceInfo(EncodingJobInfo state, MediaSourceInfo mediaSource, String requestedUrl)
	   at Emby.Server.MediaEncoding.Api.BaseStreamingService.GetState(StreamRequest request, Boolean requiresOutputPath, CancellationToken cancellationToken)
	   at Emby.Server.MediaEncoding.Api.Hls.DynamicHlsService.GetMasterPlaylistInternal(StreamRequest request, String method)
	   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 host, ReadOnlyMemory`1 localPath, CancellationToken cancellationToken)
	Source: Emby.Server.MediaEncoding
	TargetSite: Void AttachMediaSourceInfo(Emby.Server.MediaEncoding.Encoder.EncodingJobInfo, MediaBrowser.Model.Dto.MediaSourceInfo, System.String)

As soon as I replace '+' with '_', the item plays fine.

It would be really helpful to know any other restrictions in item's ID...

Thanks

Link to comment
Share on other sites

Yea avoid | as the server will also add that and sometimes try to split the Id, so it's not expecting your id will have that.

Link to comment
Share on other sites

ZR1000A1

Yea avoid | as the server will also add that and sometimes try to split the Id, so it's not expecting your id will have that.

Thanks!

What character would you recommend to use as a spliter?

 

One more question. Is it possible for a channel to provide a default folder's sorting criteria (field, like item name, create date, etc. and order - ascending/descending), or it's completely upto a client?

Edited by ZR1000A1
Link to comment
Share on other sites

ZR1000A1

Thanks!

 

One more (hope the last :)) question.

It takes Web Browser client a very long time (over a minute!) to open a stream. Android client does not open it at all - no errors, just keeps spinning (and the only way to stop it is by killing the process). Roku client on the other hand opens the same stream almost instantly - 5 sec.

Is there any way for the plugin to make a Web Browser client to open the stream faster (maybe some ChannelItemInfo or MediaSourceInfo parameters)?

Also would be nice to make it work on Android, but I see that IPTV channel does not work on Android as well, so I assume, it's a generic issue with the client.

 

Thanks again!

Edited by ZR1000A1
Link to comment
Share on other sites

ZR1000A1

The steam the channel plays is HTTP Live Streaming Playlist (https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/live_playlist_sliding_window_construction) .M3U8 URL and looks like:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2019-11-24T21:04:01.799Z
#EXT-X-KEY:METHOD=AES-128,URI="https://***.com/.....",IV=0xXXXXXXXXXXXXX
#EXTINF:5.005,
21/04/01.ts
#EXTINF:5.005,
21/04/06.ts
#EXTINF:5.005,
21/04/11.ts
#EXTINF:5.005,
21/04/16.ts
#EXTINF:5.005,
21/04/21.ts
#EXTINF:5.005,
21/04/26.ts
#EXTINF:5.005,
21/04/31.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://***.com/.....",IV=0xXXXXXXXXXXXXX
#EXTINF:5.005,
21/04/36.ts
#EXTINF:5.005,
21/04/41.ts
#EXTINF:5.005,

The channel creates MediaSourceInfo like:

public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaInfo(string id, CancellationToken cancellationToken)
{
    ......

    return new List<MediaSourceInfo>
    {
        new MediaSourceInfo
        {
            Path = <M3U8 URL>,
            Protocol = MediaProtocol.Http,
            Name = id,
            Id = id
        }
    };
}

The result is:

 

Roku and Emby Theater (trial) - start playing fast (5 - 10 sec)

Chrome, Firefox - start playing extremely slow (over 1 minute)

Microsoft Edge and Android client - never start playing, keep spinning and spinning

 

Any suggestions on how to improve MediaSourceInfo so streams start playing faster and work on Android client?

 

Update:

This is a debug log when a stream is opened in Firefox (see 1'06" delay?):

 

>>> MediaSourceInfo returned <<<
2019-11-25 09:37:00.692 Debug MyChannel: [MyChannel][GetChannelItemMediaInfo] Starts playing: https://***.com/***.m3u8
2019-11-25 09:37:00.726 Info App: User policy for ****. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
2019-11-25 09:37:00.747 Info HttpServer: HTTP Response 200 to ::1. Time: 633ms. http://localhost:8096/emby/Items/66658/PlaybackInfo?UserId=fcab20cefd4b4f00a0ccfedcd033d89b&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&MaxStreamingBitrate=140000000

>>> 1 minute 6 seconds DELAY!!! <<<
2019-11-25 09:38:06.918 Info HttpServer: HTTP POST http://localhost:8096/emby/Sessions/Playing. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
2019-11-25 09:38:06.956 Info SessionManager: Playback start reported by app Emby Web 4.3.0.26 playing 720p 60fps. Started at 0 ms
2019-11-25 09:38:06.958 Info HttpServer: HTTP Response 204 to ::1. Time: 40ms. http://localhost:8096/emby/Sessions/Playing
2019-11-25 09:38:06.960 Debug XmlSerializer: Deserializing file C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\config\webhooks.xml
2019-11-25 09:38:06.965 Debug XmlSerializer: Deserializing file C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\config\notifications.xml
2019-11-25 09:38:07.082 Info HttpServer: HTTP POST http://localhost:8096/emby/Items/66658/PlaybackInfo?UserId=fcab20cefd4b4f00a0ccfedcd033d89b&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&EnableDirectPlay=false&EnableDirectStream=false&MediaSourceId=20191124%7C2019020362%7C70052703_MSG-B%7C720p_60fps&MaxStreamingBitrate=140000000. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
2019-11-25 09:38:07.084 Debug App: GetPostedPlaybackInfo request: {"Id":"66658","UserId":"fcab20cefd4b4f00a0ccfedcd033d89b","MaxStreamingBitrate":140000000,"StartTimeTicks":0,"MediaSourceId":"20191124|2019020362|70052703_MSG-B|720p_60fps","DeviceProfile":{"EnableAlbumArtInDidl":false,"EnableSingleAlbumArtLimit":false,"EnableSingleSubtitleLimit":false,"SupportedMediaTypes":"Audio,Photo,Video","MaxAlbumArtWidth":0,"MaxAlbumArtHeight":0,"MaxStreamingBitrate":140000000,"MusicStreamingTranscodingBitrate":192000,"TimelineOffsetSeconds":0,"RequiresPlainVideoItems":false,"RequiresPlainFolders":false,"IgnoreTranscodeByteRangeRequests":false,"XmlRootAttributes":[],"DirectPlayProfiles":[{"Container":"mp4,m4v","AudioCodec":"aac,opus,flac,vorbis","VideoCodec":"h264,vp8,vp9","Type":"Video"},{"Container":"flv","AudioCodec":"aac,mp3","VideoCodec":"h264","Type":"Video"},{"Container":"opus","Type":"Audio"},{"Container":"mp3","AudioCodec":"mp3","Type":"Audio"},{"Container":"mp2,mp3","AudioCodec":"mp2","Type":"Audio"},{"Container":"m4a","AudioCodec":"aac","Type":"Audio"},{"Container":"flac","Type":"Audio"},{"Container":"webma,webm","Type":"Audio"},{"Container":"wav","Type":"Audio"},{"Container":"ogg","Type":"Audio"},{"Container":"webm","AudioCodec":"vorbis,opus","VideoCodec":"VP8","Type":"Video"},{"Container":"webm","AudioCodec":"vorbis,opus","VideoCodec":"VP9","Type":"Video"}],"TranscodingProfiles":[{"Container":"aac","Type":"Audio","AudioCodec":"aac","Protocol":"hls","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":1,"SegmentLength":0,"BreakOnNonKeyFrames":true},{"Container":"aac","Type":"Audio","AudioCodec":"aac","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"mp3","Type":"Audio","AudioCodec":"mp3","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"opus","Type":"Audio","AudioCodec":"opus","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"wav","Type":"Audio","AudioCodec":"wav","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"opus","Type":"Audio","AudioCodec":"opus","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Static","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"mp3","Type":"Audio","AudioCodec":"mp3","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Static","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"aac","Type":"Audio","AudioCodec":"aac","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Static","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"wav","Type":"Audio","AudioCodec":"wav","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Static","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"ts","Type":"Video","VideoCodec":"h264","AudioCodec":"aac","Protocol":"hls","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":1,"SegmentLength":0,"BreakOnNonKeyFrames":true,"ManifestSubtitles":"vtt"},{"Container":"webm","Type":"Video","VideoCodec":"vpx","AudioCodec":"vorbis","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Streaming","MaxAudioChannels":"2","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false},{"Container":"mp4","Type":"Video","VideoCodec":"h264","AudioCodec":"aac,opus,flac,vorbis","Protocol":"http","EstimateContentLength":false,"EnableMpegtsM2TsMode":false,"TranscodeSeekInfo":"Auto","CopyTimestamps":false,"Context":"Static","MinSegments":0,"SegmentLength":0,"BreakOnNonKeyFrames":false}],"ContainerProfiles":[],"CodecProfiles":[{"Type":"VideoAudio","Conditions":[{"Condition":"Equals","Property":"IsSecondaryAudio","Value":"false","IsRequired":false}],"ApplyConditions":[],"Codec":"aac"},{"Type":"VideoAudio","Conditions":[{"Condition":"Equals","Property":"IsSecondaryAudio","Value":"false","IsRequired":false}],"ApplyConditions":[]},{"Type":"Video","Conditions":[{"Condition":"EqualsAny","Property":"VideoProfile","Value":"high|main|baseline|constrained baseline","IsRequired":false},{"Condition":"LessThanEqual","Property":"VideoLevel","Value":"51","IsRequired":false}],"ApplyConditions":[],"Codec":"h264"}],"ResponseProfiles":[{"Container":"m4v","Type":"Video","MimeType":"video/mp4","Conditions":[]}],"SubtitleProfiles":[{"Format":"vtt","Method":"Hls"},{"Format":"vtt","Method":"External"},{"Format":"ass","Method":"External"},{"Format":"ssa","Method":"External"}]},"EnableDirectPlay":false,"EnableDirectStream":false,"EnableTranscoding":true,"AllowVideoStreamCopy":true,"AllowAudioStreamCopy":true,"IsPlayback":true,"AutoOpenLiveStream":true,"DirectPlayProtocols":["Http"]}
2019-11-25 09:38:07.086 Info App: User policy for ***. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
2019-11-25 09:38:07.086 Info HttpServer: HTTP Response 200 to ::1. Time: 4ms. http://localhost:8096/emby/Items/66658/PlaybackInfo?UserId=fcab20cefd4b4f00a0ccfedcd033d89b&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&EnableDirectPlay=false&EnableDirectStream=false&MediaSourceId=20191124%7C2019020362%7C70052703_MSG-B%7C720p_60fps&MaxStreamingBitrate=140000000
2019-11-25 09:38:07.103 Info HttpServer: HTTP GET http://localhost:8096/emby/videos/66658/master.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC83MC4wfDE1NzM2MDc0Njg4MDE1&MediaSourceId=20191124|2019020362|70052703_MSG-B|720p_60fps&PlaySessionId=faabe12e1c7d4c04b7e439500e4bfbcd&VideoCodec=h264&AudioCodec=aac&VideoBitrate=139808000&AudioBitrate=192000&TranscodingMaxAudioChannels=2&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&ManifestSubtitles=vtt&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&TranscodeReasons=ContainerNotSupported.Host=localhost:8096, User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0, Accept=*/*, Accept-Language=en-US,en;q=0.5, Accept-Encoding=gzip, deflate, Connection=keep-alive, Referer=http://localhost:8096/web/index.html, DNT=1
2019-11-25 09:38:07.110 Debug App: Master playlist:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=168000000,AVERAGE-BANDWIDTH=140000000,VIDEO-RANGE=SDR,CODECS="avc1.640029,mp4a.40.2"
live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC83MC4wfDE1NzM2MDc0Njg4MDE1&MediaSourceId=20191124|2019020362|70052703_MSG-B|720p_60fps&PlaySessionId=faabe12e1c7d4c04b7e439500e4bfbcd&api_key=71e1dd4e2d4b4e1789f9428f81988486&VideoCodec=h264&AudioCodec=aac&VideoBitrate=139808000&AudioBitrate=192000&TranscodingMaxAudioChannels=2&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&ManifestSubtitles=vtt&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&TranscodeReasons=ContainerNotSupported

2019-11-25 09:38:07.111 Info HttpServer: HTTP Response 200 to ::1. Time: 8ms. http://localhost:8096/emby/videos/66658/master.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC83MC4wfDE1NzM2MDc0Njg4MDE1&MediaSourceId=20191124|2019020362|70052703_MSG-B|720p_60fps&PlaySessionId=faabe12e1c7d4c04b7e439500e4bfbcd&VideoCodec=h264&AudioCodec=aac&VideoBitrate=139808000&AudioBitrate=192000&TranscodingMaxAudioChannels=2&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&ManifestSubtitles=vtt&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&TranscodeReasons=ContainerNotSupported
2019-11-25 09:38:07.123 Info HttpServer: HTTP GET http://localhost:8096/emby/videos/66658/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC83MC4wfDE1NzM2MDc0Njg4MDE1&MediaSourceId=20191124|2019020362|70052703_MSG-B|720p_60fps&PlaySessionId=faabe12e1c7d4c04b7e439500e4bfbcd&VideoCodec=h264&AudioCodec=aac&VideoBitrate=139808000&AudioBitrate=192000&TranscodingMaxAudioChannels=2&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&ManifestSubtitles=vtt&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&TranscodeReasons=ContainerNotSupported.Host=localhost:8096, User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0, Accept=*/*, Accept-Language=en-US,en;q=0.5, Accept-Encoding=gzip, deflate, Connection=keep-alive, Referer=http://localhost:8096/web/index.html, DNT=1
2019-11-25 09:38:07.128 Debug App: CodecValidation: FindVideoEncoder - Media: h264, UseHardwareCodecs: True, Mode: Automatic
2019-11-25 09:38:07.133 Debug App: CodecValidation: FindVideoEncoder - Checking: 'libx264 Software Encoder' (Priority: 0)
2019-11-25 09:38:07.133 Debug App: CodecValidation: Encoder supports input stream
2019-11-25 09:38:07.133 Debug App: CodecValidation: FindVideoEncoder - Check successful - selecting 'libx264 Software Encoder'
2019-11-25 09:38:07.154 Info App: ProcessRun 'StreamTranscode 415471' Execute: C:\Users\ifurman\AppData\Roaming\Emby-Server\system\ffmpeg.exe -loglevel +timing -i "https://***.com/***.m3u8"-map_metadata -1 -map_chapters -1 -threads 0 -sn -c:v:0 libx264 -pix_fmt yuv420p  -maxrate 139808000 -bufsize 279616000 -preset veryfast -profile:v:0 high -level:v:0 4.1 -crf 23 -x264opts:0 subme=0:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none -force_key_frames "expr:if(isnan(prev_forced_t),eq(t,t),gte(t,prev_forced_t+3))" -vsync -1 -codec:a:0 aac -disposition:a:0 default -ac:a:0 2 -ab:a:0 192000  -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time 3  -individual_header_trailer 0 -segment_format mpegts -segment_write_temp 1 -segment_list_entry_prefix "hls/4424e592e4f270758209ba6ed5fbac0a/" -segment_list_type m3u8 -segment_start_number 0 -segment_list "C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\transcoding-temp\4424e592e4f270758209ba6ed5fbac0a.m3u8" -y "C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\transcoding-temp\4424e592e4f270758209ba6ed5fbac0a%d.ts"
2019-11-25 09:38:07.162 Debug App: ProcessRun 'StreamTranscode 415471' Started.
2019-11-25 09:38:10.259 Debug App: Waiting for 1 segments in C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\transcoding-temp\4424e592e4f270758209ba6ed5fbac0a.m3u8
2019-11-25 09:38:10.266 Debug App: Finished waiting for 1 segments in C:\Users\ifurman\AppData\Roaming\Emby-Server\programdata\transcoding-temp\4424e592e4f270758209ba6ed5fbac0a.m3u8
2019-11-25 09:38:10.275 Info HttpServer: HTTP Response 200 to ::1. Time: 3151ms. http://localhost:8096/emby/videos/66658/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC83MC4wfDE1NzM2MDc0Njg4MDE1&MediaSourceId=20191124|2019020362|70052703_MSG-B|720p_60fps&PlaySessionId=faabe12e1c7d4c04b7e439500e4bfbcd&VideoCodec=h264&AudioCodec=aac&VideoBitrate=139808000&AudioBitrate=192000&TranscodingMaxAudioChannels=2&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&ManifestSubtitles=vtt&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&TranscodeReasons=ContainerNotSupported
2019-11-25 09:38:10.289 Info HttpServer: HTTP GET http://localhost:8096/emby/videos/66658/hls/4424e592e4f270758209ba6ed5fbac0a/4424e592e4f270758209ba6ed5fbac0a0.ts. Host=localhost:8096, User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0, Accept=*/*, Accept-Language=en-US,en;q=0.5, Accept-Encoding=gzip, deflate, Connection=keep-alive, Referer=http://localhost:8096/web/index.html, DNT=1
2019-11-25 09:38:10.308 Info HttpServer: HTTP Response 200 to ::1. Time: 19ms. http://localhost:8096/emby/videos/66658/hls/4424e592e4f270758209ba6ed5fbac0a/4424e592e4f270758209ba6ed5fbac0a0.ts
2019-11-25 09:38:10.597 Info HttpServer: HTTP POST http://localhost:8096/emby/Sessions/Playing/Progress. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
2019-11-25 09:38:10.640 Info HttpServer: HTTP Response 204 to ::1. Time: 43ms. http://localhost:8096/emby/Sessions/Playing/Progress
 

Edited by ZR1000A1
Link to comment
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...