I have a live stream that I want to be able to view on my iOS device, I have built a channel around it but everytime I view the channel on iOS it tells me to connect to a PMS so that the video can be transcoded so that my iOS device and read it, any idea what the fixes for RTMP transcoding were and if there is anything else I need to do to get this video to transcode?
channel code
<br />
<br />
VIDEO_PREFIX = "/video/msnbclivestream"<br />
<br />
NAME = L('Title')<br />
<br />
# make sure to replace artwork with what you want<br />
# these filenames reference the example files in<br />
# the Contents/Resources/ folder in the bundle<br />
ART = 'art-default.jpg'<br />
ICON = 'icon-default.png'<br />
<br />
# -*- coding: utf-8 -*-<br />
<br />
####################################################################################################<br />
<br />
def Start():<br />
Plugin.AddPrefixHandler('/video/LiveTV', MainMenu, 'LiveTV', 'icon-default.png', 'art-default.jpg')<br />
Plugin.AddViewGroup('InfoList', viewMode='InfoList', mediaType='items')<br />
MediaContainer.art = R('art-default.jpg')<br />
HTTP.Headers['User-agent'] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12'<br />
<br />
####################################################################################################<br />
<br />
def MainMenu():<br />
#dir = MediaContainer(viewGroup='InfoList', title1='MSNBC Channel List')<br />
#dir.Append(WebVideoItem('http://blog.livenewschat.tv/rockinroosters/', title='Pingwin'))<br />
#ir = MediaContainer(title1="MSNBC - Live TV", title2="MSNBC TV") <br />
oc = ObjectContainer(view_group='InfoList',title1='Live TV', title2="")<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(url="rtmp://a.cdn.msnbclive.eu/edge", clip="msnbc_live", swfUrl="http://msnbclive.eu/player.swf", live=True) )]))<br />
oc.add(vco)<br />
<br />
<br />
vc1 = VideoClipObject(title = 'URL Test', summary = 'Live', thumb = 'http://members.fortunecity.com/tvnetworks/nbc/msnbc.jpg', url='msnbclive://testing')<br />
oc.add(vc1)<br />
# vco2 = VideoClipObject(title = "CNN", summary = "Live CNN", thumb ='http://upload.wikimedia.org/wikipedia/so/thumb/8/8b/Cnn.svg/800px-Cnn.svg.png' , 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 />
# vco2.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://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", clip = "", live=True, height=467, width=830) )]))<br />
# oc.add(vco2)<br />
<br />
<br />
# for video in XML.ElementFromURL("http://f.cl.ly/items/1D3O0M3s333c2K2Y0B3J/TVCh.xml").xpath('//item'):<br />
# rtmplink = video.get('link')<br />
# itemtitle = video.get('title')<br />
# vc1 = VideoClipObject(title = itemtitle, summary = 'Live', thumb = '', url=rtmplink)<br />
<br />
# vc1.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(rtmplink, clip = "", 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 />
# oc.add(vc1)<br />
<br />
<br />
#ir.add(oc)<br />
return oc<br />
<br />
<br />
<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 />
### 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 />
<br />
<br />
<br />
service
<br />
####################################################################################################<br />
<br />
def MetadataObjectForURL(url):<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 />
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 />
#parts = [PartObject(key = RTMPVideoURL(url="rtmp://a.cdn.msnbclive.eu/edge", clip="msnbc_live", swfUrl="http://msnbclive.eu/player.swf", live=True) )])]<br />
<br />
<br />
def NormalizeURL(url):<br />
return url<br />
<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 />