Coder Social home page Coder Social logo

inputstream.adaptive's Introduction

License: GPL-2.0-or-later Build Status Build and run tests Build Status

InputStream Adaptive add-on for Kodi

This is a Kodi input stream add-on which acts as a demuxer for segmented, multi-bitrate internet streams. The most common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.

The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others, however some are only available on specific operating systems. To use the Google Widevine DRM on non-Android systems is required the installation of the Widevine CDM module library (not included with this add-on).

To enable InputStream playback via your video add-on, you must first configure the ListItem properties appropriately.

For test purposes, you can create STRM files with URLs and playback parameters to instruct Kodi to use this InputStream add-on.

Please refer to the Wiki pages for detailed instructions on how to integrate, build and test with your add-on.

Add-on WIP status

There are many features that may currently be partially functional or not implemented, we suggest you to open the following Wiki page to better understand the current status of add-on development: Add‐on WIP status

Notes:

  • This addon uses threads to download segments. The memory consumption is the sum of single segment from each stream currently playing. Refering to known streams it is < 10MB for 720p videos.

Acknowledgements

InputStream Adaptive exists thanks to the help of many

  • Special thanks to the author / creator @peak3d
  • All the contributors
  • Bento4 for the great extensible library for mp4 streams

License

InputStream Adaptive is GPLv2 licensed. You may use, distribute and copy it under the license terms.

inputstream.adaptive's People

Contributors

afedchin avatar alwinesch avatar arvvoid avatar basilgello avatar castagnait avatar dagwieers avatar frodo19 avatar gade01 avatar github-actions[bot] avatar gizmocuz avatar glennguy avatar iranl avatar ksooo avatar kszaq avatar lrusak avatar matthuisman avatar maven85 avatar mediaminister avatar misterd81 avatar peak3d avatar phunkyfish avatar rechi avatar roliverosc avatar sopor avatar spyderboy92 avatar thunderbird2086 avatar tmm1 avatar vlmaksime avatar weblate avatar wsnipex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

inputstream.adaptive's Issues

Stream not playing

Hi,
i am trying to make a plugin for the german anime streaming service akibapass.de.
They are using HLS but Kodi is able to play it even without inputstream.

The problem is for an unknown reason Kodi fails at some point, i already asked at the Kodi forum.

To make it short:

  • Kodi fails to play the m3u8.
  • The m3u8 contains a separate audio stream and multiple video streams for different resolutions.
  • If i extract the links to these m3u8 files and let kodi play these it works. But since the audio is separate we have no sound.
  • m3u8 samples

Now i am trying to implement it with inputstream but its not working.
Full debug log

The relevant code part is this
and for inputstream i changed it to this:

url = 'https://www.akibapass.de' + matches[7:-2]
item = xbmcgui.ListItem(args.name, path=url)

item.setProperty('inputstreamaddon', 'inputstream.adaptive')
item.setProperty('inputstream.adaptive.manifest_type', 'hls')
item.setProperty('inputstream.adaptive.stream_headers', login.getCookie(args)[1:])
#item.setProperty('inputstream.adaptive.license_key', url + '|' + login.getCookie(args)[1:])

Where is the problem?

Greetings,
MrKrabat

Kodi 17.3

hello
i can not install the zipfile on kodi 17.3 ?

smoothstreaming chunk duration parameter before t

Hi, I had issue when parsing ism manifest file while chunk duration parameter is set before t.
Example:< c d="20000000" t="1204675194880260/>

Below is what I made to try to fix this.

static void XMLCALL
start(void *data, const char *el, const char **attr)
{
/***
***//
 for (; *attr;)
        {
          int startPTS_set = 0;
          if (*(const char*)*attr == 't')
          {

            uint64_t lt(atoll((const char*)*(attr + 1)));
            if (!dash->current_adaptationset_->segment_durations_.data.empty())
              dash->current_adaptationset_->segment_durations_.data.back() = static_cast<uint32_t>(lt - dash->pts_helper_);
            else
              dash->current_adaptationset_->startPTS_ = lt;
            dash->pts_helper_ = lt;
            push_duration = 0;
             startPTS_set = 1;
          }
          else if (*(const char*)*attr == 'd')
          {
            push_duration = atoi((const char*)*(attr + 1));
            if(startPTS_set==1)
            	break;
          }
          attr += 2;
        }

/***
**/
}```

Maybe not the right place to ask for it, but the stream that I want to play is encrypted, I have the right license but ffmpeg can't decode it. kodi log link here
[kodi.txt](https://github.com/peak3d/inputstream.adaptive/files/870999/kodi.txt)

thanks

Unable to resolve: inputstream.adaptive.so.2.0.18 ADDON_GetTypeVersion

Today my Netflix plugin (https://github.com/asciidisco/plugin.video.netflix) stopped playing any videos, when I've checked logs I've got following:

21:19:26.050 T:140430518667008  NOTICE: Creating InputStream
21:19:26.097 T:140430518667008 WARNING: Unable to resolve: /inputstream.adaptive.so.2.0.18 ADDON_GetTypeVersion, reason: /usr/lib/x86_64-linux-gnu/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.2.0.18: undefined symbol: ADDON_GetTypeVersion
21:19:26.097 T:140430518667008   ERROR: Unable to resolve exports from dll /usr/lib/x86_64-linux-gnu/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.2.0.18

I've got installed kodi-inputstream-adaptive 2.0.18-3~trusty from

deb http://ppa.launchpad.net/team-xbmc/unstable/ubuntu trusty main
deb-src http://ppa.launchpad.net/team-xbmc/unstable/ubuntu trusty main

my kodi version is 2:18.0+git20170918.0201-f5bdcb3-0trusty from http://ppa.launchpad.net/team-xbmc/xbmc-nightly/ubuntu/

Some streams play with audio only and incorrect duration

While inputstream.adaptive is able to play back this stream correctly, this stream does not work correctly. The latter gives me audio with no video and a totally wrong duration (about 500 minutes instead of the expected 30 minutes).

Note that these streams will only be available for a few weeks and will only work from within the UK.

Unable to locate addon

I updated my kodi and I can't seem to find this addon. Youtube had dash greyed out.

Please help

Custom HTTP Header for license acquisition

I don't know if i haven't seen the option, but i have to send a HTTP header to acquire the license.

  • Kodi 18 Win32 compiled Aug 17th 2017
  • inputstream.adaptive 2.0.9

Here the code i am using

play_item = xbmcgui.ListItem(path=mpd) #manifest = mpd url
play_item.setContentLookup(False)
play_item.setMimeType('application/dash+xml')
play_item.setProperty(inputstream_addon + '.stream_headers', 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0&AVS_COOKIE='+cookie)
play_item.setProperty(inputstream_addon + '.license_type', 'com.widevine.alpha')
play_item.setProperty(inputstream_addon + '.manifest_type', 'mpd')
play_item.setProperty(inputstream_addon + '.license_key', license_address +'||R{SSM}|')
play_item.setProperty('inputstreamaddon', "inputstream.adaptive")
xbmcplugin.setResolvedUrl(handle=self.plugin_handle, succeeded=True, listitem=play_item)

I have to send AVS_COOKIE to license_address and possibily another user-agent.
Actually it sends custom headers only to mpd manifest.

How can i do?

Another licence related custom header is required

X-AxDRM-Message

It's for Axinom based Widevine implementations and Kodi internals are blocking it for being set.

So while this, obviously, works:
#KODIPROP:inputstream.adaptive.license_key=http://drm-widevine-licensing.axtest.net/AcquireLicense|User-Agent=MozillaCustomAgent|A{SSM}|

this doesn't:
#KODIPROP:inputstream.adaptive.license_key=http://drm-widevine-licensing.axtest.net/AcquireLicense|X-AxDRM-Message=eyJ0eX|A{SSM}|

and it should in order to obtain the license key.

Kodi 17.4 debug log yields:

DEBUG: CurlFile::ParseAndCorrectUrl() ignoring header option 'X-AxDRM-Message:

`ADDON_StructSetting` was not declared in this scope

When building inputstream.adaptive master with the current Kodi master (to be Kodi "L"), the build fails with this error:

/usr/bin/x86_64-pc-linux-gnu-g++ -DBUILD_KODI_ADDON -D__STDC_FORMAT_MACROS -Dinputstream_adaptive_EXPORTS -I/usr/include/kodi -I/usr/include/p8-platform -I/var/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/lib/libbento4/Core   -DNDEBUG -O2 -march=native -pipe -fomit-frame-pointer -flto -fuse-linker-plugin -std=c++11 -fPIC   -D_LINUX -DTARGET_POSIX -DTARGET_LINUX -DHAVE_SSE=1 -DHAVE_SSE2=1 -DHAVE_SSE3=1 -DHAVE_SSSE3=1 -DHAVE_SSE4_1=1 -o CMakeFiles/inputstream.adaptive.dir/src/common/AdaptiveStream.cpp.o -c /var/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/common/AdaptiveStream.cpp
/var/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/main.cpp:1405:34: error: ‘ADDON_StructSetting’ was not declared in this scope
   unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet)
                                  ^~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/main.cpp:1405:57: error: ‘sSet’ was not declared in this scope
   unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet)

RPMLint Incorrect FSF Address

Hi,

I'm in the process of packaging this for Fedora and rpmlint is throwing some validation errors against the LICENSE headers in some of your source files.

As advised here https://fedoraproject.org/wiki/Common_Rpmlint_issues#incorrect-fsf-address I'm creating an issue here. Essentially most of the header files under /libbento4 are reporting an incomplete address for the Free Software Foundation e.g.

59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

But should be:

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Thanks

Compile error with last commit

With the last commit:
b3327ff

I am getting the following build error on latest Kodi nightlies:

/mnt/package/mediacenter-next-osmc/src/xbmc-42591d7f796dba851579cbccbb6ba9dbbf2a4b38/cmake/addons/build/inputstream.adaptive/src/main.cpp: In function 'INPUTSTREAM_INFO GetStream(int)':
/mnt/package/mediacenter-next-osmc/src/xbmc-42591d7f796dba851579cbccbb6ba9dbbf2a4b38/cmake/addons/build/inputstream.adaptive/src/main.cpp:1538:21: error: invalid conversion from 'const char*' to 'unsigned int' [-fpermissive]
       0, 0, 0, 0, 0 };
                     ^
/mnt/package/mediacenter-next-osmc/src/xbmc-42591d7f796dba851579cbccbb6ba9dbbf2a4b38/cmake/addons/build/inputstream.adaptive/src/main.cpp:1538:21: warning: narrowing conversion of '0.0f' from 'float' to 'unsigned int' inside { } [-Wnarrowing]
CMakeFiles/inputstream.adaptive.dir/build.make:62: recipe for target 'CMakeFiles/inputstream.adaptive.dir/src/main.cpp.o' failed
make[5]: *** [CMakeFiles/inputstream.adaptive.dir/src/main.cpp.o] Error 1

Failed to install from zip

hi

im struggling to get the inputstream addon to install from the zip file, i assume its because i dont have some dependencies installed. ive downloaded the kodinerds repository, but i cant seem to find the addon in the repo either?

please help, i need this to run Amazon VOD through Kodi and not a browser!

thanks

Switching frame rate often results in freeze

On Nvidia Shield if frame rate switching is enabled this often leads to a freeze or a running video without audio. It happens with different plugins which uses inputsream.adaptive but works with local content.
If trying several times, normally on the 2-3 try, it works and the video is played including audio.
Audio passthrough is enabled for everything if this matters.

In kodi.log the following appears.
18:18:14.297 T:138407871568 NOTICE: VideoPlayer: OnResetDisplay received 18:18:15.353 T:138809402448 ERROR: CAESinkAUDIOTRACK::AddPackets write returned error: -12 18:18:15.353 T:138809402448 ERROR: CActiveAESink::OutputSamples - sink returned error 18:18:15.361 T:138809402448 NOTICE: Trying to open: 192000 samplerate 12 channelMask 13 encoding 18:18:15.364 T:138809402448 ERROR: AESinkAUDIOTRACK - Unable to create AudioTrack 18:18:15.364 T:138809402448 NOTICE: Trying to open: 192000 samplerate 12 channelMask 13 encoding 18:18:15.366 T:138809402448 ERROR: AESinkAUDIOTRACK - Unable to create AudioTrack 18:18:16.647 T:139109667920 ERROR: CDVDVideoCodecAndroidMediaCodec::AddData error(-10000)

I already had some similar issue with Nvidia graphic cards using vdpau on Linux. There it was caused by the player wanted to write to the device while the device was in a reset state caused by the framerate switch.

would it be possible to include some build/install instructions?

With widespread coverage of the netflix plugin (of which this or at least its fork is a dependancy) and no clarity on when merges back to the kodi trunk are expected (and therefore apear in nightly builds), you'll likely find a lot of people like myself who see that as a feature just too good to wait until kodi 18 for so are trying to compile kodi-agile and the various dependencies.

Would it be possible to include some build / install instructions for this in the readme, similar to
https://github.com/FernetMenta/kodi-agile/tree/master/docs

Is it possible to add support for Brightcove's implementation of Widevine?

Hi,

I'm working on an addon that has some content encrypted with Widevine using Brightcove. Unfortunately the license retrieval by sending a request to their server which then is modified and sent to their actual private widevine server. The process is outlined in brief here: https://support.brightcove.com/en/video-cloud/docs/protecting-your-content-using-google-widevine

I haven't been able to see much in comparing the hex from the POST data to what Chrome sends. Here is what the android app sends to the Brightcove license server:

08 01 12 8f 0d 0a a0 0c 08 01 12 eb 09 0a ae 02 08 02 12 10 20 65 ee b5 72 be 52 f1 91 02 06 3b dc 82 cc 96 18 c6 f5 c8 bf 05 22 8e 02 30 82 01 0a 02 82 01 01 20 c3 77 8c 17 b7 86 0f 33 02 c2 c9 03 66 b6 5c ec b3 f3 03 7f 36 a8 a0 77 07 93 f7 04 74 c5 20 ef f3 af a3 21 51 2a b5 a5 73 4a d6 d0 3a 70 04 b9 13 12 8f ee 92 1a b1 92 08 81 a5 ad 34 4c d9 59 b0 0c 88 12 dd d5 16 5b 70 f3 68 e0 3c 0f a9 5b bb 2f b2 4a 34 d0 43 49 da bf da da 8a 5b 78 91 3a 9b 8e 95 2e 09 dc a5 3f 4c 6a 7c a4 ea 87 92 09 2f 4e b8 f3 22 93 7a 71 20 f4 12 6e 17 a3 2d 3f 68 44 40 79 93 96 1a e7 79 c0 03 62 fa 72 0c 57 73 38 12 ef 53 93 10 5a ee 4e 8f c4 87 6f ea 44 af ef d9 45 c5 f4 88 46 7a e4 07 b3 7f 49 fa c9 b5 64 59 3c 5d 70 d5 b8 7f 1e eb 02 2d b0 39 71 05 10 48 53 8d a7 9a a9 24 d3 07 03 83 af ed 65 a7 e9 9b f8 7d 20 a2 2a 9a 41 cc 71 5f d3 06 56 5e 5d 53 82 f0 65 2e a4 1b 99 31 ad 55 51 21 c6 09 a2 df e4 35 bd cb 45 fa 0f 97 ba e6 4a c9 02 03 01 20 01 28 dd 22 12 80 02 3b f2 23 23 de 55 5e 20 f7 aa 6e de f6 ac 07 e4 3e f9 56 e8 72 16 38 4e e5 2d e9 02 07 e5 0d a4 96 55 b1 14 aa ac 26 5e ad 8e 71 98 1b e8 be b7 0f 4e 51 9a 7b 71 e7 f0 02 dc a0 e7 23 12 82 a8 40 9d c3 ad c6 c2 63 c0 b8 ca 45 4a d8 4f 53 8a 98 1e e3 c8 39 c5 22 5f 5b dc 32 8e df f7 41 a6 12 f7 50 d4 54 17 1d 66 4b eb b1 b7 47 0f 63 7e 97 c7 e9 0a 25 4c 34 5a 65 82 c3 e9 f7 ad e0 4a f5 23 0a c8 f5 05 ba 52 37 37 cb 5c 60 3e ab b0 5c ca 1e 5e a9 af 0e 6c eb f5 39 48 f6 6b 98 69 89 dc 5b 70 15 1a b2 8a 70 83 40 d0 ee 82 62 88 cb 8a 7f 87 12 06 5e 30 13 e6 97 a1 43 a1 98 ee d2 0e 1e ad 57 fd 7c 63 5c f3 e8 06 22 b6 99 7b 23 cd 7c 9d 77 ae 3b a3 09 c1 98 f8 f6 d4 7d 03 75 d6 87 f9 14 4a e8 02 7f 08 8d d6 34 76 f6 ba 71 ea e0 bb 85 e7 16 8c b1 3a 9e d9 4f b3 07 de 1a b4 05 0a ae 02 08 01 12 10 17 dc bc 27 d1 13 41 d4 97 13 54 42 a1 88 da a6 18 8f 89 80 91 05 22 8e 02 30 82 01 0a 02 82 01 01 20 d2 1a dd 75 49 d2 74 8b 34 94 52 6a 9c 3f b8 6c 79 37 6b be 8c 88 56 f6 01 b8 d1 04 61 f7 7a cc 73 31 b1 0d eb f3 65 12 20 56 cd b5 66 2d 25 90 7b 74 f1 23 82 f0 f4 a0 ca 47 5e ea 95 62 81 5c 62 28 f6 f6 98 ad a2 78 79 d8 89 0f 2a 2d 96 a7 46 dd ef 53 16 30 1c 20 35 19 c2 a2 25 03 54 67 41 69 fd da 41 ce 14 d3 c5 2b ea 7a 38 45 15 01 2d 59 52 b3 8a a1 9e 15 e8 56 3c c7 aa a8 1c 21 22 88 0a a3 70 a6 4f ea 23 c5 3f b8 3a c3 db 57 53 21 47 30 a3 49 e0 7f 64 bf 32 be 7e ad 30 d0 26 12 af 11 0b b4 4f b0 8e 1d 30 81 73 b3 27 ef 64 d4 0c 41 63 95 42 b2 d1 a7 3c 98 a6 60 7e c6 c6 83 b5 13 a5 84 70 51 41 06 ef 87 ae 1e 7b 9c 69 5b 93 a1 04 df 74 37 bf c4 16 77 89 74 8a 43 ed 8f 2c 1f a7 10 79 3c 68 88 85 ea e7 32 a8 bf df 5b 42 3b 23 d7 5b 88 fc 0a dc 8f bd b5 02 03 01 20 01 28 dd 22 12 80 03 72 d2 fb 88 09 8b a3 b8 5b 6b 43 54 e0 37 67 db e2 d7 72 46 63 fb 0a 62 ab f7 70 4e a9 10 e0 1f 22 13 49 ee 16 d0 15 2c 76 93 84 05 0c e7 85 66 8c 06 cc fd 3d 78 9a f3 eb 69 ff 16 36 15 cd 60 91 69 fd be 2e 15 a0 29 d3 4a d2 60 56 25 bc 81 84 4c 9d 1e 2c e0 51 90 39 f3 79 9a da ef 86 64 1e 20 b0 33 dc 16 df 2e 5b 9a 1a 2a 41 7b 8b b3 b7 a4 d9 ad 1a 99 36 74 48 58 7d a1 3d de 05 a3 ed 9d 62 fa 42 07 89 73 b4 aa 40 26 3d 7b fa 23 f1 07 2e 94 cd f3 23 fa 45 f7 84 08 82 3e 55 c4 f4 c5 c7 23 81 9c f4 4c e6 d9 8e 50 c0 4e c2 4d 93 b1 aa b8 87 7b 91 08 b9 ca 39 13 08 e1 a3 64 5e bb 0e 7c ac bb 40 b5 45 15 60 ed 79 94 21 87 3b fb 5a bb 91 7f a6 0d b9 c7 7c b8 60 6a f7 e3 14 26 26 f5 ea 40 e5 cb 8a a0 89 d8 e7 d6 a9 36 19 35 c4 26 a4 45 0e a8 bc 2e 57 29 0d 3b f0 a0 96 29 91 d2 a9 1b 75 2f c8 0c 3e 7e 4e 55 03 3d 71 c9 4b 32 53 07 a6 88 15 f0 26 44 8f 56 a2 74 1c eb ef c1 8e 8c 14 2f 5f 62 bf aa 67 a2 91 51 7d de 98 2d 8c d5 a9 df 6e 3d 3a 99 b8 06 f6 d6 09 91 35 8c 5b e7 71 17 d4 f3 16 8f 33 48 e9 a0 48 53 9f 89 2f 4d 78 31 52 c7 a8 09 52 24 aa 56 b7 8c 5c f7 bd 1a b1 b1 79 c0 c0 d1 1e 3c 3b ac 84 c1 41 a0 01 91 32 1e 3a cc 17 24 2e 68 3c 1a 13 0a 0c 63 6f 6d 70 61 6e 79 5f 6e 61 6d 65 12 03 48 54 43 1a 18 0a 0a 6d 6f 64 65 6c 5f 6e 61 6d 65 12 0a 48 54 43 20 4f 6e 65 5f 4d 38 1a 0a 11 61 72 63 68 69 74 65 63 74 75 72 65 5f 6e 61 6d 65 12 0b 61 72 6d 65 61 62 69 2d 76 37 61 1a 15 0a 0b 64 65 76 69 63 65 5f 6e 61 6d 65 12 06 68 74 63 5f 6d 38 1a 19 0a 0c 70 72 6f 64 75 63 74 5f 6e 61 6d 65 12 09 6d 38 5f 67 6f 6f 67 6c 65 1a 4a 0a 0a 62 75 69 6c 64 5f 69 6e 66 6f 12 3c 68 74 63 2f 6d 38 5f 67 6f 6f 67 6c 65 2f 68 74 63 5f 6d 38 3a 36 2e 30 2f 4d 52 41 35 38 4b 2e 48 31 35 2f 36 36 36 36 37 36 3a 75 73 65 72 2f 72 65 6c 65 61 73 65 2d 6b 65 79 73 1a 2d 0a 09 64 65 76 69 63 65 5f 69 64 12 20 71 4d 4f 71 78 75 4a 55 70 7a 43 73 6a 50 6a 49 4d 59 5a 4a 49 62 6a 52 4a 6a 6c 5a 6a 48 78 20 1a 26 0a 14 77 69 64 65 76 69 6e 65 5f 63 64 6d 5f 76 65 72 73 69 6f 6e 12 0e 76 33 2e 30 2e 30 2d 61 6e 64 72 6f 69 64 32 08 10 01 20 28 0a 30 20 12 5a 0a 58 0a 32 08 01 12 10 d4 35 b3 b2 be 2e 41 e3 a1 69 99 94 ac f2 a8 ec 1a 0a 62 72 69 67 68 74 63 6f 76 65 22 10 d4 35 b3 b2 be 2e 41 e3 a1 69 99 94 ac f2 a8 ec 10 01 1a 20 38 30 44 46 35 43 46 32 46 32 30 35 37 45 35 43 42 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 18 01 20 8c be fe c1 05 30 15 38 df 88 f4 e9 02 1a 80 02 64 c5 6d cb 1f e1 c4 63 c7 46 3a 2d ca fc d1 ec 34 03 52 c0 5c 05 2f 88 0f ed 44 a1 0f b7 b6 cc b4 30 62 37 80 2c ec fe 83 83 9d 64 1b ba b1 bd 92 37 b8 02 18 42 bf 82 9b c3 49 3c 02 e9 1e 44 d8 f7 4c f2 71 28 86 ef 75 59 79 6d c3 17 a8 4c 14 46 44 8b ce 21 91 48 e6 8a 51 45 d9 fa 50 6f d9 6c ea 58 25 e5 2f 2d 01 b9 96 8c 25 b1 06 e7 bb 41 7f c1 76 13 41 62 66 18 96 98 7d 32 56 16 a9 d0 5e a3 f5 44 1c e8 5e 26 f5 a9 f6 e0 dd de c3 7b bf f1 9f e7 ab 37 ac dc 0f ef 3a ee 6a b9 03 fe 6a 5b 03 d0 4e d3 74 d8 eb 4b d0 a6 70 e3 ea 7e d7 01 13 4c d9 10 36 82 4f b3 d8 1e 14 e4 4a 9b 98 21 18 25 0f b5 fd bd 8e d4 60 6d bd 5e 8e be 08 96 55 fe f9 1d 78 af 06 88 05 72 c3 e2 47 87 58 4f fc f8 66 b4 b8 35 b0 86 38 64 41 eb 45 1c 5f 24 1e 80 13 f2 70 26 c9 9c e1 f8 8e eb  

If you have any ideas or suggestions for how I could help solve this please let me know.

Thanks

HTTP headers not added to HLS segments

using the standard kodi playlist.m3u8|Header=foo format, the HTTP headers are added to the m3u8 download but segmets have media.ts|Connection=keep-alive&acceptencoding=gzip&seekable=0

[Bug] License related custom (non-standard) headers ignored by kodi

Hello,

I am currently trying to reproduce using the Kodi, inpustream.adaptive, widevine lib and a file.strm the following video:

-Big Buck Bunny (3rd video - mpd format) from the page https://demo.castlabs.com

This video is a demo of a DRM company so I think we can use it here.

Using Burp Proxy I checked that it use a base64 encoded header with some parameters.
Probably that's the reason that the license aquisition is failing in kodi.log (with an http error status code)

Is this video (that needs that parameters) compatible with the currently version of inputstream.adaptive? If yes, can you show me an exemple of a .strm file for this video?

Best regards,
libqtc

Loading of decrypter in Krypton branch is broken

I think this commit breaks loading of decrypter for Krypton, as the special path translates to /usr/lib/kodi/addons/inputstream.adaptive which doesn't exist, if the addon isn't built in with Kodi (as it is the case in e.g. LibreELEC 8.x). That results in the method returning here and therefore not searching in the second entry of searchPaths.

The resolution might be to change that return to a continue.

OpenDemuxStream - Error creating demuxer for .strm files

Hi there,

I've tried creating and playing back a .strm file according to the readme here, but I struggle to make it work. Tried with 2 different mpd Manifests, both didn't work. I'm pretty sure inputstream.adaptive works correctly otherwise, I can, for example, play back netflix content via the netflix addon.

I can make one of the Manifests work with latest VLC nightly, so I know at least the one in the readme provided here should work.

Debug log: https://pastebin.com/dg1JPWYt
strm File: https://pastebin.com/s3KjMRgL

I'm running:
Kodi 18.0-ALPHA1 Git:20170731
inputstream.adaptive 2.0.5

Any idea where things go wrong for me?

Latest changes causes build error here

Hello,
I just get the following compile error with the latest changes
Regards
Helmut

[ 99%] Building CXX object CMakeFiles/inputstream.adaptive.dir/src/TSReader.cpp.o
/usr/bin/x86_64-pc-linux-gnu-g++  -DADDON_GLOBAL_VERSION_FILESYSTEM_USED -DADDON_GLOBAL_VERSION_GENERAL_USED -DADDON_GLOBAL_VERSION_MAIN_USED -DADDON_INSTANCE_VERSION_INPUTSTREAM_USED -DADDON_INSTANCE_VERSION_VIDEOCODEC_USED -DBUILD_KODI_ADDON -DUNICODE -D_UNICODE -D__STDC_FORMAT_MACROS -Dinputstream_adaptive_EXPORTS -I/usr/include/kodi -I/usr/include/p8-platform -I/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/lib/libbento4/Core   -DNDEBUG -mtune=generic -O3 -msse -msse2 -msse3 -pipe -std=c++11 -fPIC   -D_LINUX -DTARGET_POSIX -DTARGET_LINUX -DHAVE_SSE=1 -DHAVE_SSE2=1 -DHAVE_SSE3=1 -DHAVE_SSSE3=1 -DHAVE_SSE4_1=1 -o CMakeFiles/inputstream.adaptive.dir/src/TSReader.cpp.o -c /tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/TSReader.cpp
/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/TSReader.cpp: In member function ‘void TSReader::Reset(bool)’:
/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/TSReader.cpp:48:18: error: invalid initialization of non-const reference of type ‘AP4_Position& {aka long long unsigned int&}’ from an rvalue of type ‘AP4_Position {aka long long unsigned int}’
   m_stream->Tell(m_startPos);
                  ^
In file included from /tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/src/TSReader.cpp:20:0:
/tmp/portage/media-plugins/kodi-inputstream-adaptive-9999/work/kodi-inputstream-adaptive-9999/lib/libbento4/Core/Ap4ByteStream.h:86:24: note:   initializing argument 1 of ‘virtual AP4_Result AP4_ByteStream::Tell(AP4_Position&)’
     virtual AP4_Result Tell(AP4_Position& position) = 0;
                        ^
make[2]: *** [CMakeFiles/inputstream.adaptive.dir/build.make:279: CMakeFiles/inputstream.adaptive.dir/src/TSReader.cpp.o] Error 1

Buffering issues - is there a way to buffer ahead multiple segments?

I'm having an issue with a VOD provider in Australia that has very inconsistent download speeds/response times. It's being delivered through akamai cdn. Other providers that have higher bitrates have no issues. The android app for this service has no problems either, as it seems to fetch around 50 segments or so at a time so any sort of intermittent speed drop doesn't affect playback, whereas in Kodi it almost seems to have a buffer of 1 segment, and some of the 400kb segments can take up to 2000ms to download causing loss of continuous playback.

Is there a way to implement a segment buffer, whether it be manually or dynamically sized, in inputstream.adaptive? Or is this the responsibility of the inputstream interface itself?

I'm on a 60Mbps connection, I'm certain that it's not the issue.

[Feature Request] Pass mpd URL custom headers to actual video files?

I have a .strm file like this:

#KODIPROP:inputstreamaddon=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
#KODIPROP:inputstream.adaptive.license_key=https://wvlic.brightcove.com/proxy/5375730767001|Content-Type=application%2Fx-www-form-urlencoded&X-Forwarded-For=202.89.4.222|A{SSM}|
http://dashtvnz-a.akamaihd.net/963482467001/963482467001_5375755467001_5375730767001.mpd?pubId=963482467001&videoId=5375730767001|X-Forwarded-For=202.89.4.222

For a GEO blocked service.

Here's the log:
https://pastebin.com/raw/T8jsHLXV

You can see it get's the license all OK etc.
However, it fails to open http://dashtvnz-a.akamaihd.net/963482467001/5375755266001/video/1/init.mp4

This will be due to CURL not setting the X-Forwarded-For (it only sets keep alive)

Would it be possible to update the code to pass on any custom stream headers to the actual video files?

I guess somewhere around here it would happen:
https://github.com/peak3d/inputstream.adaptive/blob/master/src/main.cpp#L217

Not processing Cookies

I'm trying to diagnose an issue involving akamai's streams that have hdnea auth codes. For privacy/security reasons I can't provide the actual URLs, but hopefully you have an idea of what I'm talking about since Akamai's token authentication is in common use.

One provider has akamai HLS urls with an auth code:

https://blablabla-i.akamaihd.net/hls/live/xxxxx/name1/name2/index.m3u8?hdnea=randomauthcode

In the response header when you fetch that index.m3u8 file there are also a bunch of Set-Cookie values that Akamai expects to continue to be sent with the requests for each variant playlist and the .ts segments within those playlists.

Set-Cookie: hdntl=randomvalue1; path=/; domain=blablabla-i.akamaihd.net;
Set-Cookie: removed_hdnts=randomvalue2; path=/; domain=blablabla-i.akamaihd.net;
Set-Cookie: _alid_=randomvalue3; path=/hls/live/xxxxxx/name1/name2/; domain=blablabla-i.akamaihd.net

FFmpeg processes these set-cookie values and passes them along when it fetches those individual bitrate variations and ts segments. But it looks like inputstream.adaptive doesn't, so it just results in 403 errors when it attempts to fetch the variant playlists within the index.m3u8 file:

ERROR: CCurlFile::FillBuffer - Failed: HTTP returned error 403
ERROR: CCurlFile::Open failed with code 403 for https://blablabla-i.akamaihd.net/hls/live/xxxxx/name1/name2/master4.m3u8|acceptencoding=gzip&seekable=0

Yes, I could just use the default ffmpeg system, but the problem is there's no way to specify max bitrates or resolutionjs, which creates problems with slower connections and it tries to use a bitrate or resolution greather than their connection or device can support, or ends up timing out when there's a lot of variant bitates in the playlist and ffmpeg processes all of them before it starts playback.

Force 30 fps instead of 60 (youtube)

With Kodi 17 and current youtube plugin it's finally possible to go 1080p and higher, plus 60 fps. While it's great, older hardware, like nVidia ION (still being used) doesn't handle 60 fps h264 videos nicely with vdpau enabled. It would be great to have an option to limit playback or force 30 fps stream for such case. I already tried couple min and max bandwidth settings but it either pushes 720p/60 or 1080p/60, plus, there's no 30 fps stream to select if i switch "stream selection" to manual. Still Chrome with h264ify is able to play the same video with 30 fps if such limit is enabled.

2.1.0 friert Player ein

Kodi Nightly x64 auf Windows kein Problem. Mit der Version von gestern allerdings, mit Adaptive 2.1.0, friert der Player erst ein, wenn man mehrmals hintereinander seekt, GUI läuft aber noch (Uhrzeit verändert sich etc), drückt man auf Stopp, friert die GUI auch ein und kodi hängt sich komplett auf. Zu 100% reproduzierbar. Getestet mit pvr.zattoo.

Wäre auch gut, würde sich das Manifest, wie im Webplayer, alle 8 Sekunden oder überhaupt aktualisieren, weil man sonst zb keine Werbung überspringen kann, wenn man eine Sendung guckt, die gerade läuft.

Settings doesn't honor 1080p setting

Running Kodi 17.4 and inputstream.adaptive git on a Raspberry Pi Zero W.

In the inputstream.adaptive settings I have the max resolution set as 1080p (as that is the max it can hardware decode). When I have 1080p in settings and play a YouTube video with a 1080p@60 option, it plays the 720p@60 stream. The only way I can play the 1080p@60 is setting the max resolution to "Max" in settings.

Releases for Krypton

I am packaging this for Arch Linux but I am a little lost since the 2.x releases to what releases are compatible with Krypton.

I have seen you have made backport in the Krypton branch for 2.0.{6..8} but I do not see the corresponding release archive on the release page.

Loud cracking noise then no sound when seeking DASH

Deadlock seems to be fixed but now when seeking there often is a very loud cracking noise and then there is no more audio at all even when seeking again. You have to completely restart the stream but then it's very common to happen again.

Tested with pvr.zattoo using Inputstream 2.1.2. Had to downgrade to pre 2.1 because no problems there at all.

Unsupported stream hls

Hi, when I use inpustream addon to open some url, I get "OpenStream - Unsupported stream 1. Stream disabled".
I can open those url when I send it directly to kodi but it take severals seconds to launch while with inpustream addon it is a lot faster.
So I tried to found out where is the issue but hasn't made much progress.

The streams are protected so there is no easy way to share it.
You can find the donwloaded stream with the key below.

If you need me to make other tests, make me know.

stream.zip

It's possible to add a manual size for cache ??

The inputstream.adaptive on kodi-17.x it's been used for example for youtube video.
The currently video addons 5.3.10 whitout inpustream activated have a your personal size for cache setted by default at 20MB.......

Apparently this value it's not been used when kodi use, now, the inputstream.adaptive....... it's possible to add somethigs similar ?? I thinks this it's be usefull for example for live stream to create a little buffer before to start the reproduction and this helped expecilly who does not have a super fast connection...

1080p video not recognized (played at 720p)

Hi peak3d,

I Am actually using the new version of YouTube add-on (5.3.6) that works with MPEG-DASH thanks to your inputstream.adaptive. I have already posted the following issue in the YouTube add-on thread and the author suggested me to contact you since it seems the issue is related to inputstream. Hope you can give at least a look to it (I didn't find any thread on the Kodi forum, that is why I'm writing here).

The point is simple: even if on YouTube the interested video is available in 1080p resolution, Kodi plays it at 720p. So I'm wondering where I'm making a mistake. These are the relevant settings I'm using:

YouTube addo-on
Video Quality -> 720p (this one does not have any impact; is an old parameter that is not used in case of MPEG-DASH)
Always ask for the video quality -> Disabled
Use MPEG-DASH -> Enabled

InputStream Adaptive
Min. Bandwidth -> 11000000
Max. Bandwidth -> 20000000
Max. Resolution -> 1080p
Stream Selection -> Manual (I have tried also "Auto")
Media -> All

The "guilty" video is this one and under Firefox it plays without any issue at 1080p resolution.

In order to help, you can find the log at this link. Please let me know if you need further information.

A more generic question: is there any way to "force" the use of 1080p instead of having the adaptive approach calculation based on the minimum bandwidth (4 Mbit/s as default; 11 Mbit/s in my case)? It would be like in YouTube, where you can choice manually the format.

Thanks for your attention and big effort.

Wvdecrypter "make" error

Im on a Ubuntu machine and, as per instructions to build the "wvdecrypter" im stuck at make by getting the following error:
Thank you
Error message received
........
[ 14%] Building CXX object libbento4/CMakeFiles/bento4.dir/Core/Ap4OddaAtom.cpp.o
[ 15%] Building CXX object libbento4/CMakeFiles/bento4.dir/Core/Ap4PdinAtom.cpp.o
[ 15%] Building CXX object libbento4/CMakeFiles/bento4.dir/Core/Ap4.cpp.o
In file included from /home/kodi/Downloads/inputstream.adaptive-master/lib/libbento4/Core/Ap4Piff.h:43:0,
from /home/kodi/Downloads/inputstream.adaptive-master/lib/libbento4/Core/Ap4.h:300,
from /home/kodi/Downloads/inputstream.adaptive-master/lib/libbento4/Core/Ap4.cpp:32:
/home/kodi/Downloads/inputstream.adaptive-master/lib/libbento4/Core/Ap4CommonEncryption.h: In member function âvirtual const char* AP4_CencSingleSampleDecrypter::GetSessionId()â:
/home/kodi/Downloads/inputstream.adaptive-master/lib/libbento4/Core/Ap4CommonEncryption.h:525:49: error: ânullptrâ was not declared in this scope
virtual const char* GetSessionId() { return nullptr; };
^
make[2]: *** [libbento4/CMakeFiles/bento4.dir/Core/Ap4.cpp.o] Error 1
make[1]: *** [libbento4/CMakeFiles/bento4.dir/all] Error 2
make: *** [all] Error 2

Bug in choosing correct stream resolution with "auto" select option

Hi,

I am using the Milhouse builds for Rpi3 and this bug has occured with 703, 707 an 711 (didnt test anything further). I did select the following settings in inpustream adaptive:

Min Bandwith: 0
Max Bandwith: 0
Max Resolution general decoder: Max
Max Resolution secure decoder: 720p (due to RPi3 limitations)
Selection: Auto

With this I started different streams: for TV Series it works pretty great with netflix, skygo and amazon, however movies do have different aspect ratios and I get problems with the selections.

When I try to stream "Pitch Perfect 2" from Amazon (VOD) using Secure Decoding max 720p i get:
"Auto": 920x520
"Manuel":I get 1920x1040 (which is too much for the Rpi3) - but I can change it to 1280x688 and that works great!

I guess that inputstreams looks for 1280x720 but is only finding 1280x688 and therefore skipps to 920x520, because for tv series (basically every new series since 200x) with 1280x720 everything works great! How can I help further to debug this?

I twould be great to get the 1280x688 with the Auto Option!

Log from Kodi:
https://pastebin.com/PNY4wtBB

Maybe this is connected to this one? title sounds similar, but description does not...
#9

DASH Subtitles Supported?

While looking into BBC DASH streams, I also tried out a test stream they publish here
Elephants Dream. The first MPD includes a video, audio, and text stream, but I noticed Kodi 17b6 doesn't seem to find the subtitle stream. Is this something that is or will be supported in the Kodi DASH implementation?

Update to Kodi 18 but sill have the 1.0.6 installed

Hi there, Noob here :)
I have updated my Kodi to the night build but the inputstream.adaptive is still version 1.0.6 (i guess from my old 17.3 version). I was expecting to be packaged with Kodi 18 update.
Can someone point me to a zip version of the latest inputstream.adaptive to install from zip? Cant figure out how to package this myself.

smoothstreaming audio retrieval failed after 6 secondes

Hi

For some channels audio stop working after some secondes while video still keep working.
I think it will be better to ask now before I dig on the source code to try to find out why, that I know will take me some days.

In the archives below you will find the kodi.log and the manifest file parsed by kodi.
Search for "code 404" to get right away the error or either "vf=" or "vo=" to get the audios fragments downloaded by curl.

1st log with only one audio stream
logs_vf.zip

2nd log with 2 audio streams, vf stream select by default. This audio stream doesn't failed.
After some time a switch to vo stream and it failed.

logs_vf_vo.zip

3rd log with 2 audio streams, vo stream select by default. The audio stream failed after some secondes.
Switch to vf works but video stream "pause" while audio stream tried to catch the time difference.

logs_vo_vf.zip

Where is timeshifting is implemented? inputstream addon side or my client side? Because for some channels I have 8 hours of timeshift but kodi don't allow me to pause neither to go back in time.

I am use the agile branch for kodi and for inputstream.adaptive cause only with this one ffmepg can't decrypt the streams.
Thanks

Edit1:
After quick 1st log review, it seems that the timestamp request is wrong. if duration have some patterns, it should be 1211745612061910 instead of 1211745592221914. For what I have seen with exoplayer, they redownload the manifest and update corresponding variables.
I start to implement this but it seems it will need more works than just redownload the manifest and update some variables. I have to understand what going on and It will surely take me some time.
So if you can't implement it or point me the rigth way to do it, it will be wonderful.

Edit2:
Updating durations with refreshing manifest seems the best way to do it but I will maybe need to modified more codes than I would like to. So I have a function that find the durations pattern and append it to segment_durations
in AdaptiveTree::SetFragmentDuration(). The timestamp request sequence seems right but I get an CVideoPlayerAudio - CDVDMsg::GENERAL_EOF this time.You will find the logs and the function in this archive
logs_edit_pattern.zip
_

inputstream.adaptive on Odroid C2

Hi.
I'm running Kodi 17 beta 5 (LibreELEC) on Odroid C2 (ARM aarch64).
I would like to install the "inputstream.adaptive" addon to enjoy the YouTube addon with MPEG-DASH but it seem that this addon is not available....

Is it normal that "inputstream.adaptive" add-on is not available for Odroid C2?

Thanks.

missing cstring include

Linux cross build for ARM, gcc 7.1.x

src/inputstream.adaptive/src/parser/HLSTree.cpp: In member function ‘virtual bool adaptive::HLSTree::prepareRepresentation(adaptive::AdaptiveTree::Representation*)’:
src/inputstream.adaptive/src/parser/HLSTree.cpp:264:17: error: ‘strcmp’ was not declared in this scope
             if (strcmp(line.c_str() + ext, ".ts") == 0)
                 ^~~~~~

Trivial fix, not worth a PR:

diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp
index f2d87bc..59c4462 100644
--- a/src/parser/HLSTree.cpp
+++ b/src/parser/HLSTree.cpp
@@ -18,6 +18,7 @@
 
 #include "HLSTree.h"
 #include <map>
+#include <cstring>
 
 using namespace adaptive;
 

Could not open / parse mpdURL

My Internet Service Provider (ISP) provides an API to access the webtv streams (WebTV API docs). I'm writing a small plugin for Kodi to be able to watch these streams, using inputstream.adaptive.

My ISP provides one public channel (which plays without issues) and a number of channels which are only available for its clients (IP based, so for people which are not clients, these streams will not be accessible). These streams are DASH with Widevine (I do have libwidevinecdm.so installed in the .kodi/cdm folder). From the API I get a stream URL and a Licence URL, which I both pass to inputstream.adaptive.

The plugin I'm creating can be found here (note again that the protected streams are only visible for clients of my ISP which actually have a subscription for TV): Kodi XS4All WebTV plugin

When I try to play one of these streams protected with widevine, I see that an .mpd file is downloaded from the provided stream URL. After this download is finished, inputstream.adaptive reports the ERROR: "Could not open / parse mpdURL", see the Kodi.log file below.

I've analized the network traffic (using TCPdump / wireshark) and I saw that requests are made to the stream URL (I see http HEAD and http GET requests, both with status 200 (OK)). After these requests, no communication takes place anymore (I expected to see requests to "Historywv-$RepresentationID$.dash" and next to "Historywv-$RepresentationID$-$Number$.m4s", but that doesn't happen).

I'm using Kodi 17.1 RC1 (compiled with --enable-debug) on a Raspberry Pi2 (OS: Raspbian) with inputstream.adaptive 1.0.7.

The Kodi log can be found here: Kodi.log
The .mpd file which is downloaded from the specified stream URL (from the stream which corresponds with the above Kodi log file) can be found here: manifest.mpd

To verify that the streams from my ISP are OK, I created a small PHP web site, using the same webtv-api from my ISP, using Bitmovin HTML5 Player to play the streams. With this player, the streams play correct.
For anyone interested, the .PHP file can be found here: Click here

If you need any additional info, please let me know. I hope you can help.

Max Resolution Not Being Reached

When setting stream selection to manual, I can stream the url below at the highest setting (720 @ 60fs) without a hitch. However when I leave it on auto it doesn't go past the 640x360 stream? I've tried a couple different settings but nothing seems to allow the adaptive stream move up in stream quality.

  • Kodi 18 Win x64 compiled Aug 9th 2017
  • inputstream.adaptive 2.0.7

http://md-akc.med.nhl.com/hls/nhl/2017/01/07/7f10fce3-9fea-4b14-8e62-65e4f4082991/1483823984448/master_tablet60.m3u8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.