示例#1
0
文件: forms.py 项目: philpill/romeo
def create_cover_thumbnails(video_id, cover_filename=None):
    def _thumbnail(label, size):
        return VideoThumbnail.from_cover_image(cover_filename, video.account_id, label, size)

    video = Video.query.get(video_id)
    assert video.external_id
    cover_filepath = urlparse(video.thumbnails[0].url).path
    if cover_filename != cover_filepath.rsplit('/', 1)[-1]:
        current_app.logger.warning('Unexpected cover image: %d: %s: %s',
                                   video_id, cover_filename, cover_filepath)
        return

    imgdata = StringIO(download_file(media_bucket, cover_filepath))
    image = Image.open(imgdata)
    video.thumbnails = [_thumbnail(None, image.size)]

    sizes = [size for size in current_app.config['COVER_THUMBNAIL_SIZES']
             if size < image.size]
    for size, buf in resize(image, sizes, save_to_buffer='jpeg'):
        thumbnail = _thumbnail(str(size[0]), size)
        upload_file(media_bucket, urlparse(thumbnail.url).path, buf, 'image/jpeg')
        video.thumbnails.append(thumbnail)
        imgdata = buf

    try:
        ooyala_request('assets', video.external_id, 'preview_image_files',
                       method='post', data=imgdata.getvalue())
    except Exception:
        current_app.logger.exception('Unable to set preview image for %d (%s)',
                                     video.id, video.external_id)
示例#2
0
文件: views.py 项目: philpill/romeo
def _videos_request(feed, path='', breakdown_by='', limit=50, page_token=None):
    q_params = dict(limit=limit)
    if page_token:
        q_params['page_token'] = page_token
    if breakdown_by:
        q_params['breakdown_by'] = breakdown_by
    return ooyala.ooyala_request(feed, path, query_params=q_params)
示例#3
0
def _create_video_record(asset, account_id, tag_id):
    video = Video.query.filter_by(external_id=asset['embed_code']).first()
    if video:
        return video, False

    video = Video(
        account_id=account_id,
        status='published',
        date_added=asset['created_at'],
        date_updated=asset['updated_at'],
        title=asset['name'],
        duration=asset['duration'] / 1000,
        filename='dolly',
        external_id=asset['embed_code'],
        category=asset['metadata'].get('category'),
    )
    db.session.add(video)

    preview_image = ooyala.ooyala_request('assets', asset['embed_code'], 'primary_preview_image')
    for t in preview_image['sizes']:
        t.pop('time', None)
    video.thumbnails = [VideoThumbnail(**t) for t in preview_image['sizes']]

    video.record_workflow_event('imported from ooyala')

    if tag_id:
        db.session.flush()
        db.session.add(VideoTagVideo(video_id=video.id, tag_id=tag_id))

    return video, True
示例#4
0
def import_videos_from_ooyala(label=None):
    next_page_token = None
    while True:
        params = dict(limit=100, include='metadata')
        if label:
            params['where'] = "labels INCLUDES '%s'" % label
        if next_page_token:
            params['page_token'] = next_page_token
        response = ooyala.ooyala_request('assets', params=params)
        for asset in response['items']:
            if asset['status'] != 'live':
                current_app.logger.warning('Video not "live": %s', asset['embed_code'])
                continue

            try:
                channel = asset['metadata']['channel']
                user = asset['metadata']['user']
            except KeyError:
                current_app.logger.error('No metadata found: %s', asset['embed_code'])
                continue
            else:
                account, created = _create_account_record(user)
                tag, created = _create_tag_record(channel, account)

            video, created = _create_video_record(asset, account.id, tag and tag.id)
            if created:
                current_app.logger.debug('Created video record: %s/%s/%s', account.id, tag.id if tag else '-', video.id)

        if 'next_page' in response:
            next_page_token = parse_qs(response['next_page'])['page_token'][0]
        else:
            break
示例#5
0
文件: views.py 项目: philpill/romeo
 def put(self, video):
     args = self.preview_image_parser.parse_args()
     thumbnails = ooyala_request(
         'assets', video.external_id, 'primary_preview_image',
         data=json.dumps(dict(type='generated', time=args['time'])), method='put')
     video.thumbnails = [
         VideoThumbnail(url=t['url'], width=t['width'], height=t['height'])
         for t in thumbnails['sizes']
     ]
     return dict(image=dict(items=thumbnails['sizes']))
示例#6
0
def check_ooyala_processing_status():
    videos = Video.query.filter(Video.status == 'processing', Video.external_id != None)
    videoids = dict(videos.values('external_id', 'id'))
    if not videoids:
        return
    params = dict(where="embed_code in ('%s')" % "', '".join(videoids))
    for asset in ooyala.ooyala_request('assets', params=params)['items']:
        if not asset['status'] == 'processing':
            video = Video.query.filter_by(external_id=asset['embed_code']).first()
            data = ooyala.get_video_data(asset['embed_code'])
            update_video_status(video, data)
示例#7
0
def migrate_video_files(account):
    for video in Video.query.filter_by(account_id=account, filename='dolly'):
        metadata = ooyala.ooyala_request('assets', video.external_id, 'metadata')
        key = video_bucket.get_key(metadata['path'])
        assert key.size < 5 * 2 ** 30   # can't copy files bigger than this

        video.filename = get_random_filename()
        dst = Video.get_video_filepath(account, video.filename)
        key.copy(video_bucket.name, dst)
        key.delete()

        ooyala.set_metadata(video.external_id, dict(path=dst, label=account))

    db.session.commit()
示例#8
0
文件: views.py 项目: philpill/romeo
def _source_content_url(assetid):
    streams = ooyala_request('assets', assetid, 'streams')
    return next(s['url'] for s in streams if
                s['stream_type'] == 'single' and
                s['muxing_format'] == 'MP4' and
                s['average_video_bitrate'] > 1200)
示例#9
0
文件: views.py 项目: philpill/romeo
 def get(self, video):
     items = ooyala_request('assets', video.external_id, 'generated_preview_images')
     return dict(image=dict(items=items))