Jump to content


Photo

serviceapp - gstplayer and exteplayer3

gstreamer ffmpeg

  • Please log in to reply
985 replies to this topic

Re: serviceapp - gstplayer and exteplayer3 #241 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 3 October 2016 - 09:10

@mx3L

 

The question is if we can query libavformat which rtmp implementation it use? 



Re: serviceapp - gstplayer and exteplayer3 #242 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 3 October 2016 - 12:02

@mx3L

 

The best option will be to have both implementations native and librtmp with possibility to switch.

But probably we will needed patch ffmpeg.



Re: serviceapp - gstplayer and exteplayer3 #243 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 3 October 2016 - 12:14

@samsamsam

I was looking into ffmpeg sources, and we don't need to know which implementation is used.

 

we can set rtmp options the same way via AVDict, if you look at the bottom of rtmproto.c and librtmp.c:

rtmproto:

static const AVOption rtmp_options[] = {
    {"rtmp_app", "Name of application to connect to on the RTMP server", OFFSET(app), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_buffer", "Set buffer time in milliseconds. The default is 3000.", OFFSET(client_buffer_time), AV_OPT_TYPE_INT, {.i64 = 3000}, 0, INT_MAX, DEC|ENC},
    {"rtmp_conn", "Append arbitrary AMF data to the Connect message", OFFSET(conn), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_flashver", "Version of the Flash plugin used to run the SWF player.", OFFSET(flashver), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_flush_interval", "Number of packets flushed in the same request (RTMPT only).", OFFSET(flush_interval), AV_OPT_TYPE_INT, {.i64 = 10}, 0, INT_MAX, ENC},
    {"rtmp_live", "Specify that the media is a live stream.", OFFSET(live), AV_OPT_TYPE_INT, {.i64 = -2}, INT_MIN, INT_MAX, DEC, "rtmp_live"},
    {"any", "both", 0, AV_OPT_TYPE_CONST, {.i64 = -2}, 0, 0, DEC, "rtmp_live"},
    {"live", "live stream", 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, DEC, "rtmp_live"},
    {"recorded", "recorded stream", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, DEC, "rtmp_live"},
    {"rtmp_pageurl", "URL of the web page in which the media was embedded. By default no value will be sent.", OFFSET(pageurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_playpath", "Stream identifier to play or to publish", OFFSET(playpath), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_subscribe", "Name of live stream to subscribe to. Defaults to rtmp_playpath.", OFFSET(subscribe), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_swfhash", "SHA256 hash of the decompressed SWF file (32 bytes).", OFFSET(swfhash), AV_OPT_TYPE_BINARY, .flags = DEC},
    {"rtmp_swfsize", "Size of the decompressed SWF file, required for SWFVerification.", OFFSET(swfsize), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC},
    {"rtmp_swfurl", "URL of the SWF player. By default no value will be sent", OFFSET(swfurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_swfverify", "URL to player swf file, compute hash/size automatically.", OFFSET(swfverify), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_tcurl", "URL of the target stream. Defaults to proto://host[:port]/app.", OFFSET(tcurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_listen", "Listen for incoming rtmp connections", OFFSET(listen), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtmp_listen" },
    {"listen",      "Listen for incoming rtmp connections", OFFSET(listen), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtmp_listen" },
    {"timeout", "Maximum timeout (in seconds) to wait for incoming connections. -1 is infinite. Implies -rtmp_listen 1",  OFFSET(listen_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC, "rtmp_listen" },
    { NULL },
};

librtmp:

static const AVOption options[] = {
    {"rtmp_app", "Name of application to connect to on the RTMP server", OFFSET(app), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_buffer", "Set buffer time in milliseconds. The default is 3000.", OFFSET(client_buffer_time), AV_OPT_TYPE_STRING, {.str = "3000"}, 0, 0, DEC|ENC},
    {"rtmp_conn", "Append arbitrary AMF data to the Connect message", OFFSET(conn), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_flashver", "Version of the Flash plugin used to run the SWF player.", OFFSET(flashver), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_live", "Specify that the media is a live stream.", OFFSET(live), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtmp_live"},
    {"any", "both", 0, AV_OPT_TYPE_CONST, {.i64 = -2}, 0, 0, DEC, "rtmp_live"},
    {"live", "live stream", 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, DEC, "rtmp_live"},
    {"recorded", "recorded stream", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, DEC, "rtmp_live"},
    {"rtmp_pageurl", "URL of the web page in which the media was embedded. By default no value will be sent.", OFFSET(pageurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_playpath", "Stream identifier to play or to publish", OFFSET(playpath), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_subscribe", "Name of live stream to subscribe to. Defaults to rtmp_playpath.", OFFSET(subscribe), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_swfurl", "URL of the SWF player. By default no value will be sent", OFFSET(swfurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
    {"rtmp_swfverify", "URL to player swf file, compute hash/size automatically. (unimplemented)", OFFSET(swfverify), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},
    {"rtmp_tcurl", "URL of the target stream. Defaults to proto://host[:port]/app.", OFFSET(tcurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
#if CONFIG_NETWORK
    {"rtmp_buffer_size", "set buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, DEC|ENC },

Once parsed we just have to strip these options from url and let unknown options like token in url.


Edited by mx3L, 3 October 2016 - 12:15.


Re: serviceapp - gstplayer and exteplayer3 #244 nml

  • Senior Member
  • 30 posts

+1
Neutral

Posted 3 October 2016 - 17:41

@mx3L,

 

First time I have had a chance to test but Mp3 playback now working fine.



Re: serviceapp - gstplayer and exteplayer3 #245 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 3 October 2016 - 18:35

@mx3L

 

It seems that there is possibile to compile both protocol NATIVE and LIBRTMP in ffmpeg libs:

https://patches.libav.org/patch/16672/

 

The question is how to select it before playback.

 

Solution with AVDICT have one disadvantage, what about when you want to use option only available with librtmp, because without this option stream will not play?

 

Regards,

SSS



Re: serviceapp - gstplayer and exteplayer3 #246 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 3 October 2016 - 19:24

@nml

Thanks for the info

 

@samsamsam

If you look at the librtmp.c source you can see that it constructs filename string according AVDICT options, ie. you have "rtmp_playpath" it will add to filename " playpath=someplaypath", that's why you can currently use these parameters without any change in exteplayer3(when you use librtmp), since we already provide these options in filename.

 

So only available options to librtmp can be left in filename, others will be appended from AVDICT. Problem is that if there is native protocol, it will only trim these additional parameters for librtmp when it finds path part of url in rtmpurl. It's messy, It would be better if we somehow know which implementation do we use.

 

Edit:

If we can compile both than even better, as you say just find out how to select between them


Edited by mx3L, 3 October 2016 - 19:26.


Re: serviceapp - gstplayer and exteplayer3 #247 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 3 October 2016 - 20:14

@mx3L

Somethink like that should works:

AVOutputFormat *fmt = NULL;
AVOutputFormat *fmtRTMPTab[] = {NULL, NULL};
uint8_t nativeProtoIndex = -1;
uint8_t numOfRTMPImpl = 0;
 
char rtmpProtocol[] = "rtmp"; //rtmp or rtmpe or rtmps or rtmpt or rtmpte or rtmpts
while ((fmt = av_oformat_next(fmt))) 
{
    if (fmt->name && av_match_name("rtmp", fmt->name))
    {
        ++numOfRTMPImpl;
    }
    
    // rtmpts is only available in native implementation
    // rtmpts is listed after rtmp
    if (fmt->name && av_match_name("rtmpts", fmt->name))
    {
        nativeProtoIndex = numOfRTMPImpl-1;
    }
    
    if (fmt->name && av_match_name(rtmpProtocol, fmt->name))
    {
        if (fmtRTMPTab[0] != NULL)
        {
            fmtRTMPTab[0] = fmt;
        }
        else
        {
            fmtRTMPTab[1] = fmt;
        }
    }
}
 
// if 2 == numOfRTMPImpl -> both supported
// elif nativeProtoIndex > -1 -> only native
// else -> only libRTMP
 
// to start playback with chosen protocol implementation:
avformat_open_input(&avContextTab[AVIdx], filename, fmtRTMPTab[0], &avio_opts);

This method base on fact that rtmpts is only supported by NATIVE protocol.

We can also use information which one occurs first on the AVOutputFormat list.


Edited by samsamsam, 3 October 2016 - 20:18.


Re: serviceapp - gstplayer and exteplayer3 #248 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 3 October 2016 - 20:21

To compile with both implementations there is need to configure with --enable-librtmp  and after configure modify files:

config.mak, config.h to enable again native implementation.



Re: serviceapp - gstplayer and exteplayer3 #249 samsamsam

  • Senior Member
  • 2,024 posts

+146
Excellent

Posted 4 October 2016 - 08:15

As I wrote I did not test the code based on AVOutputFormat or rather AVInputFormat

but it will not work since protocol is not format.

 

Here is valid code (I checked it) to detect which impl of RTMP proto is used by ffmpeg:

//detect RTMP protocol impl 
uint8_t isNativeProto = 0;
void *opaque = NULL;
const char *protoName = NULL;
 
while (protoName = avio_enum_protocols(&opaque, 1))
{
    // rtmpts is only available in native implementation
    // rtmpts is listed after rtmp
    if (0 == strcmp("rtmpts", protoName))
    {
        isNativeProto = 1;
        break;
    }
}

 
To be able to have both implementattion and select one we need to made futher changes in ffmpeg for example modify name of native protocols for example to ffrtmp, ffrtmps...
and then for native use uri ffrmp://..... and for librtmp rtmp://... but this must be tested.
 
Regards,
SSS

Edited by samsamsam, 4 October 2016 - 08:15.


Re: serviceapp - gstplayer and exteplayer3 #250 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 4 October 2016 - 10:12

@samsamsam

very nice, also good idea with ffrtmp. Will you do this? 



Re: serviceapp - gstplayer and exteplayer3 #251 ian1095

  • Senior Member
  • 462 posts

+6
Neutral

Posted 4 October 2016 - 17:00

@mx3L

 

Brilliant work regarding fixing the Openssl handshake,Ive just tested your latest Serviceapp and I'm pleased to say the Variant issue is completely fixed and streams now play in 1080p from the SyfY addon as they should when using Exteplayer3

 

However

 

The Discovery Network addon now refuses to stream at all,it just opens then closes again,with the older Serviceapp before the latest fixes,it would stream in just 360p so maybe the handshake failing was hiding something else ?

 

Of course theres also the possibility that the addon is down,that would just be my luck lol, so I will test further over the next few days and also see if an update to the Discovery Network addon becomes available or not. Just to be sure I've attached the Kodi log so you can have a nosy at it,but I cannot see anything in it that would explain why its not streaming,but maybe you will.

 

Anyway,as I said Exteplayer3 is now streaming perfectly in 1080p using the Openssl handshake fixes, So Very well done indeed. I will test many more things over the coming days.but so far its looking good.

 

We now have a perfectly working viable alternative to Mediaplayer in Exteplayer3, but of course with the added bonus of it using ffmpeg so it uses far fewer box resources. I cannot see the need to ever switch from Exteplayer3 now for all my streaming needs.

 

Many thanks, your work really is appreciated.

 

Ian.

Attached Files


Edited by ian1095, 4 October 2016 - 17:02.


Re: serviceapp - gstplayer and exteplayer3 #252 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 4 October 2016 - 17:12

@ian1095

Thanks for feedback, log from enigma2(debug level 4) will tell me more.



Re: serviceapp - gstplayer and exteplayer3 #253 ian1095

  • Senior Member
  • 462 posts

+6
Neutral

Posted 4 October 2016 - 18:22

Enigma2 log Debug Level 4 when the Doscovery Network addon just opens then closes the stream without it playing.

 

There now seems to be a certificate error ?

<   131.173> [eDVBResourceManager] start release channel timer
<   131.174> [SKIN] Parsing embedded skin <embedded-in-'KodiLauncher'>
<   131.674> [ePopen] command: ps | grep kodi.bin | grep -v grep
<   131.674> [eConsoleAppContainer] Starting /bin/sh
<   131.696> [KodiLauncher] FBLock
<   131.696> [KodiLauncher] startup: kodi is not running, starting...
<   131.697> [ePopen] command: unset PYTHONPATH;kodi;kodiext -T
<   131.697> [eConsoleAppContainer] Starting /bin/sh
<   133.101> [DVBCAHandler] no more services
<   134.173> [eDVBResourceManager] release cached channel (timer timeout)
<   134.173> [eDVBLocalTimerHandler] remove channel 0x2f9f0e8
<   134.173> [eEPGCache] remove channel 0x2f9f0e8
<   134.174> [eDVBResourceManager] stop release channel timer
<   137.175> [eDVBFrontend] close frontend 0
<   207.639> KodiExtRequestHandler: recv()-> opcode = 1, status = 0, data = http
s://dscusvod-vh.akamaihd.net/i/longform/2016-09/28/155312.013.02.001-43368-,500k
,200k,350k,800k,1200k,1600k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1
475605223~acl=/*~hmac=3121e3043a9b2ac09d18313dd438a65427d0b120cdbba627234bb5e853
808b3a

<   207.641> [KodiLauncher] FBUnlock
<   207.641> [fb] double buffering available!
<   207.688> [KodiLauncher] RCUnlock
<   207.689> UDSServer: handlePlayMessage: playPath = https://dscusvod-vh.akamai
hd.net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,
1600k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475605223~acl=/*~hmac=
3121e3043a9b2ac09d18313dd438a65427d0b120cdbba627234bb5e853808b3a
<   207.695> [SKIN] Parsing embedded skin <embedded-in-'StatusScreen'>
<   207.702> [SubsSupport] using global config
<   207.835> [SKIN] Parsing embedded skin <embedded-in-'SubsEmbeddedScreen'>
<   207.840> [SKIN] Parsing embedded skin <embedded-in-'SubsScreen'>
<   207.852> [SubsLoader][info] setting block parsing for Parsers
<   207.864> [SKIN] Parsing embedded skin <embedded-in-'Screensaver'>
<   207.883> [SKIN] Parsing embedded skin <embedded-in-'HideVBILine'>
<   207.948> [ePicLoad] setPara max-X=-1 max-Y=-1 aspect_ratio=1.000000 cache=0
resize=0 bg=#FF000000 auto_orient=0
<   207.948> [WebPixmap] load - already loaded
<   207.957> playing 4097:0:0:0:0:0:0:0:0:0:https%3a//dscusvod-vh.akamaihd.net/i
/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,1600k,22
00k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475605223~acl=/*~hmac=3121e304
3a9b2ac09d18313dd438a65427d0b120cdbba627234bb5e853808b3a:Dual Survival - Blackou
t
<   207.957> eServiceApp
<   207.958> PlayerApp
<   207.958> BasePlayer
<   207.958> ExtEplayer3
<   207.958> PlayerBackend
<   207.958> eServiceApp::setTarget 0
[getVariantsFromMasterUrl] - (SSL) Connected with ECDHE-RSA-AES256-GCM-SHA384 en
cryption
[getVariantsFromMasterUrl] - (SSL) Error in certificate verification: unable to
get local issuer certificate
[getVariantsFromMasterUrl] - Request:
GET /i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,16
00k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475605223~acl=/*~hmac=31
21e3043a9b2ac09d18313dd438a65427d0b120cdbba627234bb5e853808b3a HTTP/1.1
Host: dscusvod-vh.akamaihd.net
User-Agent: Enigma2 HbbTV/1.1.1 (+PVR+RTSP+DL;OpenPLi;;;)
Accept: */*
Connection: close


[getVariantsFromMasterUrl] Response[0](size=15): HTTP/1.1 200 OK
[getVariantsFromMasterUrl] Response[1](size=19): Server: AkamaiGHost
[getVariantsFromMasterUrl] Response[2](size=20): Content-Length: 3375
[getVariantsFromMasterUrl] Response[3](size=43): Content-Type: application/vnd.a
pple.mpegurl
[getVariantsFromMasterUrl] Response[4](size=192): Set-Cookie: _alid_=4CLfDy074DS
lI4yIcU/TMg==; path=/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,35
0k,800k,1200k,1600k,2200k,3000k,4500k,.mp4.csmil/; domain=dscusvod-vh.akamaihd.n
et
[getVariantsFromMasterUrl] Response[5](size=17): Mime-Version: 1.0
[getVariantsFromMasterUrl] Response[6](size=30): Access-Control-Allow-Origin: *
[getVariantsFromMasterUrl] Response[7](size=38): Expires: Tue, 04 Oct 2016 17:20
:28 GMT
[getVariantsFromMasterUrl] Response[8](size=34): Cache-Control: max-age=0, no-ca
che
[getVariantsFromMasterUrl] Response[9](size=16): Pragma: no-cache
[getVariantsFromMasterUrl] Response[10](size=35): Date: Tue, 04 Oct 2016 17:20:2
8 GMT
[getVariantsFromMasterUrl] Response[11](size=17): Connection: close
[getVariantsFromMasterUrl] Response[12](size=0):
[getVariantsFromMasterUrl] - content part started
[getVariantsFromMasterUrl] Response[13](size=7): #EXTM3U
[getVariantsFromMasterUrl] Response[14](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=573000,RESOLUTION=640x360,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[15](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_0_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[16](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=267000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[17](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_1_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[18](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=420000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[19](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_2_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[20](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=911000,RESOLUTION=640x360,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[21](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_3_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[22](size=98): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=1319000,RESOLUTION=854x480,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[23](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_4_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[24](size=98): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=1726000,RESOLUTION=854x480,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[25](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_5_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[26](size=99): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=2369000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[27](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_6_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[28](size=99): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=3181000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[29](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_7_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[30](size=101): #EXT-X-STREAM-INF:PROGRAM-ID=
1,BANDWIDTH=4702000,RESOLUTION=1920x1080,CODECS="avc1.640028, mp4a.40.2"
[getVariantsFromMasterUrl] Response[31](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_8_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] - end of read, Content-Length reached
<   208.486> eServiceApp::fillSubservices - found 9 subservices
<   208.486> eServiceApp::start - subservice(4702000b/s) selected according to c
onnection speed (1410064408)
<   208.496> KodiExtRequestHandler: send()-> opcode = 1, status = 1, data = None
<   208.501> PlayerBackend::gotMessage - tStart
<   208.502> PlayerApp::processStart: exteplayer3 "https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_8_av.m3u8?null=0&hdntl=exp=1475688028~acl=
%2f*~data=hdntl~hmac=bd0fabfcb9789af63ab6c6aa9b6a3eaab9151da0f05bc3db0f8d99b8ee1
fbf61"
<   208.722> ExtEPlayer3::handleJsonOutput - unhandled key "EPLAYER3_EXTENDED"
<   209.450> ExtEPlayer3::handleJsonOutput - unhandled key "PLAYBACK_OPEN"
<   209.454> PlayerBackend::recvStopped - retval = 0
<   209.455> PlayerBackend::thread_finished
<   209.455> PlayerBackend::gotMessage - stop
<   209.455> eServiceApp::gotExtPlayerMessage - stop
<   209.456> eServiceApp::isCurrentlySeekable
<   209.457> resolved to PAUSE
<   209.457> eServiceApp::pause
<   209.476> [SubsSupport] closing subtitleDisplay
<   209.485> eServiceApp::stop
<   209.507> ~PlayerBackend
<   209.508> ~ExtEplayer3
<   209.508> ~BasePlayer
<   209.508> ~PlayerApp
<   209.508> ~eServiceApp
<   209.657> KodiExtRequestHandler: recv()-> opcode = 2, status = 0, data = None
<   209.660> KodiExtRequestHandler: send()-> opcode = 2, status = 0, data = {"du
ration": null, "position": null, "playing": false}
<   209.662> KodiExtRequestHandler: recv()-> opcode = 3, status = 0, data = None
<   209.664> [KodiLauncher] FBLock
<   209.664> [KodiLauncher] RCLock
<   209.676> KodiExtRequestHandler: send()-> opcode = 3, status = 1, data = None

Edited by ian1095, 4 October 2016 - 18:25.


Re: serviceapp - gstplayer and exteplayer3 #254 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 4 October 2016 - 18:35

It finds subservices, so it looks like there is no problem there, but there is also "Set-Cookie" header in response, so next requests should have "Cookie" header set, that's maybe a problem.

I will update serviceapp, so it will also pass this header to players.



Re: serviceapp - gstplayer and exteplayer3 #255 ian1095

  • Senior Member
  • 462 posts

+6
Neutral

Posted 4 October 2016 - 18:49

Cool

 

Yes the latest fixes have deffo exposed some fault within Serviceapp that were somehow being masked before the Openssl handshake fixes because it now no longer streams using GSTPlayer either (which is why I considered the possibility of the addon itself being down)

 

Its all worth the effort in the end though mx3L lol

 

Ian.



Re: serviceapp - gstplayer and exteplayer3 #256 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 4 October 2016 - 18:57

@ian1095, for now you can turn off HLSExplorer and you will have default behaviour.



Re: serviceapp - gstplayer and exteplayer3 #257 ian1095

  • Senior Member
  • 462 posts

+6
Neutral

Posted 4 October 2016 - 19:05

Oh ok Thank You, I was not aware of that.

 

Ian.

 

EDIT: Yes Streaming again now with HLS Explorer turned off,albeit back to 360p as it was before.


Edited by ian1095, 4 October 2016 - 19:09.


Re: serviceapp - gstplayer and exteplayer3 #258 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 4 October 2016 - 19:59

Fix added in serviceapp.



Re: serviceapp - gstplayer and exteplayer3 #259 MastaG

  • Senior Member
  • 1,531 posts

+118
Excellent

Posted 4 October 2016 - 20:37

@mx3L, your serviceapp is becoming a professional replacement for the default servicemp3 / dvbmediasink ;)

Great job my friend!



Re: serviceapp - gstplayer and exteplayer3 #260 ian1095

  • Senior Member
  • 462 posts

+6
Neutral

Posted 4 October 2016 - 22:06

Sadly mx3L the latest fixes regarding the sending of the header to the player have not fixed it.

 

Here is the Enigma2 log using debug level 4

 

<   352.592> [ePopen] command: ps | grep kodi.bin | grep -v grep
<   352.592> [eConsoleAppContainer] Starting /bin/sh
<   352.611> [KodiLauncher] FBLock
<   352.611> [KodiLauncher] startup: kodi is not running, starting...
<   352.611> [ePopen] command: unset PYTHONPATH;kodi;kodiext -T
<   352.612> [eConsoleAppContainer] Starting /bin/sh
<   354.016> [DVBCAHandler] no more services
<   355.091> [eDVBResourceManager] release cached channel (timer timeout)
<   355.091> [eDVBLocalTimerHandler] remove channel 0x2fa6dd8
<   355.091> [eEPGCache] remove channel 0x2fa6dd8
<   355.092> [eEPGCache] abort caching events !!
<   355.094> [eDVBResourceManager] stop release channel timer
<   358.095> [eDVBFrontend] close frontend 0
<   412.177> KodiExtRequestHandler: recv()-> opcode = 1, status = 0, data = http
s://dscusvod-vh.akamaihd.net/i/longform/2016-09/28/155312.013.02.001-43368-,500k
,200k,350k,800k,1200k,1600k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1
475618600~acl=/*~hmac=989b5e307a4731fcbe949cb99ea5666dd497951a78ed877ff851682272
b63118

<   412.179> [KodiLauncher] FBUnlock
<   412.179> [fb] double buffering available!
<   412.209> [KodiLauncher] RCUnlock
<   412.211> UDSServer: handlePlayMessage: playPath = https://dscusvod-vh.akamai
hd.net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,
1600k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475618600~acl=/*~hmac=
989b5e307a4731fcbe949cb99ea5666dd497951a78ed877ff851682272b63118
<   412.218> [SKIN] Parsing embedded skin <embedded-in-'StatusScreen'>
<   412.229> [SubsSupport] using global config
<   412.392> [SKIN] Parsing embedded skin <embedded-in-'SubsEmbeddedScreen'>
<   412.400> [SKIN] Parsing embedded skin <embedded-in-'SubsScreen'>
<   412.413> [SubsLoader][info] setting block parsing for Parsers
<   412.423> [SKIN] Parsing embedded skin <embedded-in-'Screensaver'>
<   412.449> [SKIN] Parsing embedded skin <embedded-in-'HideVBILine'>
<   412.518> [ePicLoad] setPara max-X=-1 max-Y=-1 aspect_ratio=1.000000 cache=0
resize=0 bg=#FF000000 auto_orient=0
<   412.518> [WebPixmap] load - already loaded
<   412.529> playing 4097:0:0:0:0:0:0:0:0:0:https%3a//dscusvod-vh.akamaihd.net/i
/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,1600k,22
00k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475618600~acl=/*~hmac=989b5e30
7a4731fcbe949cb99ea5666dd497951a78ed877ff851682272b63118:Dual Survival - Blackou
t
<   412.530> eServiceApp
<   412.530> PlayerApp
<   412.530> BasePlayer
<   412.531> ExtEplayer3
<   412.531> PlayerBackend
<   412.531> eServiceApp::setTarget 0
[getVariantsFromMasterUrl] - (SSL) Connected with ECDHE-RSA-AES256-GCM-SHA384 en
cryption
[getVariantsFromMasterUrl] - (SSL) Error in certificate verification: unable to
get local issuer certificate
[getVariantsFromMasterUrl] - Request:
GET /i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,16
00k,2200k,3000k,4500k,.mp4.csmil/master.m3u8?hdnts=exp=1475618600~acl=/*~hmac=98
9b5e307a4731fcbe949cb99ea5666dd497951a78ed877ff851682272b63118 HTTP/1.1
Host: dscusvod-vh.akamaihd.net
User-Agent: Enigma2 HbbTV/1.1.1 (+PVR+RTSP+DL;OpenPLi;;;)
Accept: */*
Connection: close


[getVariantsFromMasterUrl] Response[0](size=15): HTTP/1.1 200 OK
[getVariantsFromMasterUrl] Response[1](size=19): Server: AkamaiGHost
[getVariantsFromMasterUrl] Response[2](size=20): Content-Length: 3375
[getVariantsFromMasterUrl] Response[3](size=43): Content-Type: application/vnd.a
pple.mpegurl
[getVariantsFromMasterUrl] Response[4](size=192): Set-Cookie: _alid_=VxcYdpC/Loa
3CY9ixnYH1Q==; path=/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,35
0k,800k,1200k,1600k,2200k,3000k,4500k,.mp4.csmil/; domain=dscusvod-vh.akamaihd.n
et
[getVariantsFromMasterUrl] Response[5](size=17): Mime-Version: 1.0
[getVariantsFromMasterUrl] Response[6](size=30): Access-Control-Allow-Origin: *
[getVariantsFromMasterUrl] Response[7](size=38): Expires: Tue, 04 Oct 2016 21:03
:26 GMT
[getVariantsFromMasterUrl] Response[8](size=34): Cache-Control: max-age=0, no-ca
che
[getVariantsFromMasterUrl] Response[9](size=16): Pragma: no-cache
[getVariantsFromMasterUrl] Response[10](size=35): Date: Tue, 04 Oct 2016 21:03:2
6 GMT
[getVariantsFromMasterUrl] Response[11](size=17): Connection: close
[getVariantsFromMasterUrl] Response[12](size=0):
[getVariantsFromMasterUrl] - content part started
[getVariantsFromMasterUrl] Response[13](size=7): #EXTM3U
[getVariantsFromMasterUrl] Response[14](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=573000,RESOLUTION=640x360,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[15](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_0_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[16](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=267000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[17](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_1_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[18](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=420000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[19](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_2_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[20](size=97): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=911000,RESOLUTION=640x360,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[21](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_3_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[22](size=98): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=1319000,RESOLUTION=854x480,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[23](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_4_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[24](size=98): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=1726000,RESOLUTION=854x480,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[25](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_5_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[26](size=99): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=2369000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[27](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_6_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[28](size=99): #EXT-X-STREAM-INF:PROGRAM-ID=1
,BANDWIDTH=3181000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2"
[getVariantsFromMasterUrl] Response[29](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_7_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] Response[30](size=101): #EXT-X-STREAM-INF:PROGRAM-ID=
1,BANDWIDTH=4702000,RESOLUTION=1920x1080,CODECS="avc1.640028, mp4a.40.2"
[getVariantsFromMasterUrl] Response[31](size=274): https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_8_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f
[getVariantsFromMasterUrl] - continue parsing m3u8 stream info
[getVariantsFromMasterUrl] - end of read, Content-Length reached
<   413.046> eServiceApp::fillSubservices - found 9 subservices
<   413.046> eServiceApp::start - subservice(4702000b/s) selected according to c
onnection speed (1410064408)
<   413.047> PlayerBackend::gotMessage - tStart
<   413.047> PlayerApp::processStart: exteplayer3 "https://dscusvod-vh.akamaihd.
net/i/longform/2016-09/28/155312.013.02.001-43368-,500k,200k,350k,800k,1200k,160
0k,2200k,3000k,4500k,.mp4.csmil/index_8_av.m3u8?null=0&hdntl=exp=1475701406~acl=
%2f*~data=hdntl~hmac=4a2873b27298ed7a10ecf88c2f3dc85d0f820231c55d5748782099b0179
6037f" -h "Cookie:_alid_=VxcYdpC/Loa3CY9ixnYH1Q==; path=/i/longform/2016-09/28/1
55312.013.02.001-43368-,500k,200k,350k,800k,1200k,1600k,2200k,3000k,4500k,.mp4.c
smil/; domain=dscusvod-vh.akamaihd.net
"
<   413.057> KodiExtRequestHandler: send()-> opcode = 1, status = 1, data = None
<   413.123> ExtEPlayer3::handleJsonOutput - unhandled key "EPLAYER3_EXTENDED"
<   413.717> ExtEPlayer3::handleJsonOutput - unhandled key "PLAYBACK_OPEN"
<   413.719> PlayerBackend::recvStopped - retval = 0
<   413.720> PlayerBackend::gotMessage - stop
<   413.720> eServiceApp::gotExtPlayerMessage - stop
<   413.720> eServiceApp::isCurrentlySeekable
<   413.720> resolved to PAUSE
<   413.721> eServiceApp::pause
<   413.721> PlayerBackend::thread_finished
<   413.736> [SubsSupport] closing subtitleDisplay
<   413.744> eServiceApp::stop
<   413.768> ~PlayerBackend
<   413.768> ~ExtEplayer3
<   413.768> ~BasePlayer
<   413.768> ~PlayerApp
<   413.768> ~eServiceApp
<   414.214> KodiExtRequestHandler: recv()-> opcode = 2, status = 0, data = None
<   414.216> KodiExtRequestHandler: send()-> opcode = 2, status = 0, data = {"du
ration": null, "position": null, "playing": false}
<   414.219> KodiExtRequestHandler: recv()-> opcode = 3, status = 0, data = None
<   414.220> [KodiLauncher] FBLock
<   414.220> [KodiLauncher] RCLock
<   414.232> KodiExtRequestHandler: send()-> opcode = 3, status = 1, data = None

 

Ian.
 





6 user(s) are reading this topic

0 members, 3 guests, 0 anonymous users


    Bing (3)