I am making a small channel that plays some RTMP video streams it plays fine on both Mac OSX and Windows using the Real RTMP in the plist, however I can’t get this channel to play in either iOS client the official one or the ATV2 client (this client does however play the audio). Is there something I can do on my end or is this something that is handled by the client? My understanding was that if it used RealRTMP that the server would do all the heavy lifting. Thanks. If you need to see code please let me know.
It definitely should play on iOS although I believe the aTV client does not currently "understand" how to make requests for RealRTMP to be transcoded so it won't work there. If the stream is a basic RTMP stream without Encryption (RTMPE) or the need for swf-verification, then PMS should fallback to using the old webkit-transcode method for non-RealRTMP-aware clients. What version of the iOS client are you using? What platform and version of PMS?
The desktop Plex client handles the RTMP streams natively (since version 0.9.5.3) so that would explain why it works on Windows and OSX.
Thanks for the quick reply here is the log when trying to play from iOS 2.5.1 from 0.9.6.9-8fd9c6a
<br />
<br />
2012-10-10 15:33:29,661 (30f8) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-10 15:33:29,663 (30f8) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-10 15:33:29,664 (30f8) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-10 15:33:29,664 (30f8) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-10 15:33:29,664 (30f8) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-10 15:33:29,664 (30f8) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-10 15:33:29,665 (30f8) : WARNING (objectkit:176) - The 'platforms' attribute is deprecated and should not be assigned.<br />
2012-10-10 15:33:29,665 (30f8) : WARNING (objectkit:176) - The 'protocols' attribute is deprecated and should not be assigned.<br />
2012-10-10 15:33:29,667 (30f8) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-10 15:33:29,667 (30f8) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-10 15:33:29,668 (30f8) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-10 15:33:29,668 (30f8) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-10 15:33:29,670 (30f8) : WARNING (objectkit:176) - Media part has no streams - attempting to synthesize<br />
2012-10-10 15:33:29,671 (30f8) : DEBUG (services:598) - No service found for URL 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true'<br />
2012-10-10 15:33:29,671 (30f8) : DEBUG (services:613) - No matching services found for 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true'<br />
2012-10-10 15:33:29,673 (30f8) : DEBUG (services:41) - Loading service code for Fallback (URLServiceRecord)<br />
2012-10-10 15:33:29,799 (30f8) : INFO (services:691) - No normalization function found for URL 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true'<br />
2012-10-10 15:33:29,801 (30f8) : DEBUG (services:598) - No service found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-10 15:33:29,801 (30f8) : DEBUG (services:613) - No matching services found for 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-10 15:33:29,802 (30f8) : INFO (services:691) - No normalization function found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-10 15:33:29,803 (30f8) : DEBUG (runtime:843) - Response: [200] MediaContainer, 2810 bytes<br />
<br />
<br />
using this code to play the stream
<br />
vco = VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , url = "rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true")<br />
vco.add(MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )]))<br />
oc.add(vco)<br />
It looks like it's trying to find an URL service to handle the parsing the "web-page" for video playback. I think we can probably tweak your code to make it happier.
I haven't had a chance to actually test your code or my suggestion but, I'm pretty sure the problem (or at least part of it) stems from specifying the rtmp url in the "url" parameter of your VideoClipObject.
There are two different ways to handle this.
(1) You could create an URL Service to handle "http://blog.livenewschat.tv/rockinroosters" which would then return the MediaObject containing the RTMPVideoURL. The benefit to doing it this way, is that then it's possible to add support for the PlexIt bookmarklet on that site.
OR
(2) Remove the the "url" parameter and all the contained data from the VideoClipObject and instead specify a "key" parameter and a "rating_key" parameter. The "rating_key" is a unique string to identify the video, usually the URL ("http://blog.livenewschat.tv/rockinroosters"). The "key" parameter takes a Callback to a function which will return a populated VideoClipObject.
<br />
vco = VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="http://blog.livenewschat.tv/rockinroosters/", key=Callback(Lookup))<br />
vco.add(MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )]))<br />
oc.add(vco)<br />
<br />
###<br />
###<br />
def Lookup():<br />
return VideoClipObject((title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="http://blog.livenewschat.tv/rockinroosters/", key=Callback(Lookup),<br />
items = [MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )])])<br />
It seems kind of redundant but it's necessary. When using an URL Service (as in option 1), this is all done for you behind the scenes.
I should also mention that live RTMP streams are somewhat untested. I don’t think there are currently any plugins in the Channel Directory that use live RTMP. It should be supported but, I know one of the other plugin developers has been having a heck of a time with it while working on a different plugin.
Yeah I am thinking it might just be that the live rtmp streams are fickle. I tried your updated code and it still works great on Windows / Mac OSX but no go with the official iOS client
<br />
2012-10-11 13:48:46,305 (394) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-11 13:48:46,308 (394) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-11 13:48:46,309 (394) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032055B0><br />
2012-10-11 13:48:46,309 (394) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:48:46,311 (394) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:48:46,311 (394) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:46,312 (394) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:46,312 (394) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:48:46,312 (394) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:48:46,313 (394) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:46,313 (394) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:46,316 (394) : DEBUG (services:598) - No service found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:48:46,316 (394) : DEBUG (services:613) - No matching services found for 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:48:46,319 (394) : INFO (services:691) - No normalization function found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:48:46,321 (394) : DEBUG (runtime:843) - Response: [200] MediaContainer, 2376 bytes<br />
2012-10-11 13:48:48,769 (1658) : DEBUG (runtime:654) - Handling request GET /video/LiveTV/:/function/Lookup?function_args=Y2VyZWFsMQoxCmRpY3QKMApyMAo_<br />
2012-10-11 13:48:48,770 (1658) : DEBUG (runtime:750) - Found route matching /video/LiveTV/:/function/Lookup<br />
2012-10-11 13:48:48,772 (1658) : DEBUG (runtime:143) - Calling function 'Lookup'<br />
2012-10-11 13:48:48,773 (1658) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032055B0><br />
2012-10-11 13:48:48,773 (1658) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:48:48,773 (1658) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:48:48,773 (1658) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:48,775 (1658) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:48:48,778 (1658) : DEBUG (runtime:843) - Response: [200] VideoClipObject, 819 bytes<br />
2012-10-11 13:49:03,207 (2020) : DEBUG (runtime:654) - Handling request GET /video/LiveTV/:/function/Lookup?function_args=Y2VyZWFsMQoxCmRpY3QKMApyMAo_<br />
2012-10-11 13:49:03,210 (2020) : DEBUG (runtime:750) - Found route matching /video/LiveTV/:/function/Lookup<br />
2012-10-11 13:49:03,210 (2020) : DEBUG (runtime:143) - Calling function 'Lookup'<br />
2012-10-11 13:49:03,210 (2020) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032055B0><br />
2012-10-11 13:49:03,210 (2020) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:49:03,211 (2020) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:49:03,213 (2020) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:03,213 (2020) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:03,216 (2020) : DEBUG (runtime:843) - Response: [200] VideoClipObject, 819 bytes<br />
2012-10-11 13:49:11,260 (1498) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-11 13:49:11,263 (1498) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-11 13:49:11,263 (1498) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032055B0><br />
2012-10-11 13:49:11,265 (1498) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:49:11,266 (1498) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:49:11,266 (1498) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:11,266 (1498) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:11,267 (1498) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-11 13:49:11,269 (1498) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-11 13:49:11,269 (1498) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:11,269 (1498) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-11 13:49:11,272 (1498) : DEBUG (services:598) - No service found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:49:11,273 (1498) : DEBUG (services:613) - No matching services found for 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:49:11,275 (1498) : INFO (services:691) - No normalization function found for URL 'rtmp://176.31.231.57/edge playpath=5fvqxtgvyn2m9n1 swfUrl=http://cdn.static.ilive.to/jwplayer/player.swf pageUrl=http://www.ilive.to/view/26798/The_Best_Station swfVfy=true live=true'<br />
2012-10-11 13:49:11,278 (1498) : DEBUG (runtime:843) - Response: [200] MediaContainer, 2376 bytes<br />
<br />
Do you think going the service route will help any? Do I gain anything? Any chance of it working on the iOS client?
By default, the iOS client (as well as others) will attempt to grab as much info about a video as possible before starting playback. Usually, that means using the URL Service lookup. It seems like iOS is still trying to do that with your plugin which likely means that something isn't quite right with the code I gave you. My instinct is to implement the URL Service as it then uses the framework to handle a bunch of the finicky details and will give iOS the best chance of playing the video. That being said, it should be possible to implement it without an URL Service but I tend to think in terms of URL Services now because that's really the way the v2.1 plugin framework is geared.
ok so if I make a service what URL will I put in my original video object? The RTMP or just the page that hosts it?
also I wanted to try and eventually use this xml file to be able to keep up more streams (this msnbc one is just for me cause I like to have the stream available wherever I go lol)
http://f.cl.ly/items/1D3O0M3s333c2K2Y0B3J/TVCh.xml
would I then make a service that matched all the different page or rtmp urls?
There are a few ways to handle the URL that you pass to an URL Service. I the strict form that is used to support the PlexIt bookmarklet, the URL needs to match the page that hosts the video stream. In this case "http://blog.livenewschat.tv/rockinroosters/". However, if you're not interested/concerned about bookmarklet support and just keep the URL Service inside the plugin bundle, you can use whatever you want for the URL. Although, I would steer clear of using the RTMP URL as that could be problematic. When writing the URL Service you can specify whatever URL Patter you want (in the ServiceInfo.plist). Even something like the following:
<br />
<key>URL Patterns</key><br />
<array><br />
<string>MY_PLUGIN://title=.+?\&url=.+?\&swf_url=.+?\&swfVfy=.\&live=.+?\&thumb=.+?</string><br />
</array><br />
Essentially, you can just use the URL to pass the information to the URL Service rather than hard-coding the information within the URL Service or making a separate service to match each host website.
Ok I’m trying to get this but obviously not doing something right I decided to make a simple service just to try and get it working now. so I added this to my Info.plist
<br />
<key>PlexURLServices</key><br />
<dict><br />
<key>MSNBCLIVE</key><br />
<dict><br />
<key>Identifier</key><br />
<string>com.plexapp.plugins.msnbclivestream</string><br />
<key>URLPattern</key><br />
<string>msnbclive://testing</string><br />
<key>TestURLs</key><br />
<array><br />
<string>msnbclive://testing</string><br />
</array><br />
</dict><br />
</dict><br />
<br />
then in Contents\URL Services\MSNBCLIVE\ServiceCode.pys I added this code
<br />
####################################################################################################<br />
<br />
def MetadataObjectForURL(url):<br />
vc = VideoClipObject(<br />
title = url, url = url)<br />
return vc<br />
<br />
<br />
def MediaObjectsForURL(url):<br />
<br />
return [MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )])]<br />
<br />
def NormalizeURL(url):<br />
return url<br />
<br />
<br />
####################################################################################################<br />
<br />
def PlayVideo(url):<br />
Log(url)<br />
return Redirect(url)<br />
then modified my main code to just have a video object with the url as the rating_key
<br />
<br />
vco = VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="msnbclive://testing/", key=Callback(Lookup))<br />
vco.add(MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )]))<br />
oc.add(vco)<br />
<br />
###<br />
###<br />
def Lookup():<br />
return VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="msnbclive://testing/", key=Callback(Lookup),<br />
items = [MediaObject(<br />
container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )])])<br />
####################################################################################################<br />
<br />
now again it plays on desktop clients fine i get no errors on iOS but I also don't see any errors I am just wondering if I did the part so that it will use the URL service correct
<br />
<br />
2012-10-12 15:27:22,301 (77c) : INFO (core:336) - Starting framework core - Version: 2.2.1.3, Build: 437c0ba (Wed Sep 05 20:31:40 UTC 2012)<br />
2012-10-12 15:27:22,302 (77c) : DEBUG (core:348) - Using the standard policy<br />
2012-10-12 15:27:22,303 (77c) : DEBUG (core:437) - Starting runtime component.<br />
2012-10-12 15:27:22,308 (77c) : DEBUG (core:437) - Starting caching component.<br />
2012-10-12 15:27:22,309 (77c) : DEBUG (core:437) - Starting data component.<br />
2012-10-12 15:27:22,309 (77c) : DEBUG (core:437) - Starting networking component.<br />
2012-10-12 15:27:22,309 (77c) : DEBUG (networking:306) - Loaded HTTP cookies<br />
2012-10-12 15:27:22,311 (77c) : DEBUG (networking:492) - Setting the default network timeout to 20.0<br />
2012-10-12 15:27:22,312 (77c) : DEBUG (core:437) - Starting localization component.<br />
2012-10-12 15:27:22,312 (77c) : INFO (localization:408) - Setting the default locale to en-us<br />
2012-10-12 15:27:22,313 (77c) : DEBUG (localization:426) - Loaded en strings<br />
2012-10-12 15:27:22,313 (77c) : DEBUG (core:437) - Starting messaging component.<br />
2012-10-12 15:27:22,315 (77c) : DEBUG (core:437) - Starting debugging component.<br />
2012-10-12 15:27:22,315 (77c) : DEBUG (core:437) - Starting services component.<br />
2012-10-12 15:27:22,315 (ce0) : DEBUG (networking:160) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.plugins.msnbclivestream'<br />
2012-10-12 15:27:22,316 (77c) : DEBUG (core:437) - Starting myplex component.<br />
2012-10-12 15:27:22,319 (77c) : DEBUG (core:437) - Starting notifications component.<br />
2012-10-12 15:27:22,493 (77c) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.plugins.msnbclivestream in namespace 'metadata'<br />
2012-10-12 15:27:22,509 (77c) : DEBUG (runtime:1036) - Created a thread named 'load_all_services'<br />
2012-10-12 15:27:22,509 (3024) : DEBUG (services:263) - Plug-in is not daemonized - loading services from system<br />
2012-10-12 15:27:22,512 (77c) : DEBUG (runtime:1036) - Created a thread named 'get_server_info'<br />
2012-10-12 15:27:22,513 (3d4) : DEBUG (networking:160) - Requesting 'http://127.0.0.1:32400'<br />
2012-10-12 15:27:22,515 (77c) : DEBUG (core:149) - Finished starting framework core<br />
2012-10-12 15:27:22,515 (3024) : DEBUG (networking:160) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_'<br />
2012-10-12 15:27:22,516 (77c) : DEBUG (core:547) - Loading plug-in code<br />
2012-10-12 15:27:22,543 (3d4) : DEBUG (core:525) - Machine identifier is 61907178b87414f1c57ff9a27871f308677e15cc<br />
2012-10-12 15:27:22,545 (3d4) : DEBUG (core:526) - Server version is 0.9.6.9-8fd9c6a<br />
2012-10-12 15:27:22,549 (77c) : DEBUG (core:553) - Finished loading plug-in code<br />
2012-10-12 15:27:22,549 (77c) : DEBUG (runtime:604) - Adding a prefix handler for 'LiveTV' ('/video/LiveTV')<br />
2012-10-12 15:27:22,555 (77c) : INFO (core:598) - Started plug-in<br />
2012-10-12 15:27:22,556 (77c) : DEBUG (socketinterface:141) - Starting socket server<br />
2012-10-12 15:27:22,559 (77c) : DEBUG (runtime:1036) - Created a thread named 'start'<br />
2012-10-12 15:27:22,559 (77c) : INFO (socketinterface:165) - Socket server started on port 10297<br />
2012-10-12 15:27:22,559 (77c) : INFO (pipeinterface:25) - Entering run loop<br />
2012-10-12 15:27:22,561 (77c) : DEBUG (runtime:654) - Handling request GET /:/prefixes<br />
2012-10-12 15:27:22,562 (77c) : DEBUG (runtime:750) - Found route matching /:/prefixes<br />
2012-10-12 15:27:22,563 (77c) : DEBUG (runtime:843) - Response: [200] MediaContainer, 472 bytes<br />
2012-10-12 15:27:22,710 (3024) : DEBUG (services:357) - Loaded services<br />
2012-10-12 15:27:22,717 (287c) : DEBUG (services:433) - No shared code to load<br />
2012-10-12 15:27:25,716 (2964) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-12 15:27:25,717 (2964) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-12 15:27:25,719 (2964) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:27:25,720 (2964) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:Windows Product:None Client:0.9.5.4 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:27:25,720 (2964) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:27:25,720 (2964) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:25,720 (2964) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:25,721 (2964) : WARNING (objectkit:176) - The 'platforms' attribute is deprecated and should not be assigned.<br />
2012-10-12 15:27:25,721 (2964) : WARNING (objectkit:176) - The 'protocols' attribute is deprecated and should not be assigned.<br />
2012-10-12 15:27:25,723 (2964) : WARNING (objectkit:176) - Media part has no streams - attempting to synthesize<br />
2012-10-12 15:27:25,724 (2964) : DEBUG (runtime:843) - Response: [200] MediaContainer, 1043 bytes<br />
2012-10-12 15:27:39,115 (304c) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-12 15:27:39,118 (304c) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-12 15:27:39,118 (304c) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:27:39,121 (304c) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:27:39,121 (304c) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:27:39,121 (304c) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:39,121 (304c) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:39,125 (304c) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 15:27:39,125 (304c) : DEBUG (runtime:843) - Response: [200] MediaContainer, 1043 bytes<br />
2012-10-12 15:27:40,746 (2030) : DEBUG (runtime:654) - Handling request GET /video/LiveTV/:/function/Lookup?function_args=Y2VyZWFsMQoxCmRpY3QKMApyMAo_<br />
2012-10-12 15:27:40,747 (2030) : DEBUG (runtime:49) - Received packed state data (80 bytes)<br />
2012-10-12 15:27:40,767 (2030) : DEBUG (runtime:750) - Found route matching /video/LiveTV/:/function/Lookup<br />
2012-10-12 15:27:40,769 (2030) : DEBUG (runtime:143) - Calling function 'Lookup'<br />
2012-10-12 15:27:40,769 (2030) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:27:40,770 (2030) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:27:40,770 (2030) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:27:40,772 (2030) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:40,772 (2030) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:40,776 (2030) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 15:27:40,776 (2030) : DEBUG (runtime:843) - Response: [200] VideoClipObject, 796 bytes<br />
2012-10-12 15:27:43,184 (2248) : DEBUG (runtime:654) - Handling request GET /video/LiveTV/:/function/Lookup?function_args=Y2VyZWFsMQoxCmRpY3QKMApyMAo_<br />
2012-10-12 15:27:43,186 (2248) : DEBUG (runtime:49) - Received packed state data (80 bytes)<br />
2012-10-12 15:27:43,187 (2248) : DEBUG (runtime:750) - Found route matching /video/LiveTV/:/function/Lookup<br />
2012-10-12 15:27:43,187 (2248) : DEBUG (runtime:143) - Calling function 'Lookup'<br />
2012-10-12 15:27:43,187 (2248) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:27:43,188 (2248) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:27:43,188 (2248) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:27:43,190 (2248) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:43,190 (2248) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:27:43,193 (2248) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 15:27:43,194 (2248) : DEBUG (runtime:843) - Response: [200] VideoClipObject, 796 bytes<br />
2012-10-12 15:30:02,447 (2934) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-12 15:30:02,450 (2934) : DEBUG (runtime:49) - Received packed state data (80 bytes)<br />
2012-10-12 15:30:02,451 (2934) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-12 15:30:02,451 (2934) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:30:02,453 (2934) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:30:02,454 (2934) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:30:02,454 (2934) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:30:02,454 (2934) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:30:02,457 (2934) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 15:30:02,457 (2934) : DEBUG (runtime:843) - Response: [200] MediaContainer, 1043 bytes<br />
2012-10-12 15:30:04,576 (2df0) : DEBUG (runtime:654) - Handling request GET /video/LiveTV/:/function/Lookup?function_args=Y2VyZWFsMQoxCmRpY3QKMApyMAo_<br />
2012-10-12 15:30:04,578 (2df0) : DEBUG (runtime:49) - Received packed state data (80 bytes)<br />
2012-10-12 15:30:04,579 (2df0) : DEBUG (runtime:750) - Found route matching /video/LiveTV/:/function/Lookup<br />
2012-10-12 15:30:04,581 (2df0) : DEBUG (runtime:143) - Calling function 'Lookup'<br />
2012-10-12 15:30:04,582 (2df0) : WARNING (runtime:984) - Generating a callback path for a function with no route: <function Lookup at 0x032A5570><br />
2012-10-12 15:30:04,582 (2df0) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 15:30:04,582 (2df0) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-12 15:30:04,582 (2df0) : DEBUG (objectkit:673) - The 'width' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:30:04,584 (2df0) : DEBUG (objectkit:675) - The 'height' argument has no effect when using real RTMP playback.<br />
2012-10-12 15:30:04,585 (2df0) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 15:30:04,586 (2df0) : DEBUG (runtime:843) - Response: [200] VideoClipObject, 796 bytes<br />
<br />
<br />
I also tried a simpler test and go these results with no play back on iOS or Desktop client and I am thinking it's cause it's using webkit rtmp
201 unable to load stream or web clip
<br />
vc1 = VideoClipObject(title = 'URL Test', summary = 'Live', thumb = '', url='msnbclive://testing')<br />
oc.add(vc1)<br />
<br />
<br />
2012-10-12 17:34:40,295 (2f24) : DEBUG (services:357) - Loaded services<br />
2012-10-12 17:34:40,298 (3510) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-12 17:34:40,302 (3510) : DEBUG (services:41) - Loading service code for MSNBCLIVE (URLServiceRecord)<br />
2012-10-12 17:34:40,306 (2938) : DEBUG (services:433) - No shared code to load<br />
2012-10-12 17:34:40,335 (3510) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-12 17:34:40,338 (3510) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-12 17:34:40,339 (3510) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:False Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-12 17:34:40,341 (3510) : DEBUG (objectkit:724) - Using WebKit RTMP (True, False, True)<br />
2012-10-12 17:34:40,345 (3510) : DEBUG (runtime:106) - Sending packed state data (116 bytes)<br />
2012-10-12 17:34:40,345 (3510) : DEBUG (runtime:843) - Response: [200] MediaContainer, 1984 bytes<br />
You're getting very close but the URL Service structure you are using is old and no longer supported (I know: "Too Old?! This is a new framework :P "). The plugin bundle structure should look like:
<br />
Contents/<br />
Info.plist<br />
Code/<br />
__init__.py<br />
Resources/<br />
art-default.jpg<br />
icon-default.png<br />
Services/<br />
ServiceInfo.plist<br />
URL/<br />
MSNBCLIVE/<br />
ServiceCode.pys<br />
The definition for the URL Service goes in the ServiceInfo.plist now rather than the Info.plist and looks like this (from the NickJr. plugin [https://github.com/p...rviceInfo.plist](https://github.com/plexinc-plugins/NickJr.bundle/blob/master/Contents/Services/ServiceInfo.plist)):
<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><br />
<plist version="1.0"><br />
<dict><br />
<key>URL</key><br />
<dict><br />
<key>NickJr</key><br />
<dict><br />
<key>TestURLs</key><br />
<array><br />
<string>http://media.mtvnservices.com/mgid:cms:item:nickjr.com:113022</string><br />
<string>http://media.mtvnservices.com/mgid:cms:item:nickjr.com:103671</string><br />
<string>http://media.mtvnservices.com/mgid:cms:item:nickjr.com:86482</string><br />
</array><br />
<key>URLPatterns</key><br />
<array><br />
<string>http://media.mtvnservices.com/.+nickjr.com:\d+</string><br />
</array><br />
</dict><br />
</dict><br />
<key>PlexFrameworkFlags</key><br />
<array><br />
<string>UseRealRTMP</string><br />
</array><br />
</dict><br />
</plist><br />
Your ServiceCode.pys looks very close to what it needs to be with a few exceptions:
<br />
####################################################################################################<br />
<br />
def MetadataObjectForURL(url):<br />
''' you don't need to pass the url in the MetadataObject. it's done already automatically '''<br />
vc = VideoClipObject( title = url )<br />
#vc = VideoClipObject(<br />
# title = url, url = url)<br />
return vc<br />
<br />
<br />
def MediaObjectsForURL(url):<br />
<br />
return [MediaObject(<br />
### I think it's best not to specify MP4 as the container type for the RTMP stream since it will need to be transcoded for most clients anyway. ###<br />
#container = Container.MP4,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True,<br />
#### You're trying to pass too much info in the "url" parameter, which should be declared. the url is the actual rtmp url. The clip is the playpath, specifying the swf_url automatically assigns swfVfy as true. The pageUrl is not a necessary parameter. Also "height" and "width" are irrelevant when using RealRTMP #####<br />
parts = [PartObject(key = RTMPVideoURL(url="rtmp://a.cdn.msnbclive.eu/edge", clip="msnbc_live", swfUrl="http://msnbclive.eu/player.swf", live=True) )])]<br />
#parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )])]<br />
<br />
def NormalizeURL(url):<br />
return url<br />
<br />
<br />
####################################################################################################<br />
''' Since you're defining the key to the MediaObject directly in the MediaObjectsForURL(), you don't need the PlayVideo() '''<br />
#def PlayVideo(url):<br />
# Log(url)<br />
# return Redirect(url)<br />
For your plugin code, you no longer need the rating_key and key parameters. Rather you should be using the url parameter to call your URL Service. You also don't need to include the Lookup function or details about the MediaObject in the plugin code.
<br />
vco = VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , url="msnbclive://testing")<br />
#vco = VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="msnbclive://testing/", key=Callback(Lookup))<br />
#vco.add(MediaObject(<br />
#container = Container.MP4,<br />
#video_codec = VideoCodec.H264,<br />
#audio_codec = AudioCodec.AAC,<br />
#audio_channels = 2,<br />
#optimized_for_streaming = True,<br />
#parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )]))<br />
oc.add(vco)<br />
<br />
###<br />
###<br />
#def Lookup():<br />
# return VideoClipObject(title = "MSNBC", summary = "Live MSNBC", thumb ='http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg' , rating_key="msnbclive://testing/", key=Callback(Lookup),<br />
# items = [MediaObject(<br />
# container = Container.MP4,<br />
# video_codec = VideoCodec.H264,<br />
# audio_codec = AudioCodec.AAC,<br />
# audio_channels = 2,<br />
# optimized_for_streaming = True,<br />
# parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )])])<br />
####################################################################################################<br />
<br />
If you're interested, here's a dev blog article about url services: devblog.plexapp.com/2012/05/11/the-power-of-the-url-service/
Mikedm139 thanks for all the help! I finally understand how it’s supposed to work I was caught in between the two different approaches, the blog post and your break down really got me to understand. My log finally looks like it should
<br />
2012-10-13 14:25:19,838 (299c) : DEBUG (runtime:654) - Handling request GET /video/LiveTV<br />
2012-10-13 14:25:19,841 (299c) : DEBUG (runtime:750) - Found route matching /video/LiveTV<br />
2012-10-13 14:25:19,842 (299c) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-13 14:25:19,845 (299c) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-13 14:25:19,848 (299c) : DEBUG (services:611) - Found a service matching 'msnbclive://testing' - MSNBCLIVE (com.plexapp.plugins.msnbclivestream)<br />
2012-10-13 14:25:19,848 (299c) : DEBUG (objectkit:647) - Checking for Real RTMP support... Enabled:True Platform:iOS Product:Plex/iOS Client:2.5.1 Server:0.9.6.9-8fd9c6a<br />
2012-10-13 14:25:19,849 (299c) : DEBUG (objectkit:666) - Using Real RTMP<br />
2012-10-13 14:25:19,851 (299c) : DEBUG (runtime:843) - Response: [200] MediaContainer, 920 bytes<br />
how ever the official iOS client still didn't play it reports no playable media item; but that is likely something I need to maybe file as an enhancement or bug with the client devs.
Now I am going to try parse some feeds from my xml and see if I can get that going. Thanks again for being so patient and helping me through this.
I'm glad things are making more sense to you now. I'll try to do a little digging in regards to live RTMP streams on iOS. It would also be worthwhile for you to check the log for PMS to see if it reveals any error details when trying to playback via the iOS client.
here is a log from when I try to play the stream via iOS client
<br />
Oct 14, 2012 18:52:06:143 [7056] DEBUG - [Transcoder] Thread count: 4<br />
Oct 14, 2012 18:52:06:147 [13456] DEBUG - [Transcoder] Input #0, flv, from 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live live=1 swfUrl=http://msnbclive.eu/player.swf':<br />
Oct 14, 2012 18:52:06:149 [14508] DEBUG - [Transcoder] Stream #0.0, 211, 1/1000: Video: h264 (Baseline), yuv420p, 768x576 [SAR 1:1 DAR 4:3]<br />
Oct 14, 2012 18:52:06:153 [3524] DEBUG - [Transcoder] Stream #0.1, 61, 1/1000: Audio: mp3, 44100 Hz, stereo, s16, 112 kb/s<br />
Oct 14, 2012 18:52:06:155 [11284] DEBUG - [Transcoder] Applying output settings.<br />
Oct 14, 2012 18:52:06:158 [7092] DEBUG - [Transcoder] Frames per second is either 0.000000 or 25.000000.<br />
Oct 14, 2012 18:52:06:162 [15204] DEBUG - [Transcoder] Final font scale: 1.000000 (0.750000) -> 1.114286<br />
Oct 14, 2012 18:52:06:162 [15132] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01262.ts [10.0.1.14:49298] (3 live)<br />
Oct 14, 2012 18:52:06:163 [15132] DEBUG - Asked for segment 1262 from session.<br />
Oct 14, 2012 18:52:06:172 [14512] DEBUG - [FFMPEG] Duration: -1<br />
Oct 14, 2012 18:52:06:172 [14512] DEBUG - Read line, and done: 0<br />
Oct 14, 2012 18:52:06:175 [15132] DEBUG - Returning segment 1262 from session.<br />
Oct 14, 2012 18:52:06:175 [15132] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01262.ts is 781140.<br />
Oct 14, 2012 18:52:06:178 [3604] DEBUG - [Transcoder] Audio stream info:<br />
Oct 14, 2012 18:52:06:179 [15144] DEBUG - [Transcoder] codec_id : 15001<br />
Oct 14, 2012 18:52:06:182 [2096] DEBUG - [Transcoder] channels : 2<br />
Oct 14, 2012 18:52:06:184 [12860] DEBUG - [Transcoder] bitrate : 112000/128000<br />
Oct 14, 2012 18:52:06:186 [15184] DEBUG - [Transcoder] samplerate: 44100<br />
Oct 14, 2012 18:52:06:190 [0256] DEBUG - [Transcoder] audiogain : 1.00 (256)<br />
Oct 14, 2012 18:52:06:192 [12464] DEBUG - [Transcoder] aacProfile: 1/-99<br />
Oct 14, 2012 18:52:06:194 [4928] DEBUG - [Transcoder] ----> we're not remuxing RTMP audio for now.<br />
Oct 14, 2012 18:52:06:197 [12584] DEBUG - [Transcoder] Video stream info:<br />
Oct 14, 2012 18:52:06:199 [6112] DEBUG - [Transcoder] codec_id: 1c/1c <br />
Oct 14, 2012 18:52:06:201 [7032] DEBUG - [Transcoder] level : 31/51 <br />
Oct 14, 2012 18:52:06:202 [3052] DEBUG - [Transcoder] avg_fps : 25/25 <br />
Oct 14, 2012 18:52:06:204 [14560] DEBUG - [Transcoder] profile : 42/64 <br />
Oct 14, 2012 18:52:06:210 [8240] DEBUG - [Transcoder] vfr : 0 <br />
Oct 14, 2012 18:52:06:213 [15012] DEBUG - [Transcoder] fps : 25.00/25.00 <br />
Oct 14, 2012 18:52:06:215 [9184] DEBUG - [Transcoder] bitrate : 0.11/3.15 mbps<br />
Oct 14, 2012 18:52:06:218 [9468] DEBUG - [Transcoder] height : 576/576 <br />
Oct 14, 2012 18:52:06:221 [0240] DEBUG - [Transcoder] aspect : 0.75(1.00)/0.75 <br />
Oct 14, 2012 18:52:06:223 [9112] DEBUG - [Transcoder] segSize : 0.85mbits/seg, 0.21/25.60MBps<br />
Oct 14, 2012 18:52:06:225 [13960] DEBUG - [Transcoder] timebase: 0.02000(1:50)/0.00001(0:1000000) <br />
Oct 14, 2012 18:52:06:227 [14316] DEBUG - [Transcoder] !!! Will copy the video stream<br />
Oct 14, 2012 18:52:06:229 [13848] DEBUG - [Transcoder] Average FPS ~ 0 fps, Frame rate ~ 25 fps.<br />
Oct 14, 2012 18:52:06:232 [7620] DEBUG - [Transcoder] Configuring output.<br />
Oct 14, 2012 18:52:06:241 [9200] DEBUG - [Transcoder] Output #0, mpegts, to 'C:\Users\Martin\AppData\Local\Temp\plex-transcode-B727C5A1-733B-405C-AAF7-10B0678CA7F1-f523db04-72e3-4229-98cb-cc45726181ed-tmp.ts':<br />
Oct 14, 2012 18:52:06:245 [0904] DEBUG - [Transcoder] Stream #0.0, 0, 1/90000: Video: libx264, yuv420p, 768x576 [SAR 1:1 DAR 4:3], q=2-31<br />
Oct 14, 2012 18:52:06:247 [7600] DEBUG - [Transcoder] Stream #0.1, 0, 1/90000: Audio: libmp3lame, 48000 Hz, stereo, s16, 128 kb/s<br />
Oct 14, 2012 18:52:06:248 [14512] DEBUG - [FFMPEG] Resolution: 768x576<br />
Oct 14, 2012 18:52:06:248 [14512] DEBUG - Read line, and done: 0<br />
Oct 14, 2012 18:52:06:249 [10160] DEBUG - [Transcoder] The verbose setting is 0 and PLEX_DEBUG is 0.<br />
Oct 14, 2012 18:52:06:282 [8156] DEBUG - [Transcoder] Wrote segment 0 (17.41s, 17.41s, 0.04mb)<br />
Oct 14, 2012 18:52:06:288 [7644] DEBUG - [Transcoder] Wrote segment 1 (0.01s, 8.71s, 0.00mb)<br />
Oct 14, 2012 18:52:06:309 [14740] DEBUG - [Transcoder] Wrote segment 2 (0.01s, 5.81s, 0.00mb)<br />
Oct 14, 2012 18:52:06:316 [4880] DEBUG - [Transcoder] Wrote segment 3 (0.02s, 4.36s, 0.00mb)<br />
Oct 14, 2012 18:52:06:322 [14412] DEBUG - [Transcoder] Wrote segment 4 (0.01s, 3.49s, 0.00mb)<br />
Oct 14, 2012 18:52:06:331 [13224] DEBUG - [Transcoder] Wrote segment 5 (0.01s, 2.91s, 0.00mb)<br />
Oct 14, 2012 18:52:06:338 [14904] DEBUG - [Transcoder] Wrote segment 6 (0.01s, 2.50s, 0.00mb)<br />
Oct 14, 2012 18:52:06:344 [12776] DEBUG - [Transcoder] Wrote segment 7 (0.01s, 2.18s, 0.00mb)<br />
Oct 14, 2012 18:52:06:350 [10524] DEBUG - [Transcoder] Wrote segment 8 (0.01s, 1.94s, 0.00mb)<br />
Oct 14, 2012 18:52:06:357 [8648] DEBUG - [Transcoder] Wrote segment 9 (0.01s, 1.75s, 0.00mb)<br />
Oct 14, 2012 18:52:08:012 [1152] DEBUG - Request: GET /video/:/transcode/segmented/stop?session=B727C5A1-733B-405C-AAF7-10B0678CA7F1&X-Plex-Client-Capabilities=protocols%3Dhttp-live-streaming%2Chttp-mp4-streaming%2Chttp-streaming-video%2Chttp-streaming-video-720p%2Chttp-mp4-video%2Chttp-mp4-video-720p%3BvideoDecoders%3Dh264%7Bprofile%3Ahigh%26resolution%3A1080%26level%3A51%7D%3BaudioDecoders%3Dmp3%2Caac%7Bbitrate%3A160000%7D&X-Plex-Client-Platform=iOS&X-Plex-Product=Plex%2FiOS&X-Plex-Version=2.5.1 [10.0.1.4:57183] (4 live)<br />
Oct 14, 2012 18:52:08:012 [1152] DEBUG - * session => B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 14, 2012 18:52:08:013 [1152] DEBUG - * X-Plex-Client-Capabilities => protocols=http-live-streaming,http-mp4-streaming,http-streaming-video,http-streaming-video-720p,http-mp4-video,http-mp4-video-720p;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}<br />
Oct 14, 2012 18:52:08:013 [1152] DEBUG - * X-Plex-Client-Platform => iOS<br />
Oct 14, 2012 18:52:08:013 [1152] DEBUG - * X-Plex-Product => Plex/iOS<br />
Oct 14, 2012 18:52:08:013 [1152] DEBUG - * X-Plex-Version => 2.5.1<br />
Oct 14, 2012 18:52:10:010 [14972] DEBUG - Request: GET /video/:/transcode/segmented/ping [10.0.1.14:49300] (3 live)<br />
Oct 14, 2012 18:52:10:010 [14972] DEBUG - * Cookie: SESSION-GUID=E64ED385-CE5B-45DE-9D78-1222D5FE8E1D<br />
Oct 14, 2012 18:52:10:010 [14972] DEBUG - Received transcode session ping for session E64ED385-CE5B-45DE-9D78-1222D5FE8E1D.<br />
Oct 14, 2012 18:52:10:272 [7696] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01263.ts [10.0.1.14:49299] (3 live)<br />
Oct 14, 2012 18:52:10:272 [7696] DEBUG - Asked for segment 1263 from session.<br />
Oct 14, 2012 18:52:10:287 [7696] DEBUG - Returning segment 1263 from session.<br />
Oct 14, 2012 18:52:10:288 [7696] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01263.ts is 714776.<br />
Oct 14, 2012 18:52:13:475 [14684] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01264.ts [10.0.1.14:49301] (3 live)<br />
Oct 14, 2012 18:52:13:475 [14684] DEBUG - Asked for segment 1264 from session.<br />
Oct 14, 2012 18:52:13:492 [14684] DEBUG - Returning segment 1264 from session.<br />
Oct 14, 2012 18:52:13:492 [14684] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01264.ts is 566068.<br />
Oct 14, 2012 18:52:16:406 [11276] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01265.ts [10.0.1.14:49302] (3 live)<br />
Oct 14, 2012 18:52:16:406 [11276] DEBUG - Asked for segment 1265 from session.<br />
Oct 14, 2012 18:52:16:426 [11276] DEBUG - Returning segment 1265 from session.<br />
Oct 14, 2012 18:52:16:426 [11276] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01265.ts is 700112.<br />
Oct 14, 2012 18:52:19:405 [7724] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01266.ts [10.0.1.14:49303] (3 live)<br />
Oct 14, 2012 18:52:19:406 [7724] DEBUG - Asked for segment 1266 from session.<br />
Oct 14, 2012 18:52:19:442 [7724] DEBUG - Returning segment 1266 from session.<br />
Oct 14, 2012 18:52:19:442 [7724] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01266.ts is 616452.<br />
Oct 14, 2012 18:52:19:940 [14848] DEBUG - Request: GET /:/progress?key=164&identifier=com.plexapp.plugins.library&time=1265422 [10.0.1.14:49304] (4 live)<br />
Oct 14, 2012 18:52:19:940 [14848] DEBUG - * key => 164<br />
Oct 14, 2012 18:52:19:940 [14848] DEBUG - * identifier => com.plexapp.plugins.library<br />
Oct 14, 2012 18:52:19:940 [14848] DEBUG - * time => 1265422<br />
Oct 14, 2012 18:52:20:241 [14848] DEBUG - Play progress on 164 'Wanderlust' - got played 1265422 ms!<br />
Oct 14, 2012 18:52:21:203 [14776] DEBUG - Request: GET /:/progress?key=164&identifier=com.plexapp.plugins.library&time=1265422 [10.0.1.14:49305] (4 live)<br />
Oct 14, 2012 18:52:21:203 [14776] DEBUG - * key => 164<br />
Oct 14, 2012 18:52:21:203 [14776] DEBUG - * identifier => com.plexapp.plugins.library<br />
Oct 14, 2012 18:52:21:203 [14776] DEBUG - * time => 1265422<br />
Oct 14, 2012 18:52:21:209 [14264] DEBUG - Request: GET /video/:/transcode/segmented/session/E64ED385-CE5B-45DE-9D78-1222D5FE8E1D/9/01267.ts [10.0.1.14:49306] (4 live)<br />
Oct 14, 2012 18:52:21:210 [14264] DEBUG - Asked for segment 1267 from session.<br />
Oct 14, 2012 18:52:21:231 [14264] DEBUG - Returning segment 1267 from session.<br />
Oct 14, 2012 18:52:21:231 [14264] DEBUG - Content-Length of C:\Users\Martin\AppData\Local\Temp\plex-transcode-E64ED385-CE5B-45DE-9D78-1222D5FE8E1D-e5d9dc9b-81a1-4dcd-8f9e-65f4d1fd9ab5\media-01267.ts is 640328.<br />
<br />
Thanks. I'll try to bring make sure the right people see that. Hopefully something good will come of it :)
Just a shot in the dark here … but I’ve never seen an RTMP based plugin using a playpath with all the parameters passed inline before, meaning this:
parts = [PartObject(key = RTMPVideoURL("rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true", clip = "msnbc_live", live=True, height=467, width=830) )]))
I've always had to break them down into player, clip, app, swf_url and then any additional args that need to be passed (in this case live). I've also never set a height and width. Is this something different needed for the live stuff? I'm just wondering if PMS handles it differently than Laika does -- I know this has been the case in the past that they weren't in lockstep as far as librtmp went ... maybe Laika is handling parsing the rtmp url properly and PMS is not ...
Also IIRC doesn't iOS (and some other clients) need to use @indirect and IndirectResponse to handle things correctly in this case?
Anyway dunno if this is helpful at all but that popped out at me so thought it might be worth mentioning.
Also maybe worth noting … rtmpdump v2.4 seems to have a hard time parsing this (and I believe that is the version in PMS).
<br />
rtmpdump -r 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live swfUrl=http://msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true' -z -o test.flv<br />
RTMPDump 2.4<br />
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL<br />
DEBUG: Protocol : RTMP<br />
DEBUG: Hostname : a.cdn.msnbclive.eu<br />
DEBUG: Port : 1935<br />
DEBUG: Playpath : msnbclive.eu/player.swf pageUrl=http://blog.livenewschat.tv/rockinroosters/ swfVfy=true live=true<br />
DEBUG: tcUrl : rtmp://a.cdn.msnbclive.eu:1935/edge playpath=msnbc_live swfUrl=http:/<br />
DEBUG: app : edge playpath=msnbc_live swfUrl=http:/<br />
DEBUG: live : no<br />
DEBUG: timeout : 30 sec<br />
Note how it fumbles Playpath, tcUrl and app in parsing.
So not sure if this is helpful either but figured I'd pass it along. If you haven't done so already it might be worth trying to break out the rtmp stuff into smaller bits instead of relying on librtmp to parse properly.
Gerk thanks for the tips. I tried using the @indirect and indirect response but it didn’t seem to make any difference on the iOS client
<br />
def MediaObjectsForURL(url):<br />
<br />
return [MediaObject(<br />
parts = [PartObject(key=Callback(PlayVideo, url=url))],<br />
protocol = Protocol.RTMP,<br />
video_codec = VideoCodec.H264,<br />
audio_codec = AudioCodec.AAC,<br />
audio_channels = 2,<br />
optimized_for_streaming = True)]<br />
<br />
####################################################################################################<br />
@indirect<br />
def PlayVideo(url):<br />
Log(url)<br />
return IndirectResponse(VideoClipObject,key = RTMPVideoURL(url="rtmp://a.cdn.msnbclive.eu/edge", clip="msnbc_live", swfUrl="http://msnbclive.eu/player.swf", live=True))<br />
<br />
Here is the log from trying it with the iOS client if it's useful to anyone.
<br />
Oct 15, 2012 21:15:41:405 [10328] DEBUG - Request: GET /system/:/services/url/lookup?url=msnbclive%3A//testing&X-Plex-Client-Capabilities=protocols%3Dhttp-live-streaming%2Chttp-mp4-streaming%2Chttp-streaming-video%2Chttp-streaming-video-720p%2Chttp-mp4-video%2Chttp-mp4-video-720p%3BvideoDecoders%3Dh264%7Bprofile%3Ahigh%26resolution%3A1080%26level%3A51%7D%3BaudioDecoders%3Dmp3%2Caac%7Bbitrate%3A160000%7D&X-Plex-Client-Platform=iOS&X-Plex-Product=Plex%2FiOS&X-Plex-Version=2.5.1 [10.0.1.4:57493] (1 live)<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - * url => msnbclive://testing<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - * X-Plex-Client-Capabilities => protocols=http-live-streaming,http-mp4-streaming,http-streaming-video,http-streaming-video-720p,http-mp4-video,http-mp4-video-720p;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - * X-Plex-Client-Platform => iOS<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - * X-Plex-Product => Plex/iOS<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - * X-Plex-Version => 2.5.1<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/:/services/url/lookup?url=msnbclive%3A//testing<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - (Capabilities) Adding WebKit.<br />
Oct 15, 2012 21:15:41:406 [10328] DEBUG - (Capabilties) Passing down capabilities of 'protocols=http-live-streaming,http-mp4-streaming,http-mp4-video,http-mp4-video-720p,http-streaming-video,http-streaming-video-720p,webkit;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}' to plug-in.<br />
Oct 15, 2012 21:15:41:407 [10328] DEBUG - HTTP requesting to: http://127.0.0.1:1211/system/:/services/url/lookup?url=msnbclive%3A//testing<br />
Oct 15, 2012 21:15:41:425 [10328] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1408 bytes of content.<br />
Oct 15, 2012 21:15:41:512 [11232] DEBUG - Request: GET /:/plugins/com.plexapp.system/serviceFunction/url/com.plexapp.plugins.msnbclivestream/MSNBCLIVE/PlayVideo?args=Y2VyZWFsMQoxCnR1cGxlCjAKcjAK&kwargs=Y2VyZWFsMQoxCmRpY3QKMQpzMTkKbXNuYmNsaXZlOi8vdGVzdGluZ3MzCnVybHIwCg__&indirect=1&mediaInfo=%7B%22audio_channels%22%3A%202%2C%20%22protocol%22%3A%20%22rtmp%22%2C%20%22optimized_for_streaming%22%3A%20true%2C%20%22video_frame_rate%22%3A%20null%2C%20%22duration%22%3A%20null%2C%20%22height%22%3A%20null%2C%20%22width%22%3A%20null%2C%20%22container%22%3A%20null%2C%20%22audio_codec%22%3A%20%22aac%22%2C%20%22aspect_ratio%22%3A%20null%2C%20%22video_codec%22%3A%20%22h264%22%2C%20%22video_resolution%22%3A%20null%2C%20%22bitrate%22%3A%20null%7D&X-Plex-Client-Capabilities=protocols%3Dhttp-live-streaming%2Chttp-mp4-streaming%2Chttp-streaming-video%2Chttp-streaming-video-720p%2Chttp-mp4-video%2Chttp-mp4-video-720p%3BvideoDecoders%3Dh264%7Bprofile%3Ahigh%26resolution%3A1080%26level%3A51%7D%3BaudioDecoders%3Dmp3%2Caac%7Bbitrate%3A160000%7D&X-Plex-Client-Platform=iOS&X-Plex-Product=Plex%2FiOS&X-Plex-Version=2.5.1 [10.0.1.4:57494] (1 live)<br />
Oct 15, 2012 21:15:41:512 [11232] DEBUG - * args => Y2VyZWFsMQoxCnR1cGxlCjAKcjAK<br />
Oct 15, 2012 21:15:41:512 [11232] DEBUG - * kwargs => Y2VyZWFsMQoxCmRpY3QKMQpzMTkKbXNuYmNsaXZlOi8vdGVzdGluZ3MzCnVybHIwCg__<br />
Oct 15, 2012 21:15:41:512 [11232] DEBUG - * indirect => 1<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - * mediaInfo => {"audio_channels": 2, "protocol": "rtmp", "optimized_for_streaming": true, "video_frame_rate": null, "duration": null, "height": null, "width": null, "container": null, "audio_codec": "aac", "aspect_ratio": null, "video_codec": "h264", "video_resolution": null, "bitrate": null}<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - * X-Plex-Client-Capabilities => protocols=http-live-streaming,http-mp4-streaming,http-streaming-video,http-streaming-video-720p,http-mp4-video,http-mp4-video-720p;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - * X-Plex-Client-Platform => iOS<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - * X-Plex-Product => Plex/iOS<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - * X-Plex-Version => 2.5.1<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/serviceFunction/url/com.plexapp.plugins.msnbclivestream/MSNBCLIVE/PlayVideo?args=Y2VyZWFsMQoxCnR1cGxlCjAKcjAK&kwargs=Y2VyZWFsMQoxCmRpY3QKMQpzMTkKbXNuYmNsaXZlOi8vdGVzdGluZ3MzCnVybHIwCg__&indirect=1&mediaInfo=%7B%22audio_channels%22%3A%202%2C%20%22protocol%22%3A%20%22rtmp%22%2C%20%22optimized_for_streaming%22%3A%20true%2C%20%22video_frame_rate%22%3A%20null%2C%20%22duration%22%3A%20null%2C%20%22height%22%3A%20null%2C%20%22width%22%3A%20null%2C%20%22container%22%3A%20null%2C%20%22audio_codec%22%3A%20%22aac%22%2C%20%22aspect_ratio%22%3A%20null%2C%20%22video_codec%22%3A%20%22h264%22%2C%20%22video_resolution%22%3A%20null%2C%20%22bitrate%22%3A%20null%7D<br />
Oct 15, 2012 21:15:41:513 [11232] DEBUG - (Capabilities) Adding WebKit.<br />
Oct 15, 2012 21:15:41:514 [11232] DEBUG - (Capabilties) Passing down capabilities of 'protocols=http-live-streaming,http-mp4-streaming,http-mp4-video,http-mp4-video-720p,http-streaming-video,http-streaming-video-720p,webkit;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}' to plug-in.<br />
Oct 15, 2012 21:15:41:514 [11232] DEBUG - HTTP requesting to: http://127.0.0.1:1211/:/plugins/com.plexapp.system/serviceFunction/url/com.plexapp.plugins.msnbclivestream/MSNBCLIVE/PlayVideo?args=Y2VyZWFsMQoxCnR1cGxlCjAKcjAK&kwargs=Y2VyZWFsMQoxCmRpY3QKMQpzMTkKbXNuYmNsaXZlOi8vdGVzdGluZ3MzCnVybHIwCg__&indirect=1&mediaInfo=%7B%22audio_channels%22%3A%202%2C%20%22protocol%22%3A%20%22rtmp%22%2C%20%22optimized_for_streaming%22%3A%20true%2C%20%22video_frame_rate%22%3A%20null%2C%20%22duration%22%3A%20null%2C%20%22height%22%3A%20null%2C%20%22width%22%3A%20null%2C%20%22container%22%3A%20null%2C%20%22audio_codec%22%3A%20%22aac%22%2C%20%22aspect_ratio%22%3A%20null%2C%20%22video_codec%22%3A%20%22h264%22%2C%20%22video_resolution%22%3A%20null%2C%20%22bitrate%22%3A%20null%7D<br />
Oct 15, 2012 21:15:41:526 [11232] DEBUG - [com.plexapp.system] HTTP reply status 200, with 725 bytes of content.<br />
Oct 15, 2012 21:15:41:628 [6332] DEBUG - Request: GET /video/:/transcode/segmented/start.m3u8?url=rtmp%3A%2F%2Fa.cdn.msnbclive.eu%2Fedge%2Bplaypath%3Dmsnbc_live%2Blive%3D1%2BswfUrl%3Dhttp%3A%2F%2Fmsnbclive.eu%2Fplayer.swf&subtitleSize=100&audioBoost=100&ratingKey=msnbclive%3A%2F%2Ftesting&identifier=com.plexapp.plugins.msnbclivestream&key=rtmp%3A%2F%2Fa.cdn.msnbclive.eu%2Fedge%2Bplaypath%3Dmsnbc_live%2Blive%3D1%2BswfUrl%3Dhttp%3A%2F%2Fmsnbclive.eu%2Fplayer.swf&session=B727C5A1-733B-405C-AAF7-10B0678CA7F1&quality=7&3g=0&X-Plex-Access-Key=KIMDVPSKH4YHDL8DOARH&X-Plex-Access-Code=TzAf2KUTYYYeG%2BC9GBiXxasRjA8RG3VEaHATrbQgQ7g%3D&X-Plex-Access-Time=1350350143&X-Plex-Client-Capabilities=protocols%3Dhttp-live-streaming%2Chttp-mp4-streaming%2Chttp-streaming-video%2Chttp-streaming-video-720p%2Chttp-mp4-video%2Chttp-mp4-video-720p%3BvideoDecoders%3Dh264%7Bprofile%3Ahigh%26resolution%3A1080%26level%3A51%7D%3BaudioDecoders%3Dmp3%2Caac%7Bbitrate%3A160000%7D [10.0.1.4:57495] (1 live)<br />
Oct 15, 2012 21:15:41:628 [6332] DEBUG - * url => rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live live=1 swfUrl=http://msnbclive.eu/player.swf<br />
Oct 15, 2012 21:15:41:628 [6332] DEBUG - * subtitleSize => 100<br />
Oct 15, 2012 21:15:41:628 [6332] DEBUG - * audioBoost => 100<br />
Oct 15, 2012 21:15:41:628 [6332] DEBUG - * ratingKey => msnbclive://testing<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * identifier => com.plexapp.plugins.msnbclivestream<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * key => rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live live=1 swfUrl=http://msnbclive.eu/player.swf<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * session => B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * quality => 7<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * 3g => 0<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * X-Plex-Access-Key => KIMDVPSKH4YHDL8DOARH<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * X-Plex-Access-Code => TzAf2KUTYYYeG+C9GBiXxasRjA8RG3VEaHATrbQgQ7g=<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * X-Plex-Access-Time => 1350350143<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - * X-Plex-Client-Capabilities => protocols=http-live-streaming,http-mp4-streaming,http-streaming-video,http-streaming-video-720p,http-mp4-video,http-mp4-video-720p;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - Cookie header in secure request: SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:41:629 [6332] DEBUG - Checking cookie 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:41:630 [6332] DEBUG - Found session GUID of B727C5A1-733B-405C-AAF7-10B0678CA7F1 in session start.<br />
Oct 15, 2012 21:15:41:630 [6332] DEBUG - Using session GUID B727C5A1-733B-405C-AAF7-10B0678CA7F1 for new transcode session.<br />
Oct 15, 2012 21:15:41:630 [6332] DEBUG - Cleaning directory for session B727C5A1-733B-405C-AAF7-10B0678CA7F1 (C:\Users\Martin\AppData\Local\Temp\plex-transcode-B727C5A1-733B-405C-AAF7-10B0678CA7F1-a3ce3382-7eeb-4489-a39e-13a0632924ba)<br />
Oct 15, 2012 21:15:41:631 [6332] DEBUG - Saving session: B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:41:631 [6332] DEBUG - Adding cookie for security headers: 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Request: GET /video/:/transcode/segmented/start.m3u8?session=B727C5A1-733B-405C-AAF7-10B0678CA7F1 [10.0.1.4:57496] (1 live)<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - * session => B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Cookie header in secure request: SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Checking cookie 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Request range: 0 to 1<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Found session GUID of B727C5A1-733B-405C-AAF7-10B0678CA7F1 in session start.<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Short-circuiting silly request.<br />
Oct 15, 2012 21:15:42:190 [11096] DEBUG - Adding cookie for security headers: 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:42:388 [4600] DEBUG - Request: GET /video/:/transcode/segmented/start.m3u8?session=B727C5A1-733B-405C-AAF7-10B0678CA7F1 [10.0.1.4:57497] (1 live)<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - * session => B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Cookie header in secure request: SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Checking cookie 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Found session GUID of B727C5A1-733B-405C-AAF7-10B0678CA7F1 in session start.<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Using session GUID B727C5A1-733B-405C-AAF7-10B0678CA7F1 for new transcode session.<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Using existing transcode session.<br />
Oct 15, 2012 21:15:42:389 [4600] DEBUG - Adding cookie for security headers: 'SESSION-GUID=B727C5A1-733B-405C-AAF7-10B0678CA7F1'<br />
Oct 15, 2012 21:15:42:413 [9352] DEBUG - Request: GET /video/:/transcode/segmented/session/B727C5A1-733B-405C-AAF7-10B0678CA7F1/7/index.m3u8 [10.0.1.4:57498] (1 live)<br />
Oct 15, 2012 21:15:42:413 [9352] DEBUG - Starting a transcode session B727C5A1-733B-405C-AAF7-10B0678CA7F1 at offset -1.0 (stopped=1)<br />
Oct 15, 2012 21:15:42:414 [9352] DEBUG - Setting up segmented session, quality=7<br />
Oct 15, 2012 21:15:42:414 [9352] DEBUG - Computed display width of 7.8"<br />
Oct 15, 2012 21:15:42:415 [9352] DEBUG - Video Stream copy => cp:av, vp:high, vr:1080, vl:51<br />
Oct 15, 2012 21:15:42:415 [9352] DEBUG - Audio Stream copy => ac:mp3,aac=160000<br />
Oct 15, 2012 21:15:42:415 [9352] DEBUG - Job running: C:\Program Files (x86)\Plex\Plex Media Server\PlexTranscoder.exe transcode "rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live live=1 swfUrl=http://msnbclive.eu/player.swf" "C:\Users\Martin\AppData\Local\Temp\plex-transcode-B727C5A1-733B-405C-AAF7-10B0678CA7F1-a3ce3382-7eeb-4489-a39e-13a0632924ba\media" 7 4 0 any nil 0 yes UTF-8 default "" "" 0.75 av high 1080 51 mp3,aac=160000 3355443 yes <br />
Oct 15, 2012 21:15:44:246 [10796] DEBUG - [Transcoder] Starting transcoder v306 (t=4s, q=7)<br />
Oct 15, 2012 21:15:44:249 [9536] DEBUG - [Transcoder] Registered components, about to parse arguments.<br />
Oct 15, 2012 21:15:44:251 [10888] DEBUG - [Transcoder] Video caps: ca=1, cv=1, ac=libmp3lame, mp3=0, aac=160000,1, ac3=-1, dts=-1, pcm=-1, vp=64, vr=1080, vl=51, mss=3355443, anam=1<br />
Oct 15, 2012 21:15:44:252 [9256] DEBUG - [Transcoder] About to apply initial settings.<br />
Oct 15, 2012 21:15:44:263 [10192] DEBUG - [Transcoder] Opening the input file.<br />
Oct 15, 2012 21:15:48:545 [10588] DEBUG - Request: GET / [127.0.0.1:48458] (2 live)<br />
Oct 15, 2012 21:15:48:546 [10588] DEBUG - It took 0.001000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:15:49:041 [10220] DEBUG - [Transcoder] Thread count: 4<br />
Oct 15, 2012 21:15:49:044 [6844] DEBUG - [Transcoder] Input #0, flv, from 'rtmp://a.cdn.msnbclive.eu/edge playpath=msnbc_live live=1 swfUrl=http://msnbclive.eu/player.swf':<br />
Oct 15, 2012 21:15:49:046 [10396] DEBUG - [Transcoder] Stream #0.0, 127, 1/1000: Video: h264 (Baseline), yuv420p, 768x576 [SAR 1:1 DAR 4:3]<br />
Oct 15, 2012 21:15:49:048 [10648] DEBUG - [Transcoder] Stream #0.1, 61, 1/1000: Audio: mp3, 44100 Hz, stereo, s16, 112 kb/s<br />
Oct 15, 2012 21:15:49:050 [7288] DEBUG - [Transcoder] Applying output settings.<br />
Oct 15, 2012 21:15:49:052 [8328] DEBUG - [Transcoder] Frames per second is either 0.000000 or 25.000000.<br />
Oct 15, 2012 21:15:49:054 [10248] DEBUG - [Transcoder] Final font scale: 1.000000 (0.750000) -> 1.114286<br />
Oct 15, 2012 21:15:49:056 [11124] DEBUG - [Transcoder] Audio stream info:<br />
Oct 15, 2012 21:15:49:058 [10292] DEBUG - [Transcoder] codec_id : 15001<br />
Oct 15, 2012 21:15:49:060 [8944] DEBUG - [Transcoder] channels : 2<br />
Oct 15, 2012 21:15:49:061 [10568] DEBUG - [Transcoder] bitrate : 112000/128000<br />
Oct 15, 2012 21:15:49:063 [10136] DEBUG - [Transcoder] samplerate: 44100<br />
Oct 15, 2012 21:15:49:065 [10932] DEBUG - [Transcoder] audiogain : 1.00 (256)<br />
Oct 15, 2012 21:15:49:067 [8376] DEBUG - [Transcoder] aacProfile: 1/-99<br />
Oct 15, 2012 21:15:49:069 [9352] DEBUG - [FFMPEG] Duration: -1<br />
Oct 15, 2012 21:15:49:069 [10268] DEBUG - [Transcoder] ----> we're not remuxing RTMP audio for now.<br />
Oct 15, 2012 21:15:49:069 [9352] DEBUG - Read line, and done: 0<br />
Oct 15, 2012 21:15:49:080 [1148] DEBUG - [Transcoder] Video stream info:<br />
Oct 15, 2012 21:15:49:092 [10456] DEBUG - [Transcoder] codec_id: 1c/1c <br />
Oct 15, 2012 21:15:49:094 [9476] DEBUG - [Transcoder] level : 31/51 <br />
Oct 15, 2012 21:15:49:105 [11088] DEBUG - [Transcoder] avg_fps : 25/25 <br />
Oct 15, 2012 21:15:49:108 [10852] DEBUG - [Transcoder] profile : 42/64 <br />
Oct 15, 2012 21:15:49:109 [5716] DEBUG - [Transcoder] vfr : 0 <br />
Oct 15, 2012 21:15:49:111 [11192] DEBUG - [Transcoder] fps : 25.00/25.00 <br />
Oct 15, 2012 21:15:49:112 [8212] DEBUG - [Transcoder] bitrate : 0.11/3.15 mbps<br />
Oct 15, 2012 21:15:49:115 [9544] DEBUG - [Transcoder] height : 576/576 <br />
Oct 15, 2012 21:15:49:116 [11120] DEBUG - [Transcoder] aspect : 0.75(1.00)/0.75 <br />
Oct 15, 2012 21:15:49:118 [10880] DEBUG - [Transcoder] segSize : 0.85mbits/seg, 0.21/25.60MBps<br />
Oct 15, 2012 21:15:49:120 [9564] DEBUG - [Transcoder] timebase: 0.02000(1:50)/0.00001(0:1000000) <br />
Oct 15, 2012 21:15:49:122 [5996] DEBUG - [Transcoder] !!! Will copy the video stream<br />
Oct 15, 2012 21:15:49:133 [11052] DEBUG - [Transcoder] Average FPS ~ 0 fps, Frame rate ~ 25 fps.<br />
Oct 15, 2012 21:15:49:135 [7872] DEBUG - [Transcoder] Configuring output.<br />
Oct 15, 2012 21:15:49:143 [11076] DEBUG - [Transcoder] Output #0, mpegts, to 'C:\Users\Martin\AppData\Local\Temp\plex-transcode-B727C5A1-733B-405C-AAF7-10B0678CA7F1-a3ce3382-7eeb-4489-a39e-13a0632924ba-tmp.ts':<br />
Oct 15, 2012 21:15:49:144 [9352] DEBUG - [FFMPEG] Resolution: 768x576<br />
Oct 15, 2012 21:15:49:144 [9352] DEBUG - Read line, and done: 0<br />
Oct 15, 2012 21:15:49:145 [9304] DEBUG - [Transcoder] Stream #0.0, 0, 1/90000: Video: libx264, yuv420p, 768x576 [SAR 1:1 DAR 4:3], q=2-31<br />
Oct 15, 2012 21:15:49:148 [0352] DEBUG - [Transcoder] Stream #0.1, 0, 1/90000: Audio: libmp3lame, 48000 Hz, stereo, s16, 128 kb/s<br />
Oct 15, 2012 21:15:49:150 [11180] DEBUG - [Transcoder] The verbose setting is 0 and PLEX_DEBUG is 0.<br />
Oct 15, 2012 21:15:49:634 [9752] DEBUG - [Transcoder] Wrote segment 0 (7.18s, 7.18s, 0.02mb)<br />
Oct 15, 2012 21:15:49:642 [9500] DEBUG - [Transcoder] Wrote segment 1 (0.02s, 3.60s, 0.00mb)<br />
Oct 15, 2012 21:15:49:650 [10776] DEBUG - [Transcoder] Wrote segment 2 (0.01s, 2.40s, 0.00mb)<br />
Oct 15, 2012 21:15:49:658 [10400] DEBUG - [Transcoder] Wrote segment 3 (0.01s, 1.80s, 0.00mb)<br />
Oct 15, 2012 21:15:49:665 [9032] DEBUG - [Transcoder] Wrote segment 4 (0.01s, 1.44s, 0.00mb)<br />
Oct 15, 2012 21:15:49:674 [9868] DEBUG - [Transcoder] Wrote segment 5 (0.01s, 1.20s, 0.00mb)<br />
Oct 15, 2012 21:15:49:682 [11220] DEBUG - [Transcoder] Wrote segment 6 (0.01s, 1.03s, 0.00mb)<br />
Oct 15, 2012 21:15:49:698 [10432] DEBUG - [Transcoder] Wrote segment 7 (0.01s, 0.91s, 0.00mb)<br />
Oct 15, 2012 21:15:49:705 [9936] DEBUG - [Transcoder] Wrote segment 8 (0.02s, 0.81s, 0.00mb)<br />
Oct 15, 2012 21:15:49:711 [9532] DEBUG - [Transcoder] Wrote segment 9 (0.01s, 0.73s, 0.00mb)<br />
Oct 15, 2012 21:15:55:154 [9508] DEBUG - Request: GET /clients [10.0.1.51:56134] (2 live)<br />
Oct 15, 2012 21:15:55:155 [9508] DEBUG - It took 0.000000 sec to serialize a list with 1 elements.<br />
Oct 15, 2012 21:15:56:713 [10276] DEBUG - Request: GET / [10.0.1.51:56135] (2 live)<br />
Oct 15, 2012 21:15:56:714 [10276] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:15:57:234 [10904] DEBUG - Request: GET / [127.0.0.1:48506] (2 live)<br />
Oct 15, 2012 21:15:57:235 [10904] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:15:58:551 [10624] DEBUG - Request: GET / [127.0.0.1:48507] (2 live)<br />
Oct 15, 2012 21:15:58:552 [10624] DEBUG - It took 0.001000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:15:58:575 [2380] DEBUG - Request: GET /library/sections [10.0.1.51:56136] (2 live)<br />
Oct 15, 2012 21:15:58:578 [2380] DEBUG - It took 0.001000 sec to serialize a list with 3 elements.<br />
Oct 15, 2012 21:15:59:967 [10336] DEBUG - Request: GET /library/recentlyAdded [10.0.1.51:56137] (2 live)<br />
Oct 15, 2012 21:16:00:220 [10336] DEBUG - It took 0.181000 sec to serialize a list with 50 elements.<br />
Oct 15, 2012 21:16:02:561 [7596] DEBUG - Request: GET /video/:/transcode/segmented/stop?session=B727C5A1-733B-405C-AAF7-10B0678CA7F1&X-Plex-Client-Capabilities=protocols%3Dhttp-live-streaming%2Chttp-mp4-streaming%2Chttp-streaming-video%2Chttp-streaming-video-720p%2Chttp-mp4-video%2Chttp-mp4-video-720p%3BvideoDecoders%3Dh264%7Bprofile%3Ahigh%26resolution%3A1080%26level%3A51%7D%3BaudioDecoders%3Dmp3%2Caac%7Bbitrate%3A160000%7D&X-Plex-Client-Platform=iOS&X-Plex-Product=Plex%2FiOS&X-Plex-Version=2.5.1 [10.0.1.4:57499] (2 live)<br />
Oct 15, 2012 21:16:02:561 [7596] DEBUG - * session => B727C5A1-733B-405C-AAF7-10B0678CA7F1<br />
Oct 15, 2012 21:16:02:561 [7596] DEBUG - * X-Plex-Client-Capabilities => protocols=http-live-streaming,http-mp4-streaming,http-streaming-video,http-streaming-video-720p,http-mp4-video,http-mp4-video-720p;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac{bitrate:160000}<br />
Oct 15, 2012 21:16:02:561 [7596] DEBUG - * X-Plex-Client-Platform => iOS<br />
Oct 15, 2012 21:16:02:562 [7596] DEBUG - * X-Plex-Product => Plex/iOS<br />
Oct 15, 2012 21:16:02:562 [7596] DEBUG - * X-Plex-Version => 2.5.1<br />
Oct 15, 2012 21:16:08:558 [10788] DEBUG - Request: GET / [127.0.0.1:48513] (2 live)<br />
Oct 15, 2012 21:16:08:559 [10788] DEBUG - It took 0.001000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:18:563 [10072] DEBUG - Request: GET / [127.0.0.1:48521] (2 live)<br />
Oct 15, 2012 21:16:18:564 [10072] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:27:247 [10244] DEBUG - Request: GET / [127.0.0.1:48522] (2 live)<br />
Oct 15, 2012 21:16:27:248 [10244] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:28:581 [10316] DEBUG - Request: GET / [127.0.0.1:48535] (2 live)<br />
Oct 15, 2012 21:16:28:582 [10316] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:38:600 [10856] DEBUG - Request: GET / [127.0.0.1:48541] (2 live)<br />
Oct 15, 2012 21:16:38:600 [10856] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:48:605 [10460] DEBUG - Request: GET / [127.0.0.1:48546] (2 live)<br />
Oct 15, 2012 21:16:48:605 [10460] DEBUG - It took 0.000000 sec to serialize a list with 16 elements.<br />
Oct 15, 2012 21:16:53:564 [10584] DEBUG - Request: GET /clients [10.0.1.51:56141] (2 live)<br />
Oct 15, 2012 21:16:53:565 [10584] DEBUG - It took 0.000000 sec to serialize a list with 1 elements.<br />
I think that you should be using swf_url instead of swfUrl when passing with that object, not sure if it makes a difference or not but looking at other plugins that’s what they use.
Also a good tip … have you gotten this to work properly with rtmpdump yet? That’s usually where I start when working on rtmp based stuff, then just “translate” it all to what the framework wants. I did attempt it a bit with the URL you provided in the examples but being outside of eu it immediately refuses my connection. If you haven’t done this already you can give it a shot. Another plugin dev I chatted with did work on a live rtmp stream at one point but never got it super reliable, so there may be extraneous factors at play here too.
i did get it working with VLC, rtmpdump, .strm file from inside XBMC and it’s working in the Plex Desktop clients just not iOS or webclient