uccmisl / godash

goDASH - GO accelerated HAS framework for rapid prototyping - goDASH testbed available at:
https://github.com/uccmisl/godashbed
GNU General Public License v3.0
45 stars 7 forks source link

[Question] May I know how to set up live streaming with GoDASH? #10

Closed InanisV closed 9 months ago

InanisV commented 10 months ago

Hi, Is there any instructions or samples of Live Streaming MPD of GoDASH?

Thank you!

jq5 commented 10 months ago

Hi Tom,

Hope all is well

Is it the Live DASH profile you want to stream or are you asking how to stream using goDASH?

To answer both questions:

  1. To use the Live DASH profile, you just need to point to an MPD with a live profile.

We have our own 4K test dataset at “https://www.ucc.ie/en/misl/research/datasets/ivid_uhd_dataset/

Which contains 30 live DASH MPDs across a range of segment durations.

This leads to item 2:

  1. to use goDASH, just follow the “example to launch the app” on the readme page on GitHub

Easiest option is to run this command in a terminal window: ./godash -config ./config/configure.json And change the settings to suit the parameters you want, in ./config/configure.json

Which includes changing the MPD to use for streaming - in the “url” setting - which I have changed below to point to one of our Live MPD profiles

{ "adapt" : "arbiter", "codec" : "h264", "debug" : "on", "initBuffer" : 2, "maxBuffer" : 60, "maxHeight" : 1080, "streamDuration" : 40, "storeDash" : "off", "outputFolder" : "123456", "logFile" : "log_file_2", "getHeaders" : "off", "terminalPrint" : "on", "printHeader" : "{\"Algorithm\":\"on\",\"Seg_Dur\":\"on\",\"Codec\":\"on\",\"Width\":\"on\",\"Height\":\"on\",\"FPS\":\"on\",\"Play_Pos\":\"on\",\"RTT\":\"on\",\"Seg_Repl\":\"on\",\"Protocol\":\"on\",\"TTFB\":\"on\",\"TTLB\":\"on\",\"P.1203\":\"on\",\"Clae\":\"on\",\"Duanmu\":\"on\",\"Yin\":\"on\",\"Yu\":\"on\"}", "expRatio": 0.2, "quic" : "off", "useTestbed" : "off", "url" : "[http://cs1dev.ucc.ie/misl/4K_non_copyright_dataset/4_sec/x264/bbb/DASH_Files/live/bbb_enc_x264_dash.mpd]", "QoE" : "on", "serveraddr" : "off" }

Hope this helps…

If not let me know and I’ll advise some more :)

Best wishes,

J

Dr. Jason Quinlan

Lecturer

School of Computer Science and Information Technology | Room G.72 Western Gateway Building | University College Cork | T12 XF62 ☎ +353 21 4205987 | ✉ @. @.> | @.***

    

On 10 Dec 2023, at 06:26, Tom Zhan @.***> wrote:

Hi, Is there any instructions or samples of Live Streaming MPD of GoDASH?

Thank you!

— Reply to this email directly, view it on GitHub https://github.com/uccmisl/godash/issues/10, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACN44DKT57SG7PMMOLJMINTYIVIX7AVCNFSM6AAAAABAOK2OV2VHI2DSMVQWIX3LMV43ASLTON2WKOZSGAZTIMRTHA3TAOA. You are receiving this because you are subscribed to this thread.

InanisV commented 10 months ago

Hi Jason,

That's very kind of you. Do appreciate your answer! Currently I am using ffmpeg to generate a live stream. The stream clips and MPD are kept updated by ffmpeg in the data folder. But the goDASH player reports error when streaming, saying Panic error recovered : runtime error: index out of range [0] with length 0.

I have checked that the player can fetch the MPD file correctly. So I guess that it may be the compatibility problem of MPD and goDASH (since the live stream itself works with DASH.js). After comparing the Live MPD you provided with mine, I still cannot tell the problem. It seems that my MPD is correct in format. Could you help me check the problem? Thank you!

<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:mpeg:dash:schema:mpd:2011"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
    profiles="urn:mpeg:dash:profile:isoff-live:2011"
    type="static"
    mediaPresentationDuration="PT10M3.9S"
    minBufferTime="PT0.5S">
    <ProgramInformation>
        <Title>Big Buck Bunny, Sunflower version</Title>
    </ProgramInformation>
    <Period id="0" start="PT0.0S">
        <AdaptationSet id="0" contentType="video" segmentAlignment="true" bitstreamSwitching="true" frameRate="30/1" maxWidth="1280" maxHeight="720" par="16:9" lang="und">
            <Representation id="0" mimeType="video/mp4" codecs="avc1.64001e" bandwidth="200000" width="640" height="360" sar="1:1">
                <SegmentTemplate timescale="1000000" duration="500000" availabilityTimeOffset="0.467" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
                </SegmentTemplate>
            </Representation>
            <Representation id="1" mimeType="video/mp4" codecs="avc1.64001f" bandwidth="600000" width="852" height="480" sar="640:639">
                <SegmentTemplate timescale="1000000" duration="500000" availabilityTimeOffset="0.467" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
                </SegmentTemplate>
            </Representation>
            <Representation id="2" mimeType="video/mp4" codecs="avc1.64001f" bandwidth="1000000" width="1280" height="720" sar="1:1">
                <SegmentTemplate timescale="1000000" duration="500000" availabilityTimeOffset="0.467" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
    </Period>
</MPD>
jq5 commented 10 months ago

I think it has to be the structure of the MPD.

The live version we have in our dataset was created by GPAC version 0.7.2

This may have changed over the years, and as goDASH is no longer in active development, issues can occur.

From a quick review of http://cs1dev.ucc.ie/misl/4K_non_copyright_dataset/4_sec/x264/sintel/DASH_Files/live/sintel_enc_x264_dash.mpd? and the content you provided below, I can see a few additional parameters in your file that are not in our MPD - I’ve marked a few of them in red below, but there are more.

It’s relatively easy to update goDASH to at least hold the extra parameters. If you look in http/mpdPArsing.go, you will see a number of structures.

Starting around line 80, you see a “type MPD struct” containing a number of variable and values

Then further on, a number of addition struct’s that are named after these variables.

This is how the MPD is parsed.

You just need to add some new variables and values that match the extra parameters you have in your MPD file

If you take “id="0" start="PT0.0S”” as an example from , you will not see these parameters in my MPD, but if you look into the mpdParser code, you will see that they are accounted for in the go code:

type Period struct { XMLName xml.Name xml:"Period" Duration string xml:"duration,attr" AdaptationSet []AdaptationSet xml:"AdaptationSet" ID string xml:"id,attr" Start string xml:"start,attr" }

So typically this part of your MPD file is not the issue, so you move on to the other para’s and see if they are there...

This will at least allow your MPD to be fully read and parsed.

This may not fix your error, but at least it will solve one problem and allow you to move on to the next problem :)

Also, goDASH does not re-fetch the MPD, as this is typically only done once by goDASH at the start of the stream, but this depends on where ffmpeg is updating the MPD (local or server-side). So, the issue might be here also..

Hope this helps,

Best wishes,

J

Dr. Jason Quinlan

Lecturer

School of Computer Science and Information Technology | Room G.72 Western Gateway Building | University College Cork | T12 XF62 ☎ +353 21 4205987 | ✉ @. @.> | @.***

    

On 10 Dec 2023, at 14:40, Tom Zhan @.***> wrote:

Hi Jason,

That's very kind of you. Do appreciate your answer! Currently I am using ffmpeg to generate a live stream. The stream clips and MPD are kept updated by ffmpeg in the data folder. But the goDASH player reports error when streaming, saying Panic error recovered : runtime error: index out of range [0] with length 0.

I have checked that the player can fetch the MPD file correctly. So I guess that it may be the compatibility problem of MPD and goDASH (since the live stream itself works with DASH.js). After comparing the Live MPD you provided with mine, I still cannot tell the problem. It seems that my MPD is correct in format. Could you help me check the problem? Thank you!

<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT10M3.9S" minBufferTime="PT0.5S">

Big Buck Bunny, Sunflower version

— Reply to this email directly, view it on GitHub https://github.com/uccmisl/godash/issues/10#issuecomment-1848983556, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACN44DPYW7AK7NBYGNFCPX3YIXCWVAVCNFSM6AAAAABAOK2OV2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNBYHE4DGNJVGY. You are receiving this because you commented.