[{"data":1,"prerenderedAt":785},["ShallowReactive",2],{"navigation_docs":3,"-interface-video-rtmp":224,"-interface-video-rtmp-surround":780},[4,157,184],{"title":5,"path":6,"stem":7,"children":8,"page":156},"Interface","\u002Finterface","1.interface",[9,53,61,68,75,82,90,97,104,111,132,139,145],{"title":10,"path":11,"stem":12,"children":13,"icon":15},"Courts","\u002Finterface\u002Fcourts","1.interface\u002F01.courts\u002F1.index",[14,16],{"title":10,"path":11,"stem":12,"icon":15},"sporty-court-sport",{"title":17,"path":18,"stem":19,"children":20,"icon":22},"Access control and lights","\u002Finterface\u002Fcourts\u002Fintegrations","1.interface\u002F01.courts\u002F5.integrations\u002F1.index",[21,23,28,33],{"title":17,"path":18,"stem":19,"icon":22},"sporty-toggle-large-on",{"title":24,"path":25,"stem":26,"icon":27},"Weblock","\u002Finterface\u002Fcourts\u002Fintegrations\u002Fweblock","1.interface\u002F01.courts\u002F5.integrations\u002F2.weblock","sporty-door-open",{"title":29,"path":30,"stem":31,"icon":32},"Shelly","\u002Finterface\u002Fcourts\u002Fintegrations\u002Fshelly","1.interface\u002F01.courts\u002F5.integrations\u002F3.shelly","sporty-bolt",{"title":34,"path":35,"stem":36,"children":37,"icon":27},"UniFi Access","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F1.index",[38,40,44,49],{"title":39,"path":35,"stem":36,"icon":27},"Overview",{"title":41,"path":42,"stem":43,"icon":22},"Connect the VPN","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fvpn","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F2.vpn",{"title":45,"path":46,"stem":47,"icon":48},"Create an API token","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fapi-token","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F3.api-token","sporty-gear",{"title":50,"path":51,"stem":52,"icon":15},"Set it up in Club Admin","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fclub-admin","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F4.club-admin",{"title":54,"path":55,"stem":56,"children":57,"icon":60},"Members","\u002Finterface\u002Fmembers","1.interface\u002F02.members\u002F1.index",[58],{"title":59,"path":55,"stem":56,"icon":60},"Member management","sporty-user-group",{"title":62,"path":63,"stem":64,"children":65,"icon":67},"Memberships","\u002Finterface\u002Fmemberships","1.interface\u002F03.memberships\u002F1.index",[66],{"title":62,"path":63,"stem":64,"icon":67},"sporty-id-card",{"title":69,"path":70,"stem":71,"children":72,"icon":74},"Leagues","\u002Finterface\u002Fleagues","1.interface\u002F04.leagues\u002F1.index",[73],{"title":69,"path":70,"stem":71,"icon":74},"sporty-ranking-star",{"title":76,"path":77,"stem":78,"children":79,"icon":81},"Tournaments","\u002Finterface\u002Ftournaments","1.interface\u002F05.tournaments\u002F1.index",[80],{"title":76,"path":77,"stem":78,"icon":81},"sporty-trophy",{"title":83,"path":84,"stem":85,"children":86,"icon":89},"Payments and subscriptions","\u002Finterface\u002Fpayments","1.interface\u002F06.payments\u002F1.index",[87],{"title":88,"path":84,"stem":85,"icon":89},"Payments","sporty-credit-card",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"Shop","\u002Finterface\u002Fshop","1.interface\u002F07.shop\u002F1.index",[95],{"title":91,"path":92,"stem":93,"icon":96},"sporty-bag-shopping",{"title":98,"path":99,"stem":100,"children":101,"icon":103},"Schools and coaches","\u002Finterface\u002Fschools","1.interface\u002F08.schools\u002F1.index",[102],{"title":98,"path":99,"stem":100,"icon":103},"sporty-graduation-cap",{"title":105,"path":106,"stem":107,"children":108,"icon":110},"Emails","\u002Finterface\u002Femails","1.interface\u002F09.emails\u002F1.index",[109],{"title":105,"path":106,"stem":107,"icon":110},"sporty-envelope",{"title":112,"path":113,"stem":114,"children":115,"icon":117},"Video and cameras","\u002Finterface\u002Fvideo","1.interface\u002F10.video\u002F1.index",[116,118,122,127],{"title":112,"path":113,"stem":114,"icon":117},"sporty-camera-cctv",{"title":119,"path":120,"stem":121,"icon":117},"Dahua cameras","\u002Finterface\u002Fvideo\u002Fdahua","1.interface\u002F10.video\u002F2.dahua",{"title":123,"path":124,"stem":125,"icon":126},"Other RTMP cameras","\u002Finterface\u002Fvideo\u002Frtmp","1.interface\u002F10.video\u002F3.rtmp","sporty-video",{"title":128,"path":129,"stem":130,"icon":131},"Match analytics","\u002Finterface\u002Fvideo\u002Fanalytics","1.interface\u002F10.video\u002F4.analytics","sporty-chart-simple",{"title":133,"path":134,"stem":135,"children":136,"icon":138},"Reports","\u002Finterface\u002Freports","1.interface\u002F11.reports\u002F1.index",[137],{"title":133,"path":134,"stem":135,"icon":138},"sporty-chart-mixed",{"title":140,"path":141,"stem":142,"children":143,"icon":48},"Settings","\u002Finterface\u002Fsettings","1.interface\u002F12.settings\u002F1.index",[144],{"title":140,"path":141,"stem":142,"icon":48},{"title":146,"path":147,"stem":148,"children":149,"icon":151},"Social publishing","\u002Finterface\u002Fsocial","1.interface\u002F13.social\u002F1.index",[150,152],{"title":146,"path":147,"stem":148,"icon":151},"sporty-newspaper",{"title":153,"path":154,"stem":155,"icon":22},"Connecting channels","\u002Finterface\u002Fsocial\u002Fchannels","1.interface\u002F13.social\u002F2.channels",false,{"title":158,"path":159,"stem":160,"children":161,"icon":164},"Website","\u002Fwebsite","2.website\u002F1.index",[162,165,170,174,179],{"title":163,"path":159,"stem":160,"icon":164},"Website builder","sporty-browser",{"title":166,"path":167,"stem":168,"icon":169},"Pages, hero and footer","\u002Fwebsite\u002Fpages","2.website\u002F2.pages","sporty-file-lines",{"title":171,"path":172,"stem":173,"icon":151},"News and events","\u002Fwebsite\u002Fnews-and-events","2.website\u002F3.news-and-events",{"title":175,"path":176,"stem":177,"icon":178},"Coaches and gallery","\u002Fwebsite\u002Fcoaches-and-gallery","2.website\u002F4.coaches-and-gallery","sporty-images",{"title":180,"path":181,"stem":182,"icon":183},"FAQ and sponsors","\u002Fwebsite\u002Ffaq-and-sponsors","2.website\u002F5.faq-and-sponsors","sporty-circle-question",{"title":185,"path":186,"stem":187,"children":188,"icon":190},"OAuth & Sign in with Sporty","\u002Foauth","4.oauth\u002F1.index",[189,191,195,199,203,207,211,215,219],{"title":185,"path":186,"stem":187,"icon":190},"sporty-brackets-curly",{"title":192,"path":193,"stem":194,"icon":190},"Registering an application","\u002Foauth\u002Fclients","4.oauth\u002F2.clients",{"title":196,"path":197,"stem":198,"icon":190},"The authorization code flow","\u002Foauth\u002Fauthorization-code","4.oauth\u002F3.authorization-code",{"title":200,"path":201,"stem":202,"icon":190},"Scopes","\u002Foauth\u002Fscopes","4.oauth\u002F4.scopes",{"title":204,"path":205,"stem":206,"icon":190},"Sign in with Sporty","\u002Foauth\u002Fsign-in-with-sporty","4.oauth\u002F5.sign-in-with-sporty",{"title":208,"path":209,"stem":210,"icon":190},"The partner API","\u002Foauth\u002Fpartner-api","4.oauth\u002F6.partner-api",{"title":212,"path":213,"stem":214,"icon":190},"Syncing bookings","\u002Foauth\u002Fbooking-sync","4.oauth\u002F7.booking-sync",{"title":216,"path":217,"stem":218,"icon":190},"MCP and AI clients","\u002Foauth\u002Fmcp-and-ai-clients","4.oauth\u002F8.mcp-and-ai-clients",{"title":220,"path":221,"stem":222,"icon":223},"Agent checkout","\u002Foauth\u002Fagent-checkout","4.oauth\u002F9.agent-checkout","sporty-cart-shopping",{"id":225,"title":123,"body":226,"description":773,"extension":774,"links":775,"meta":776,"navigation":777,"path":124,"seo":778,"stem":125,"__hash__":779},"docs\u002F1.interface\u002F10.video\u002F3.rtmp.md",{"type":227,"value":228,"toc":762},"minimark",[229,238,241,258,263,371,374,378,390,402,406,409,421,424,462,465,472,476,481,488,494,501,512,516,529,532,536,543,560,563,570,581,603,626,640,650,654,673,677,747],[230,231,232,233,237],"p",{},"SportyPlus does not need a particular make of camera. Anything that can ",[234,235,236],"strong",{},"push an\nRTMP stream"," to an address you give it will work — most IP cameras, encoders and\nNVRs can, and so can software like OBS.",[230,239,240],{},"What differs by make is only where the settings live and what they are called.\nThe values below are the same for all of them.",[242,243,244,250],"note",{},[230,245,246,249],{},[234,247,248],{},"What you give up without DoLynk."," A Dahua camera on DoLynk Cloud also keeps\nits own copy on an SD card, so a match interrupted by a connection drop can be\ncompleted afterwards from the camera. Any other camera has no second copy: if the\nclub's internet drops mid-match, that part of the recording is gone for good.",[230,251,252,253,257],{},"You also lose remote configuration. Everything on this page has to be set in the\ncamera's own interface, on the venue network — SportyPlus cannot read or change\nany of it. See ",[254,255,119],"a",{"href":256},"\u002Fvideo\u002Fdahua"," for what the alternative looks like.",[259,260,262],"h2",{"id":261},"the-settings","The settings",[264,265,266,279],"table",{},[267,268,269],"thead",{},[270,271,272,276],"tr",{},[273,274,275],"th",{},"Setting",[273,277,278],{},"Value",[280,281,282,294,304,314,325,335,346,357],"tbody",{},[270,283,284,288],{},[285,286,287],"td",{},"Video codec",[285,289,290,293],{},[234,291,292],{},"H.264"," — never H.265\u002FHEVC",[270,295,296,299],{},[285,297,298],{},"Keyframe interval",[285,300,301],{},[234,302,303],{},"1 second",[270,305,306,309],{},[285,307,308],{},"Resolution",[285,310,311],{},[234,312,313],{},"1920×1080",[270,315,316,319],{},[285,317,318],{},"Frame rate",[285,320,321,324],{},[234,322,323],{},"30"," (25 in PAL installs), fixed",[270,326,327,330],{},[285,328,329],{},"Rate control",[285,331,332],{},[234,333,334],{},"CBR",[270,336,337,340],{},[285,338,339],{},"Bitrate",[285,341,342,345],{},[234,343,344],{},"4096 kbps"," (never above 6144)",[270,347,348,351],{},[285,349,350],{},"Audio codec",[285,352,353,356],{},[234,354,355],{},"AAC",", or no audio at all",[270,358,359,362],{},[285,360,361],{},"Profile",[285,363,364,367,368],{},[234,365,366],{},"High"," or ",[234,369,370],{},"Baseline",[230,372,373],{},"Everything below explains why, and what goes wrong when one is missed.",[259,375,377],{"id":376},"video-codec-h264-only","Video codec — H.264 only",[379,380,381,387],"warning",{},[230,382,383,386],{},[234,384,385],{},"H.265 (HEVC) produces no video at all, and says nothing about it."," The camera\nconnects, the stream is accepted, and no picture ever arrives — not in live view,\nand not in the recording. There is no error message anywhere to point at it.",[230,388,389],{},"If a camera streams nothing at all and everything else looks right, this is the\nfirst thing to check.",[230,391,392,393,395,396,398,399,401],{},"Set the codec to ",[234,394,292],{},". If the camera offers a profile, ",[234,397,366],{}," is right;\n",[234,400,370],{}," is also fine and displays a fraction sooner.",[259,403,405],{"id":404},"keyframe-interval-one-second","Keyframe interval — one second",[230,407,408],{},"This is the setting that decides how far behind live view runs, and the one most\nlikely to be wrong out of the box.",[230,410,411,412,416,417,420],{},"A viewer can only join the video at a ",[413,414,415],"em",{},"keyframe",", and live video is cut into\nchunks on keyframe boundaries. A camera sending a keyframe once every 25 seconds\nproduces 25-second chunks, and live view ends up ",[234,418,419],{},"more than a minute behind"," the\ncourt. One keyframe per second brings that to about three seconds.",[230,422,423],{},"Cameras express this in one of two ways, and it is worth checking which:",[425,426,427,452],"ul",{},[428,429,430,433,434,437,438,437,441,367,444,447,448,451],"li",{},[234,431,432],{},"In frames"," — called ",[413,435,436],{},"I Frame Interval",", ",[413,439,440],{},"GOP",[413,442,443],{},"GOP length",[413,445,446],{},"keyframe\ninterval",". Set it to ",[234,449,450],{},"the same number as the frame rate",": 30 at 30fps, 25 at\n25fps.",[428,453,454,457,458,461],{},[234,455,456],{},"In seconds"," — set it to ",[234,459,460],{},"1",".",[230,463,464],{},"Going shorter buys nothing: chunks cannot get smaller than a second no matter\nwhat the camera does, and the extra keyframes come out of picture quality. Going\nlonger costs you directly — a 2-second interval means about six seconds behind,\nand it grows from there.",[242,466,467,468,471],{},"Some cameras have a \"smart\" or \"adaptive\" mode — Dahua calls it Smart Codec or\nH.264+, other makes call it Smart Encoding, H.265+ or similar — that holds back\nkeyframes when the picture is not moving. On a court between points that is most\nof the time. ",[234,469,470],{},"Turn it off."," It overrides the interval above, and an idle court\nis its worst case.",[259,473,475],{"id":474},"resolution-frame-rate-and-bitrate","Resolution, frame rate and bitrate",[230,477,478],{},[234,479,480],{},"1920×1080 at 30fps, 4096 kbps, CBR.",[230,482,483,484,487],{},"Nothing is re-encoded between the camera and a viewer, so every person watching\npulls the full bitrate the camera sends. Doubling it doubles what the club's\nconnection has to carry for each of them, and a stream the uplink cannot sustain\ndrops out — which costs the match, not just the sharpness. ",[234,485,486],{},"Do not exceed 6144\nkbps"," at this resolution without asking us first.",[230,489,490,491,493],{},"Use ",[234,492,334],{}," rather than VBR. Nothing smooths a variable bitrate's spikes before\nthey reach a viewer, and those spikes land exactly when the match is worth\nwatching.",[230,495,496,497,500],{},"Use a ",[234,498,499],{},"fixed"," frame rate. Variable frame rate makes chunk lengths uneven, and\nuneven chunks slow live view for everyone watching that court.",[230,502,503,504,507,508,511],{},"Avoid ",[234,505,506],{},"4K"," and ",[234,509,510],{},"50 or 60fps",". Neither breaks anything by itself, but both\nmultiply what every viewer downloads, and the vendor presets that offer them\noften carry long keyframe intervals.",[259,513,515],{"id":514},"audio","Audio",[379,517,518,521,522,437,525,528],{},[234,519,520],{},"Only AAC works."," Cameras frequently default to ",[234,523,524],{},"G.711",[234,526,527],{},"G.726"," or\nsimilar, and those are accepted all the way along — the camera connects, the\nvideo plays, and the sound is simply never there. Nothing reports an error, so it\nreads as a broken microphone rather than a setting.",[230,530,531],{},"A camera with no microphone, or with audio switched off, is fine. It streams and\nrecords normally without an audio track.",[259,533,535],{"id":534},"pointing-the-camera-at-sportyplus","Pointing the camera at SportyPlus",[230,537,538,539,542],{},"In ",[234,540,541],{},"Club Admin → Commercial → Cameras",", create the camera:",[425,544,545,554],{},[428,546,547,550,551],{},[234,548,549],{},"Camera type"," — ",[413,552,553],{},"Pushes RTMP to us",[428,555,556,559],{},[234,557,558],{},"Court"," — the court the camera actually points at",[379,561,562],{},"Double-check the court. A camera mapped to the wrong court records the wrong\nmatch, and nobody notices until someone watches one back — by which point the\nfootage they wanted is gone.",[230,564,565,566,569],{},"Save, reopen it, and copy the ",[234,567,568],{},"stream address",". It looks like:",[571,572,577],"pre",{"className":573,"code":575,"language":576},[574],"language-text","rtmp:\u002F\u002Fstream1.sporty.plus\u002Fstream\u002F\u003Cplayback-id>?key=\u003Cstream-key>\n","text",[578,579,575],"code",{"__ignoreMap":580},"",[230,582,583,584,437,587,590,591,594,595,598,599,602],{},"Put that in the camera's RTMP settings — usually under ",[413,585,586],{},"Network",[413,588,589],{},"Streaming"," or\n",[413,592,593],{},"Publish"," — and enable it. Some cameras split the address into a ",[234,596,597],{},"server URL","\nand a ",[234,600,601],{},"stream key","; where they do:",[425,604,605,613],{},[428,606,607,550,610],{},[234,608,609],{},"Server \u002F URL",[578,611,612],{},"rtmp:\u002F\u002Fstream1.sporty.plus\u002Fstream",[428,614,615,550,618,621,622,625],{},[234,616,617],{},"Stream key",[578,619,620],{},"\u003Cplayback-id>?key=\u003Cstream-key>",", exactly as given, including\nthe ",[578,623,624],{},"?key="," part",[379,627,628,637],{},[230,629,630,636],{},[234,631,632,633,635],{},"The ",[578,634,624],{}," part is not optional."," Without it, or with one character wrong,\nthe stream is refused and most cameras retry silently forever with no useful\nerror of their own — so a mistyped address looks like a network problem.",[230,638,639],{},"Every camera has its own address and key. They cannot be shared or reused between\ncameras: two cameras on one key cannot both stream.",[230,641,642,643,367,646,649],{},"If the camera pushes more than one stream, point it at the one you configured\nabove — usually called the ",[234,644,645],{},"main",[234,647,648],{},"primary"," stream. A camera publishing its\nsecondary stream sends none of these settings, which looks exactly like the\nsettings not having taken.",[259,651,653],{"id":652},"checking-it-works","Checking it works",[655,656,657,667],"ol",{},[428,658,659,662,663,666],{},[234,660,661],{},"Live view"," — open the camera in Club Admin. The picture should appear within\na few seconds and stay ",[234,664,665],{},"about three seconds"," behind the court. A minute or\nmore behind means the keyframe interval is too long, or smart encoding is on.",[428,668,669,672],{},[234,670,671],{},"A real recording"," — play back a reservation recorded on that court.",[259,674,676],{"id":675},"if-something-is-wrong","If something is wrong",[264,678,679,689],{},[267,680,681],{},[270,682,683,686],{},[273,684,685],{},"What you see",[273,687,688],{},"Usually means",[280,690,691,699,707,715,723,731,739],{},[270,692,693,696],{},[285,694,695],{},"Live view is a minute or more behind",[285,697,698],{},"Keyframe interval too long, or smart encoding on",[270,700,701,704],{},[285,702,703],{},"Live view never appears, stream looks connected",[285,705,706],{},"The codec is H.265, not H.264",[270,708,709,712],{},[285,710,711],{},"Live view never appears at all",[285,713,714],{},"Stream address wrong, or the camera cannot reach the internet",[270,716,717,720],{},[285,718,719],{},"Live view stutters or drops out",[285,721,722],{},"Bitrate too high for the club's upload",[270,724,725,728],{},[285,726,727],{},"Video plays but there is no sound",[285,729,730],{},"Audio codec is not AAC",[270,732,733,736],{},[285,734,735],{},"Settings appear to do nothing",[285,737,738],{},"The camera is publishing its secondary stream",[270,740,741,744],{},[285,742,743],{},"A match has a hole in it",[285,745,746],{},"The connection dropped — without an SD card there is nothing to recover",[242,748,749,759],{},[230,750,751,754,755,758],{},[234,752,753],{},"Why delay can drift upward on its own."," Live view runs as far behind as the\n",[413,756,757],{},"longest"," chunk in the last few seconds, not the average. A camera that mostly\nsends keyframes on time but occasionally misses one sits at the slower figure\nuntil it stops missing them.",[230,760,761],{},"So live view that \"randomly got worse\" is usually the camera's keyframes rather\nthan the club's internet — check the keyframe interval before anything else.",{"title":580,"searchDepth":763,"depth":763,"links":764},2,[765,766,767,768,769,770,771,772],{"id":261,"depth":763,"text":262},{"id":376,"depth":763,"text":377},{"id":404,"depth":763,"text":405},{"id":474,"depth":763,"text":475},{"id":514,"depth":763,"text":515},{"id":534,"depth":763,"text":535},{"id":652,"depth":763,"text":653},{"id":675,"depth":763,"text":676},"Settings for any camera that can push RTMP, whatever the make","md",null,{},{"icon":126},{"title":123,"description":773},"GPh3zNoCDI-CDZtCuA2liV1D4yaTe043tnL9WQhB3K0",[781,783],{"title":119,"path":120,"stem":121,"description":782,"icon":117,"children":-1},"Everything a Dahua camera needs, from unboxing to a working recording",{"title":128,"path":129,"stem":130,"description":784,"icon":131,"children":-1},"How SportyPlus turns a court recording into player statistics, and what it needs from you",1790691909306]