提交 05f31984 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 课程增加尾部视频

上级 23402e55
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCet8qJanYnePII
SE7OALUsp2NJGBttfrKVx7gDV9kBmFMakPyTjyxLoViNmRhwwy4Au6rAD4plqaJC
iSle2SwlOCqKJp4tmLaVBbmEKJ28zLN3L7LJBtMA7AOmAiwquDXOxarPI/tdu7+5
ivylNFzqcCLnLsJXn/MiY9urkipyDU7RTIHiUbWiXBrQKqDHEyoco9YdQk11V7Sb
cb8CDvEfmvSV8N3a36ahM+wT2TB7ubK62i3h4DktAWFyB2xHMoX7kG6T9HQPGCIq
XjJJVJ2XWDG1O0tR9fIpnLEmu9O/9psXEO57gT/ddY62bkPiGI3fwpTje+nVxCW6
RY2RHXz1AgMBAAECggEAM8fYXu6Jr6UIqWUVuKWIdhICFUW1JQrRroXi5cxSMvAE
JMWqcWWjWOVBo6iPzbIPnxOayGAJkdM+6aAgDB6kBVyGnF2u+0c4QfQFKzWpCIBs
CHVaSbVdP47APfe1exZwD45zhHLDvjfTe+/5Ltife6ir6mpZ4wZ+5vhXIWllSaHE
M8c2qA9Vc+BbyrBL8mGkikKYNUxQA4Nf+VmnIGaeOeVPPtynianeEQpklpWfq6GT
8c6DhEx+iFH8ecACPZM5z2+uzApOe4SqJiXUdBNeKlK+ddtkCacQEdeUtCtBJKbz
YhNPuNnae9f25UXxp9CmJlpS57eU+Wq4PKj5pGQ2gQKBgQDBkXsBNN1eoZHEfM1V
0Kx39wBF3sMijVkkfPqawZp4rjqkVncQjp/o/BlpwN4ih0DP/qTeEMx77zSltqG/
bpKvydz1o9SFxN6aRZzYz/EeVcloDsiLCU1h8AOJ7jXg1g0qDhrVEB+0bxcDaDPn
7fw+zuEyL68lvKpFHAlnVYjAoQKBgQDR6Mq1Z4rzgL0fam+RgDG3F9gYsUo9+1CG
psX3vx99JGfg/ZBzVsrlqR791BXucDZ2k4SF3b6iqbt7eYnbwymn+DAKDpt9DI+M
9eOlSjdZTfmgqJfek1u8ABU8xo/3fRX+WtyrqKQo6Cr0XjPDRgo0qjdTkVKz05Bq
rVSnq87X1QKBgQCbeR1iP7Lakk2Bk3hdyAjvJl56wEzdkMibzSKAcKaA7fg+DRD/
JH9+ZBaJYZdKBnbhWTfVAYsstFoGDCXom4iIV0v5pMhLVXAyW116q7KQWfk2ckFT
o3obAuvkuodd+q+CKugUYCoHA/9pBiZC0Fz9ma85XyF/3wSoE7fd3s7DYQKBgCPC
sg4Xlr+HNjEM8/bozQ9xO3pxccF/eCeIb/+WCupJ8nyNFjfgGG7p0gLSR+44Jb8r
wI8ByQFzQyJ1ATx0Ujtwd9auyGSUaDxOg7rcGvPW6ekp772WgzFTHksdVNeH8uBD
YIbKEzV44CCDj/P7ka+JNCXDg0BpkZfq8ZojFfkFAoGALku7v4b89mQ6dsYetoQ/
WYIVgir9TJqTKt4yf96eBA6ZziyMTzQzkvK8NuDhFoWw5Jn82cSt6aN0z+Gq3JaS
nDvOY0N3unUcoxUQiUb7mKT3H4kn/GumwEpIXMv7Onq+pzeNJfmK4gnP4oq/WSt3
3os/+jzk1TtbbCGNsn8aTf4=
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAucCbdPPyAp6vmnr5XObuPsctUhVLyXwqbIpgI5jWzjG7wmk8
V6z8WJKPO9KZM6D9ejtN/bbbd3j1cRiw7NSl8AUykiVHJWz9TXAflET2EpILLera
I1B2XAcBsc8dZBGGJD/LT97ZvNLYzuQOr7R1wytWH1uisAK5ClzgnSptMenXFyhw
5Xw0Lm3zoeeqYF/KMQ1McAYMGxgu6s6dxXKiA0BcgWQ31yZey0c4HhCt7T7sA/UN
ahUsxtCcSNSvdgXay5Pu/l3N88TwW2QzaCzrueILHWRFwkREhpqyrwjN3gkaa+1T
jLxzCsk/pTnPccxlFwc3YQ3hYLMl36NJ/OIpHwIDAQABAoIBACuMmaXYz6OHmroI
HNCIH9E+F0UIUyVg4/1gj9uoqKvdAx04WPphRyRo8AXhgSOWmfb/UnCqX1fqVvj2
BfzwehsEzO9wp/aBT/3IzM6RQHPoI5DXX98prSY0SlRqr4RXi3CSOFN4duoLMOOI
mlzdXUKttVpSvJixerqQPeT7HnC18NBKOydFMYPdXsgWcMXvu2BuvRClIzsjlXKM
VP00BNRY3Oje6T9yl8N051jIZh48YD3yyEAVFKPOWaJVzUU/RRPOOdTb2Y3A1bek
IbCdurdzoEQoJxkeTuColnuL1jj2mpxIBskKYhPAMV5arYS0pZ0VAtjoGGCyn7gT
l/bkTVkCgYEA6EB15hzRD2iTTIFMtDBqw0l3vJWcuWPvwFZl6zculO8Cdsvx0cDZ
VbEXByA0+CG3q47/UrVqETRhtyuVnxuKrceKU8/zib1dvvTMNjeYLKosjyG49xO6
gDx7nVBwYHmQN/iEuWTobLg1vtSNyd99WgG4cFHvqF7kIJb2W0IaGrsCgYEAzL70
VHn9BUP3CGecoU8Fnck9/7GWhvGgFU58Q/dU3Jr8g6lroeDas9zQU2tCnJN0e7cr
13thq2kQQHTYCY4J6EUtjO89sNVx4bO83xqQhobZBwZXkE5QDWIKCbiYGRLAb1+f
AAEwIEdPBgM88YFHOU5YbPTYH8TLkJfxyvMonu0CgYEArGWE3n3PdVeT1zs3O52g
8jrrpVGNF1QmWCgJ2VKJwkW0F4iFhMRYzzH3vPNcPj+Q/cjUn4lIJWMzkWrJ0mP4
ScyPUm1PApRNLPy7RRd5XtYm40wN52F+k8fRnlFiSUqTEejoZFGR8Xm/c1qFsS6y
9ofGZ6F6ewmM3uAQGGd1xxcCgYBFhjoVTW8bkJ6b3gMTy2+Oyr0gzD7fB8FiOsp7
kcrhNke0tZz01ROuq7aZ/Pwbiv6s2+ApRZ4+xGheWs7ZP8AhfQwgpUR/fZs0FwJ1
h+G3rKaZeg/V0qHgSYA7GNGdAf8SUpf9OmoLK+urkQHqyAlVbkMcjG+vKfYt3Uqf
rb4HaQKBgQCxm1oz9QrmxWKJ4eYKHSsD9UPu4QZhltBECH1btgvTwAEmwuXaCcta
RaFNhMe609sQ+YVIxa9fK0MXBiq7DG6nSLGvnLfVEYo4nGe6EvL9nQ7IFZywJjTb
/Fw4rTMwT59VSWJdv8BPznV7Gk7p17fcXM55iJxxu65r3ZuOXjQSGA==
-----END RSA PRIVATE KEY-----
\ No newline at end of file
-----BEGIN CERTIFICATE-----
MIIGtjCCBZ6gAwIBAgIQDjUArTRdZ4P5wtQVmCqJGjANBgkqhkiG9w0BAQsFADBj
MQswCQYDVQQGEwJDTjE2MDQGA1UECgwtQmVpamluZyBYaW5jaGFjaGEgQ3JlZGl0
IE1hbmFnZW1lbnQgQ28uLCBMdGQuMRwwGgYDVQQDDBNYY2MgVHJ1c3QgT1YgU1NM
IENBMB4XDTIyMDgxODE0MDAzMVoXDTIzMDkxNzE0MDAzMFowgY4xCzAJBgNVBAYT
AkNOMRIwEAYDVQQIDAnljJfkuqzluIIxEjAQBgNVBAcMCeWMl+S6rOW4gjE/MD0G
A1UECgw25riF5o6n57Sr6I2G77yI5YyX5Lqs77yJ5pWZ6IKy56eR5oqA6IKh5Lu9
5pyJ6ZmQ5YWs5Y+4MRYwFAYDVQQDDA0qLmV6aWppbmcuY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAucCbdPPyAp6vmnr5XObuPsctUhVLyXwqbIpg
I5jWzjG7wmk8V6z8WJKPO9KZM6D9ejtN/bbbd3j1cRiw7NSl8AUykiVHJWz9TXAf
lET2EpILLeraI1B2XAcBsc8dZBGGJD/LT97ZvNLYzuQOr7R1wytWH1uisAK5Clzg
nSptMenXFyhw5Xw0Lm3zoeeqYF/KMQ1McAYMGxgu6s6dxXKiA0BcgWQ31yZey0c4
HhCt7T7sA/UNahUsxtCcSNSvdgXay5Pu/l3N88TwW2QzaCzrueILHWRFwkREhpqy
rwjN3gkaa+1TjLxzCsk/pTnPccxlFwc3YQ3hYLMl36NJ/OIpHwIDAQABo4IDODCC
AzQwDAYDVR0TAQH/BAIwADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8veGluY2hh
Y2hhMm92LmNybC5jZXJ0dW0ucGwveGluY2hhY2hhMm92LmNybDB5BggrBgEFBQcB
AQRtMGswLwYIKwYBBQUHMAGGI2h0dHA6Ly94aW5jaGFjaGEyb3Yub2NzcC1jZXJ0
dW0uY29tMDgGCCsGAQUFBzAChixodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwv
eGluY2hhY2hhMm92LmNlcjAfBgNVHSMEGDAWgBT6oMvCx12BtSCSByALtjtwOwkO
VTAdBgNVHQ4EFgQUEJufsd5nLNR+wqR2GsFWDn7qTn0wTAYDVR0gBEUwQzAIBgZn
gQwBAgIwNwYMKoRoAYb2dwIFARYCMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3
LmNlcnR1bS5wbC9DUFMwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4G
A1UdDwEB/wQEAwIFoDAlBgNVHREEHjAcgg0qLmV6aWppbmcuY29tggtlemlqaW5n
LmNvbTCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYAVYHUwhaQNgFK6gubVzxT
8MDkOHhwJQgXL6OqHQcT0wwAAAGCsUFwdgAABAMARzBFAiAc51lynft4sehXTgyw
tjQ83PAVmfZ3FC55eIpIETe2hgIhANvo5ZtGQpcZQ5HSGbRLy4Y9/MbUrS8dtkwP
l7I/lRj7AHYArfe++nz/EMiLnT2cHj4YarRnKV3PsQwkyoWGNOvcgooAAAGCsUFw
TwAABAMARzBFAiATnQDMw1wykBdnTIRfSSXPj7HZfDdRRq6VaiTbSpYKYQIhAMTp
V6K0W9gtdYGdeg4j6n17S1yMODYvLJxd3kAFFNDTAHYAejKMVNi3LbYg6jjgUh7p
hBZwMhOFTTvSK8E6V6NS61IAAAGCsUFwrQAABAMARzBFAiEAwWKXKxp6DcKG7R/d
rxmPUg8uNbUcdxysrpB3gOzkIlACICWpx7/+2ulDG2EC9m4RqGcXbts3VWu/yxpE
0pAYuAP8MA0GCSqGSIb3DQEBCwUAA4IBAQCf3AdKLO8EUntMjKaRa0lncwh/pBIQ
bcQfkJBfiTpo6tnRphR+DE50oYOX1TSQRm4cDgP2JURYiTK6Z2+ljqMbUx4mNLqe
+6yG+PGCUX6rX4BsJqlRP2W7WONE/I3/3S6MRfclKmakHSyrGFi8O/JJyNqm+5z9
8tnk8c1Cn7FboJZonhX0yszHkXLLeA93xm5+Etkw0+DvRcZGiEqKQivO3CnUh1gs
LZg27a8s3dtmAAHbb2icm5jloK9Jgpx/NkGL/cCoNZ8Ng2TZkRvo6GzIp43uS332
R07dQ6rNWZkPzdxKUdNcT0v3yJJyxD1H3Rk4/bxp78giw4JGHp52Df+U
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEzzCCA7egAwIBAgIRAPJECC2rqQ2ljHLp8pqTQK4wDQYJKoZIhvcNAQELBQAw
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yMjA3MDEwNzQ4NDda
Fw0yNzA2MzAwNzQ4NDdaMGMxCzAJBgNVBAYTAkNOMTYwNAYDVQQKDC1CZWlqaW5n
IFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xHDAaBgNVBAMM
E1hjYyBUcnVzdCBPViBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCz2nxSPEsMeRBdunf+KZ8CrJIj9DUWGVu05WWyES+QkMHzVHCZt8cB2Blp
qzHHqFsXSDHVzcMxDeXBbudmQwYbg5NpSwY9vJHPTl6vlAlK4UWN4+oPTgP9//RN
N6KLmK3kjZ2Zc9F3kFKVaziSwVNjVvneacoUnz6blwLLBc5QelQ8oDT0eEv0QBAY
I0T8pHDgcvWQqTBaRrOb80plDhYju464XbVhtOHvFCiBIkKnfUBnBfptWjGM8Kis
sq4r8YX35B/pioj9g1YX34MLt+5L3vvWXEb2aMiwwB1Z3bSeeiU3N8aMuSb9E9jp
zd0uhzRameU7jAIAr8uuunb7GUJ7AgMBAAGjggFhMIIBXTASBgNVHRMBAf8ECDAG
AQH/AgEAMB0GA1UdDgQWBBT6oMvCx12BtSCSByALtjtwOwkOVTAfBgNVHSMEGDAW
gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9j
cmwuY2VydHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUH
MAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0
dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOgYDVR0gBDMwMTAv
BgRVHSAAMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5wbC9DUFMw
DQYJKoZIhvcNAQELBQADggEBACWzdb59JyYc/WivKUcTEZ+H8WOTuv3AiR6rPljB
QUEB/1kxIeBK+276WLJn0nFNFuT9QMUBo/iUvNvuRQqVjouuYB0Oea6zKQpeMWry
oYtbheW+5NYAbdl9tYE4MRRK9zBLMRrQz35q+XfgMInozidhNHCvuulWk38OMM51
O73z53+R1879nnoZZznoYnrnkISVDjlhe6OSMifvIJAwSYwH2z79Y6CTVgtqTDR9
793Gr7UUmk5ydoxClxnku7voTX8iJUPcuAjElxFrhSQoxm6uXXOfItEqGvLkWAcq
IC5mcyU9VpUg1YP+KkDMh+KQM7/k+2ka1em9hO+QHvJ08UQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEtDCCA5ygAwIBAgIRAJOShUABZXFflH8oj+/JmygwDQYJKoZIhvcNAQELBQAw
PjELMAkGA1UEBhMCUEwxGzAZBgNVBAoTElVuaXpldG8gU3AuIHogby5vLjESMBAG
A1UEAxMJQ2VydHVtIENBMB4XDTA4MTAyMjEyMDczN1oXDTI3MDYxMDEwNDYzOVow
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAOP7faNyusLwyRSH9WsBTuFuQAe6bSddf/dbLbNax1Ff
q6QypmGHtm4PhtIwApf412lXoRg5XWpkecYBWaw8MUo4fNIE0kso6CBfOweizE1z
2/OuT8dW1Vqnlon686to1COGWSfPCSe8rG5ygxwwct/gounS4XR1Gb0qnnsVVAQb
10M5rVUoxeIau/TA5K44STPMdoWfOUXSpJ7yEoxR+HzkLX/1rF/rFp+xLdG6zJFC
d0wlyZA4b9vwzPuOHpdZPtVgTuYFKO1JeRNLukjbL/ly0znK/h/YNHL1tEDPMQHD
7N4RLRddH7hQ0V4Zp2neBzMoylCV+adUy1SGUEWp+UkCAwEAAaOCAWswggFnMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAh2zcsH/yT2xc3tu5C84oQ3RnX3MFIG
A1UdIwRLMEmhQqRAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNw
LiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQYIDAQAgMA4GA1UdDwEB/wQEAwIB
BjAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vY3JsLmNlcnR1bS5wbC9jYS5jcmww
aAYIKwYBBQUHAQEEXDBaMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1j
ZXJ0dW0uY29tMC4GCCsGAQUFBzAChiJodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0u
cGwvY2EuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQGCCsGAQUFBwIBFhhodHRw
Oi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQELBQADggEBAI3m/UBmo0yc
p6uh2oTdHDAH5tvHLeyDoVbkHTwmoaUJK+h9Yr6ydZTdCPJ/KEHkgGcCToqPwzXQ
1aknKOrS9KsGhkOujOP5iH3g271CgYACEnWy6BdxqyGVMUZCDYgQOdNv7C9C6kBT
Yr/rynieq6LVLgXqM6vp1peUQl4E7Sztapx6lX0FKgV/CF1mrWHUdqx1lpdzY70a
QVkppV4ig8OLWfqaova9ML9yHRyZhpzyhTwd9yaWLy75ArG1qVDoOPqbCl60BMDO
TjksygtbYvBNWFA0meaaLNKQ1wmB1sCqXs7+0vehukvZ1oaOGR+mBkdCcuBWCgAc
eLmNzJkEN0k=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
6GAqm4VKQPNriiTsBhYscw==
MIIEATCCAmmgAwIBAgIRAIBa1h32QSYGQrPBPtBvOzEwDQYJKoZIhvcNAQELBQAw
TzEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMRIwEAYDVQQLDAltYXhA
Ym9nb24xGTAXBgNVBAMMEG1rY2VydCBtYXhAYm9nb24wHhcNMjUwMzA1MDE1MzAy
WhcNMjcwNjA1MDE1MzAyWjBDMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxvcG1lbnQg
Y2VydGlmaWNhdGUxGDAWBgNVBAsMD21heEBib2dvbiAoTWF4KTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAJ63yolqdid48ghITs4AtSynY0kYG21+spXH
uANX2QGYUxqQ/JOPLEuhWI2ZGHDDLgC7qsAPimWpokKJKV7ZLCU4Koomni2YtpUF
uYQonbzMs3cvsskG0wDsA6YCLCq4Nc7Fqs8j+127v7mK/KU0XOpwIucuwlef8yJj
26uSKnINTtFMgeJRtaJcGtAqoMcTKhyj1h1CTXVXtJtxvwIO8R+a9JXw3drfpqEz
7BPZMHu5srraLeHgOS0BYXIHbEcyhfuQbpP0dA8YIipeMklUnZdYMbU7S1H18imc
sSa707/2mxcQ7nuBP911jrZuQ+IYjd/ClON76dXEJbpFjZEdfPUCAwEAAaNkMGIw
DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaA
FEp8boWns9rabVRVI/QaqorxbUciMBoGA1UdEQQTMBGCD2Rldi5lemlqaW5nLmNv
bTANBgkqhkiG9w0BAQsFAAOCAYEAmbiw5Jkh6uWirQuyUzEq5/Q4Lk0ftm/97Nb7
M+Q3ue03BxguZZmkNhmTKgLapalBlXHLMt5LBfvAcR57cJXxGcfvKxnjs07jeTFO
RU/yOAHD+lhcLQSC0/uXhtj8F6OcxBKqviQhQFHZWv4crvawpsFIrIuVjV5P+bxv
u7gGD8CTbybuFj4BybRuilMKE02rVJRPGXmIof+gRifgtVGyGtauCm6PxnpgS1Um
548z43aQfus4vgkyEwk5ATBYFmOD5PuCT9HkJPYEYpC3iQPLfaoIKc4V5tUtlX4Y
vyF2CCOftu4SFhinD41+kI/RlgX4+1xiHLdjWDS7BklPaRFjaft/wy8SNqklsp0k
oU9jg+yw9h4X/tom56EV7hKNtzvTA1nn9YAnsTAxhia3tmgkuN048unEMBLcIDbK
2UZxf2qYY3iJFyYWNFE2+XHHygjvSBMr/fHoBVeHGCzo861UzLCoKZif4pcxVQiE
wZLv6wJZjpEI33op7JJDhslsY9PU
-----END CERTIFICATE-----
......@@ -30,7 +30,7 @@ if ($GLOBAL.isDev === 'development') {
host: $GLOBAL.webConf.domain || 'localhost',
http2: false,
https: $GLOBAL.webConf.isHttps && {
key: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '.key')),
key: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '-key.pem')),
cert: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '.pem'))
},
overlay: {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -34,9 +34,12 @@
</em>
<em :class="skipClass" @click="toggleSkip">{{ $t('viewerPlayer.skipTitle') }}</em>
</div>
<el-dialog :visible.sync="dialogVisible" width="600px" top="0">
<el-dialog :visible.sync="dialogVisible" width="600px" top="0" class="my-dialog">
<iframe :src="sharePageUrl" style="display:block;width:100%;height:720px;border:0;"></iframe>
</el-dialog>
<el-dialog :visible.sync="videoDialogVisible" width="1000px" top="40px" v-if="videoDialogVisible">
<video-player :video="course.video_address" style="height:600px"></video-player>
</el-dialog>
</div>
</template>
......@@ -80,15 +83,20 @@ export default {
player: null,
watchedTime: 0,
watchedTimePoint: [], // 视频观看的时间点
dialogVisible: false // 分享海报弹出
dialogVisible: false, // 分享海报弹出
videoDialogVisible: false // 视频弹出
}
},
inject: ['$course'],
watch: {
pptIndex(index) {
this.isSeek && this.updateVideoCurrentTime(index)
}
},
computed: {
course() {
return this.$course()
},
// 学期ID
sid() {
return this.$route.params.sid
......@@ -166,11 +174,14 @@ export default {
course_id: this.cid,
chapter_id: this.chapter.id
}
api.getShare(params).then(res => {
api.getShare(params).then((res) => {
if (res.code === 0 && res.data.need_share) {
this.dialogVisible = true
}
})
if (this.course.show_end_video && this.course.video_address) {
this.videoDialogVisible = true
}
},
// 当前播放时间更新
onTimeupdate(time) {
......@@ -179,7 +190,7 @@ export default {
return
}
const ppts = this.chatperResources.ppts || []
let index = this.chatperResources.ppts.findIndex(item => item.ppt_point > time)
let index = this.chatperResources.ppts.findIndex((item) => item.ppt_point > time)
index = index !== -1 ? index - 1 : ppts.length - 1
this.$emit('change-ppt', index)
const durations = this.player.getDuration()
......@@ -209,12 +220,12 @@ export default {
getChapterVideo() {
// 视频播放类型 1是CC加密; 2是非加密; 3是阿里云
if (this.videoProvider === 3) {
api.getChapterVideoAliyun(this.resourceId).then(response => {
api.getChapterVideoAliyun(this.resourceId).then((response) => {
this.chatperResources = response
Array.isArray(response.ppts) && this.$emit('pptupdate', response.ppts)
})
} else {
api.getChapterVideo(this.resourceId).then(response => {
api.getChapterVideo(this.resourceId).then((response) => {
let { video, audio, ppts } = response
video = video.reduce(
(result, item) => {
......@@ -239,7 +250,7 @@ export default {
.getChapterVideoProgress(this.sid, this.resourceId, {
device_id: Cookies.get('_idt')
})
.then(response => {
.then((response) => {
this.progress = response
// 跳转播放进度
if (this.player && response.cpt) {
......@@ -300,15 +311,18 @@ export default {
height: 100%;
background-color: #3f3f3f;
}
.player-main {
display: flex;
flex: 1;
overflow: hidden;
}
.player-column {
flex: 1;
height: 100%;
}
.player-footer {
display: flex;
align-items: center;
......@@ -316,15 +330,18 @@ export default {
padding: 0 20px;
font-size: 14px;
color: #a0a0a0;
a {
color: #a0a0a0;
text-decoration: none;
}
em {
margin-right: 40px;
cursor: pointer;
}
}
.player-button {
display: inline-block;
color: #a0a0a0;
......@@ -335,36 +352,44 @@ export default {
background: url(../../assets/play-icons.png) no-repeat 0 0;
cursor: pointer;
}
.player-button-download {
background-position: 0 -240px;
}
.player-button-ppt {
background-position: 0 -240px;
}
.player-button-ppt__active {
background-position: 0 -280px;
color: #b19241;
}
.player-button-skip {
background-position: 0 -160px;
}
.player-button-skip__active {
background-position: 0 -200px;
color: #b19241;
}
::v-deep .el-dialog {
::v-deep .my-dialog {
background-color: #3f3f3f;
border-radius: 10px;
overflow: hidden;
}
::v-deep .el-dialog__header {
display: none;
min-height: 24px;
}
::v-deep .el-dialog__headerbtn .el-dialog__close {
font-size: 24px;
}
::v-deep .el-dialog__body {
padding: 0;
.el-dialog__header {
display: none;
min-height: 24px;
}
.el-dialog__headerbtn .el-dialog__close {
font-size: 24px;
}
.el-dialog__body {
padding: 0;
}
}
</style>
<template>
<div class="video-player" id="player"></div>
<div class="video-player" :id="id"></div>
</template>
<script>
import _ from 'lodash'
export default {
name: 'VideoPlayer',
props: {
......@@ -12,9 +13,11 @@ export default {
disabled: { type: Boolean, default: false }
},
data() {
const id = _.uniqueId('player_')
let videoRetry = parseInt(window.localStorage.getItem('videoRetry'))
videoRetry = isNaN(videoRetry) ? 3 : videoRetry
return { player: null, videoRetry }
return { id, player: null, videoRetry }
},
methods: {
createPlayer() {
......@@ -31,7 +34,7 @@ export default {
*/
this.player = new Aliplayer(
{
id: 'player',
id: this.id,
source: JSON.stringify({ SD, LD, FD }),
width: '100%',
height: '100%',
......@@ -43,26 +46,26 @@ export default {
useHlsPluginForSafari: true,
language: this.$i18n.locale === 'zh-CN' ? 'zh-cn' : 'en-us'
},
function (player) {
function(player) {
// 禁止调整进度,隐藏声音和倍数
if (_this.disabled) {
$('.prism-volume, .prism-setting-speed').hide()
$('.prism-progress').css('pointer-events', 'none')
}
player.on('ready', function () {
player.on('ready', function() {
// 跳过片头
_this.isSkip && player.seek(6)
_this.$emit('ready', player)
})
player.on('timeupdate', function (event) {
player.on('timeupdate', function(event) {
const currentTime = player.getCurrentTime()
_this.$emit('timeupdate', currentTime)
if (currentTime > 1) {
window.localStorage.setItem('videoRetry', 3)
}
})
player.on('error', function (event) {
player.on('error', function(event) {
_this.$emit('error', event)
if (_this.videoRetry) {
window.localStorage.setItem('videoRetry', _this.videoRetry - 1)
......@@ -70,7 +73,7 @@ export default {
}
console.log(event)
})
player.on('ended', function () {
player.on('ended', function() {
_this.$emit('ended')
})
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论