Skip to content

Commit 453404c

Browse files
committed
add support aliyun transcoder
1 parent ec55876 commit 453404c

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

dj_elastictranscoder/transcoder.py

+60
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,63 @@ def start_job(self, obj, transcode_kwargs, message=''):
111111
job.object_id = obj.pk
112112
job.message = message
113113
job.save()
114+
115+
116+
class AliyunTranscoder(Transcoder):
117+
118+
def __init__(
119+
self,
120+
access_key_id=None,
121+
access_key_secret=None,
122+
pipeline_id=None,
123+
region=None,
124+
notify_url=None
125+
):
126+
if not access_key_id:
127+
access_key_id = get_setting_or_raise('ALIYUN_TRANSCODE_ACCESS_KEY_ID')
128+
self.access_key_id = access_key_id
129+
130+
if not access_key_secret:
131+
access_key_secret = get_setting_or_raise('ALIYUN_TRANSCODE_ACCESS_KEY_SECRET')
132+
self.access_key_secret = access_key_secret
133+
134+
if not pipeline_id:
135+
pipeline_id = get_setting_or_raise('ALIYUN_TRANSCODE_PIPELINE_ID')
136+
self.pipeline_id = pipeline_id
137+
138+
if not region:
139+
region = get_setting_or_raise('ALIYUN_TRANSCODE_REGION')
140+
self.region = region
141+
142+
if not notify_url:
143+
notify_url = get_setting_or_raise('ALIYUN_TRANSCODE_NOTIFY_URL')
144+
self.notify_url = notify_url
145+
146+
from aliyunsdkcore import client
147+
148+
self.client = client.AcsClient(self.access_key_id, self.access_key_secret, self.region)
149+
150+
def start_job(self, obj, transcode_kwargs, message=''):
151+
"""
152+
https://help.aliyun.com/document_detail/57347.html?spm=5176.doc56767.6.724.AJ8z3E
153+
"""
154+
155+
import json
156+
from aliyunsdkmts.request.v20140618 import SubmitJobsRequest
157+
158+
request = SubmitJobsRequest.SubmitJobsRequest()
159+
request.set_accept_format('json')
160+
request.set_Input(json.dumps(transcode_kwargs.get('input_file')))
161+
request.set_OutputBucket(transcode_kwargs.get('bucket'))
162+
request.set_OutputLocation(transcode_kwargs.get('oss_location'))
163+
request.set_Outputs(json.dumps(transcode_kwargs.get('outputs')))
164+
request.set_PipelineId(self.pipeline_id)
165+
response = json.loads(self.client.do_action_with_exception(request).decode('utf-8'))
166+
167+
content_type = ContentType.objects.get_for_model(obj)
168+
job = EncodeJob()
169+
job.id = response['JobResultList']['JobResult'][0]['Job']['JobId']
170+
job.content_type = content_type
171+
job.object_id = obj.pk
172+
job.message = message
173+
job.save()

dj_elastictranscoder/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
url(r'^endpoint/$', 'aws_endpoint'),
99
url(r'^aws_endpoint/$', 'aws_endpoint', name='aws_endpoint'),
1010
url(r'^qiniu_endpoint/$', 'qiniu_endpoint', name='qiniu_endpoint'),
11+
url(r'^aliyun_endpoint', 'aliyun_endpoint', name='aliyun_endpoint'),
1112
)

dj_elastictranscoder/views.py

+36
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,39 @@ def qiniu_endpoint(request):
102102
raise RuntimeError('Invalid code')
103103

104104
return HttpResponse('Done')
105+
106+
107+
@csrf_exempt
108+
@require_http_methods(['POST', ])
109+
def aliyun_endpoint(request):
110+
"""
111+
Receive Aliyun notification
112+
"""
113+
114+
try:
115+
webhook = request.read().decode('utf-8')
116+
data = json.loads(webhook)
117+
except ValueError:
118+
return HttpResponseBadRequest('Invalid JSON')
119+
120+
message = json.loads(data['Message'])
121+
if message['Type'] == 'Transcode':
122+
state = message['state']
123+
job_id = message['jobId']
124+
125+
job = EncodeJob.objects.get(pk=job_id)
126+
127+
# https://help.aliyun.com/document_detail/57347.html?spm=5176.doc29208.6.724.4zQQQ4
128+
if state == 'Success': # Complate
129+
job.message = webhook
130+
job.state = 4
131+
job.save()
132+
transcode_oncomplete.send(sender=None, job=job, job_response=job_id)
133+
elif state == 'Fail': # Error
134+
job.message = webhook
135+
job.state = 2
136+
job.save()
137+
transcode_onerror.send(sender=None, job=job, job_response=data)
138+
else:
139+
raise RuntimeError('Invalid code')
140+
return HttpResponse('Done')

0 commit comments

Comments
 (0)