What is the best way to stream m3u8?

Can you provide some examples i can use for this? im lost…

someone said to me that the best way to do this is by XML files. what is your opinion?

Start here for an overview of how to start developing a Roku channel: http://forums.roku.com/viewtopic.php?f=34&t=36014

The latest Roku SDK examples are located on SourceForge: http://sourceforge.net/p/rokusdkexamples/code/HEAD/tree/trunk/rokusdkexamples-code/
You can modify the simplevideoplayer channel to play an m3u8 video.

One approach is to start with something small and simple that just plays a single m3u8 file (assuming the content is in a format supported by Roku) using the roVideoScreen component. Then start adding other components once you get that working (an roSpringboardScreen, for example).

Here’s a simple example that just plays an m3u8 HLS video using roVideoScreen, including logging all the events generated. This would be a good way to test whether your videos will play on the Roku:

Sub Main ()
    displayM3U8 ({
                    Streams: [{
                                Url: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"
                                Bitrate: 0
                                Quality: False
                            }]
                    StreamFormat: "hls"
                })
End Sub

Function displayM3U8 (contentItem As Object) As Void
    ui = CreateObject ("roVideoScreen")
    mp = CreateObject ("roMessagePort")
    ui.SetMessagePort (mp)
    ui.SetContent (contentItem)
    ui.Show ()
    While True
        msg = Wait (0, mp)
        logEvent (msg)
        If Type (msg) = "roVideoScreenEvent"
            If msg.IsScreenClosed ()
                Exit While
            EndIf
        EndIf
    End While
End Function

Function logEvent (msg As Object) As Void
    message = ""
    index = 0
    info = Invalid
    If msg = Invalid
        Print timeNow (); "  Timeout"
    Else
        msgType = Type (msg)
        If msgType = "roVideoScreenEvent" Or msgType = "roVideoPlayerEvent"
            If msg.IsStreamStarted ()
                evType = "IsStreamStarted"
                index = msg.GetIndex ()
                info = msg.GetInfo ()
            Else If msg.IsPlaybackPosition ()
                evType = "IsPlaybackPosition"
                index = msg.GetIndex ()
            Else If msg.IsRequestFailed ()
                evType = "IsRequestFailed"
                message = msg.GetMessage ()
                index = msg.GetIndex ()
                info = msg.GetInfo ()
            Else If msg.IsStatusMessage ()
                evType = "IsStatusMessage"
                message = msg.GetMessage ()
            Else If msg.IsFullResult ()
                evType = "IsFullResult"
            Else If msg.IsPartialResult ()
                evType = "IsPartialResult"
            Else If msg.IsPaused ()
                evType = "IsPaused"
            Else If msg.IsResumed ()
                evType = "IsResumed"
            Else If msg.IsScreenClosed ()
                evType = "IsScreenClosed"
            Else If msg.IsStreamSegmentInfo ()
                evType = "IsStreamSegmentInfo"
                message = msg.GetMessage ()
                index = msg.GetIndex ()
                info = msg.GetInfo ()
            Else If msg.IsDownloadSegmentInfo ()    ' Undocumented event
                evType = "IsDownloadSegmentInfo"
                message = msg.GetMessage ()
                index = msg.GetIndex ()
                info = msg.GetInfo ()
            Else If msg.IsListItemSelected ()       ' Undocumented event
                evType = "IsListItemSelected"
                index = msg.GetIndex ()
            Else
                evType = "Unknown"
            EndIf
            timeNowStr = timeNow ()
            tabs = Len (timeNowStr) + Len (msgType) + 4
            Print timeNowStr; "  "; msgType; ". Event Type: "; evType + " [" + msg.GetType ().ToStr () + "]. "; "Index: " + index.ToStr ();
            If message <> ""
                Print ". Message: "; message
            Else
                Print ""
            EndIf
            If Type (info) = "roAssociativeArray"
                For Each key In info
                    infoKey = info [key]
                    If Type (GetInterface (infoKey, "ifIntOps")) = "ifIntOps"
                        Print Tab (tabs); key + ": " + infoKey.ToStr ()
                    Else
                        Print Tab (tabs); key + ": "; infoKey
                    EndIf
                End For
            EndIf
        Else
            ' An event type other than "roVideoScreenEvent" or "roVideoPlayerEvent"
            ' Add additional code here to handle other event types
            Print timeNow (); "  "; msgType; ". Event Type: [" + msg.GetType ().ToStr () + "]"
        Endif
    EndIf
End Function

Function timeNow () As String
    dt = CreateObject ("roDateTime")
    dt.ToLocalTime ()
    hh = Right ("0" + dt.GetHours ().ToStr (), 2)
    mm = Right ("0" + dt.GetMinutes ().ToStr (), 2)
    ss = Right ("0" + dt.GetSeconds ().ToStr (), 2)
    mmm = Right ("00" + dt.GetMilliseconds ().ToStr (), 3)
    Return hh + ":" + mm + ":" + ss + "." + mmm
End Function