알리 재미있는 비디오 녹화 비디오 후, 페이지에 공개 또는 다시 다시 깜박 깜박 또한 게시 반환, 업로드 비디오 긴 시간이 소요되는, 등 자신의 서버 및 데이터 다운로드를위한 음악 목록을 교체

그는 가짜 응용 프로그램 비브라토를 만들고,라는 두 개발 프로젝트 종료 Langya 짧은 비디오 . 프로젝트 후 돌아 알리 재미 비디오가 오늘 기록 비디오에 친구를 물었다 플래시 등을 사용하여, 단순히 쉽게 알 수 그것을 기록하는 데 약간의 시간이 걸립니다.

동영상 촬영 후, 페이지에 공개 또는 다시 다시 깜박 깜박 또한 게시 반환 :

적어도 이백명이 문서가 당신이 쓰는 경우에도 질문과 테스트, 재미있는 비디오 코드를 물어 알리 관계자 정확히 같은 기록 부여합니다 후, 모델은 비디오 수익을 기록 후 다시 깜박있을 것입니다. 그 이유는 무엇입니까? 플래시 백 문제는 베타 시작 후, 나는 이상 코드와 다시 완벽한 아, 아무 문제가 아을 제압, 자신의 문제입니다 물론 처음 생각 발견했다.
나중에 모든 코드의 약간 주석 후, 철저한 문제를 찾을 수 : 때 onDestory ()에서, 일부 모델에서 재활용하는 움직 인 알리 자원 회수의 일부, 직접 플래시 백. 그러나! 다른 모델이 다시 깜박에서 회복하지 않습니다. 마지막으로, 재활용 자원의 네 가지 방법, 나는 세를 유지 테스트 사람들의 수백, 그리고 더 이상의 문제 중 하나가 댓글을 달았습니다.
다음과 같이 코드 :

           //销毁回收
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mCompose != null) {
            mCompose.release();
            //根据阿里11.1号更新版本添加
            mCompose = null;
        }
//        if (aliyunIThumbnailFetcher != null) {
//            aliyunIThumbnailFetcher.release();
//        }
        if (mAsyncTaskOnCreate != null) {
            mAsyncTaskOnCreate.cancel(true);
            mAsyncTaskOnCreate = null;
        }
        if (mAsyncTaskResult != null) {
            mAsyncTaskResult.cancel(true);
            mAsyncTaskResult = null;
        }
    }

나는 새 버전,하지 않을 것이다, 너무 빨리 업데이트 알리 재미 비디오 버전을 생각, 또는 것입니다. 그래서 여기 가치가 학습 경험이며, 적어도 당신이 알고있는 경우 특별히 수행하는 방법, 또는 실제 테스트에 대한 복구 과정에서 문제가 거짓말.

비디오 시간이 소요 업로드 :

알리와 개별 모델에 나타납니다 시간의 같은 길이가 작성한 공식 문서. 전제는, 당신은 데모 알리의 해당 버전을 다운로드, 당신의 코드가 완료되었습니다 최적화 실제 테스트가 발생할 수 있습니다 알리의 데모가 느려집니다 수행하는 것입니다. 그래서 싸움을하지 않고 먼저 전화의 매우 낮은 비율이다, 나는 실제 기계를 발견하고 단지 붉은 쌀 테스트 (백 테스트에 참여 오십 개 회사 만이 고객의 한 측면은 틈새 모델을 찾을 수 있음) note7PRO 수있는 두 개 또는 세 분으로 동영상을 업로드 할 수있는 문제 십오초이있다.

음악 목록 서버를 자신의 데이터를 바꾸기 :

MusicLoader 클래스 다음 AliyunSvideoMusic 종속 com.aliyun.apsaravideo.music.music 패키지에서, I는 다음과 변환 :

package com.aliyun.apsaravideo.music.music;

import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import com.aliyun.apsaravideo.music.R;
import com.aliyun.apsaravideo.music.utils.SharedPreferenceUtils;
import com.aliyun.common.utils.CommonUtil;
import com.aliyun.common.utils.StorageUtils;
import com.aliyun.common.utils.ToastUtil;
import com.aliyun.downloader.DownloaderManager;
import com.aliyun.downloader.FileDownloaderCallback;
import com.aliyun.downloader.FileDownloaderModel;
import com.aliyun.svideo.base.http.EffectService;
import com.aliyun.svideo.base.http.MusicFileBean;
import com.google.gson.Gson;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.HttpParams;
import com.lzy.okgo.model.Response;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MusicLoader {
    public static final int EFFECT_MUSIC = 5;       //音乐

    private final MusicQuery mMusicQuery;
    private LoadCallback callback;
    private final Context mContext;
    public EffectService mService = new EffectService();

    public void loadAllMusic() {
        loadLocalMusic();
        loadMoreOnlineMusic();

    }

    public MusicLoader(Context context) {
        mContext = context;
        mMusicQuery = new MusicQuery(context);
    }

    /**
     * 加载本地音乐
     */
    public void loadLocalMusic() {
        mMusicQuery.setOnResProgressListener(new MusicQuery.OnResProgressListener() {
            @Override
            public void onResProgress(ArrayList<MusicFileBean> musics) {
                List<EffectBody<MusicFileBean>> effectBodyList = new ArrayList<>();
                for (MusicFileBean musicFileBean : musics) {
                    effectBodyList.add(new EffectBody<MusicFileBean>(musicFileBean, true));
                }
                if (callback != null) {
                    callback.onLoadLocalMusicCompleted(effectBodyList);
                }
            }
        });
        mMusicQuery.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

    }

    private int pageSize = 25;
    private int pageNo = 1;
    /**
     * 是否正在加载网络音乐
     */
    private boolean isLoadingMusic;
    private boolean isMusicEnd;

    /**
     * 搜索音乐
     */
    public void searchOnlineMusic(String keyWord) {
        loadOnlineMusic(1, 25, keyWord);

    }

    public void loadMoreOnlineMusic() {
        if (isLoadingMusic || isMusicEnd) {
            return;
        }
        loadOnlineMusic(pageNo, pageSize, "");
    }

    /**
     * 加载网络音乐   小肥龙音乐
     */
    List<MusicFileBean> result = new ArrayList<>();

    private void loadOnlineMusic(int pageNo, final int pageSize, final String keyWord) {
        isLoadingMusic = true;
        HttpParams params = new HttpParams();
        params.put("page", pageNo);
        params.put("token", SharedPreferenceUtils.getToken(mContext));
        OkGo.<String>post("http://www.1yft.com/Api/Video/getmusiclist").tag(mContext).params(params).execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                List<MusicLineBean> musicLineBeanList = new ArrayList<>();
                Gson gs = new Gson();
                BaseBean jsonObject = gs.fromJson(response.body(), BaseBean.class);//把JSON字符串转为对象
      /*          musicLineBeanList = (List<MusicLineBean>) gs.fromJson(String.valueOf(response.body()), new TypeToken<List<MusicLineBean>>() {
                }.getType());*/
                musicLineBeanList = (List<MusicLineBean>) jsonObject.data;
                isLoadingMusic = false;
                if (TextUtils.isEmpty(keyWord) && musicLineBeanList.size() < pageSize) {
                    isMusicEnd = true;
                }
                //项目中需要的music
                for (int i = 0; i < musicLineBeanList.size(); i++) {
                    MusicFileBean musicFileBean = new MusicFileBean();
                    musicFileBean.setMusicId(musicLineBeanList.get(i).getId());
                    musicFileBean.setTitle(musicLineBeanList.get(i).getMusic_name());
                    musicFileBean.setArtist(musicLineBeanList.get(i).getMusic_author());
                    musicFileBean.setImage(musicLineBeanList.get(i).getMusic_image());
                    musicFileBean.setPath(musicLineBeanList.get(i).getMusic_url());
                    musicFileBean.setDuration(Integer.parseInt(String.valueOf(Math.round(Double.parseDouble(musicLineBeanList.get(i).getMusic_second())))));
                    result.add(musicFileBean);
                }
                List<EffectBody<MusicFileBean>> effectBodyList = new ArrayList<>();
                List<FileDownloaderModel> modelsTemp = DownloaderManager.getInstance().getDbController().getResourceByType(EFFECT_MUSIC);

                for (MusicFileBean musicFileBean : result) {
                    EffectBody<MusicFileBean> effectBody = new EffectBody<>(musicFileBean, false);
                    for (FileDownloaderModel fileDownloaderModel : modelsTemp) {
                        if (musicFileBean.getMusicId().equals(fileDownloaderModel.getDownload()) && new File(fileDownloaderModel.getPath()).exists()) {
                            musicFileBean.setPath(fileDownloaderModel.getPath());
                            effectBody.setLocal(true);
                        }
                    }
                    effectBodyList.add(effectBody);
                }
                if (callback != null) {
                    if (TextUtils.isEmpty(keyWord)) {
                        callback.onLoadNetMusicCompleted(effectBodyList);
                    } else {
                        callback.onSearchNetMusicCompleted(effectBodyList);
                    }

                }
                MusicLoader.this.pageNo++;
                MusicLoader.this.pageSize++;
            }

            @Override
            public void onError(Response<String> response) {
                super.onError(response);
                isLoadingMusic = false;
            }
        });
    }

    /**
     * 下载音乐
     *
     * @param musicFileBean
     * @param callback
     */
    public void downloadMusic(final MusicFileBean musicFileBean, final FileDownloaderCallback callback) {

        if (!CommonUtil.hasNetwork(mContext)) {
            ToastUtil.showToast(mContext, R.string.aliyun_network_not_connect);
            return;
        }
        if (CommonUtil.SDFreeSize() < 10 * 1000 * 1000) {
            Toast.makeText(mContext, R.string.aliyun_no_free_memory, Toast.LENGTH_SHORT).show();
            return;
        }

        /*
         * 下载地址通过musicId进行比对
         * */

        String url = "";
        for (int i = 0; i < result.size(); i++) {
            if (musicFileBean.musicId.equals(result.get(i).getMusicId())) {
                url = result.get(i).getPath();
            }
        }
        if (TextUtils.isEmpty(url)) {
            ToastUtil.showToast(mContext, "播放地址为空");
            return;
        }
        final FileDownloaderModel downloaderModel = new FileDownloaderModel();
        downloaderModel.setUrl(url);
        downloaderModel.setDownload(musicFileBean.getMusicId());
        downloaderModel.setName(musicFileBean.title);
        downloaderModel.setIsunzip(0);
        downloaderModel.setDuration(musicFileBean.duration);
        downloaderModel.setPath(StorageUtils.getFilesDirectory(mContext) + "/music/" + musicFileBean.title);
        downloaderModel.setDescription(musicFileBean.artist);
        downloaderModel.setEffectType(EFFECT_MUSIC);
        if (downloaderModel == null) {
            Log.e("MusicLoader", "downloaderModel is null");
        }
        final FileDownloaderModel model = DownloaderManager.getInstance().addTask(downloaderModel, url);
        if (model == null) {
            Log.e("MusicLoader", "model is null");
        }
        if (DownloaderManager.getInstance().isDownloading(model.getTaskId(), model.getPath())) {
            return;
        }
        DownloaderManager.getInstance().startTask(model.getTaskId(), new FileDownloaderCallback() {
            @Override
            public void onFinish(int downloadId, String path) {
                callback.onFinish(downloadId, path);
            }

            @Override
            public void onStart(int downloadId, long soFarBytes, long totalBytes, int preProgress) {
                callback.onStart(downloadId, soFarBytes, totalBytes, preProgress);
            }

            @Override
            public void onProgress(int downloadId, long soFarBytes, long totalBytes, long speed,
                                   int progress) {
                callback.onProgress(downloadId, soFarBytes, totalBytes, speed, progress);
            }

            @Override
            public void onError(BaseDownloadTask task, Throwable e) {
                ToastUtil.showToast(mContext, R.string.aliyun_download_failed);
                DownloaderManager.getInstance().deleteTaskByTaskId(model.getTaskId());
                DownloaderManager.getInstance().getDbController().deleteTask(model.getTaskId());
                callback.onError(task, e);
            }
        });
    }

    public interface LoadCallback {
        void onLoadLocalMusicCompleted(List<EffectBody<MusicFileBean>> loacalMusic);

        void onLoadNetMusicCompleted(List<EffectBody<MusicFileBean>> netMusic);

        void onSearchNetMusicCompleted(List<EffectBody<MusicFileBean>> result);

    }

    public void setCallback(LoadCallback callback) {
        this.callback = callback;
    }
}

MusicFileBean 카테고리 :

package com.aliyun.svideo.base.http;

public class MusicFileBean {
    public MusicFileBean(String title, String artist, String musicId,String image) {
        this.title = title;
        this.artist = artist;
        this.musicId = musicId;
        this.image = image;
    }

    public MusicFileBean() {
    }

    /**
     * id标识
     */
    public int id;
    /**
     * 显示名称
     */
    public String title;
    /**
     * 文件名称
     */
    public String displayName;
    /**
     * 音乐文件的路径
     */
    public String path;
    /**
     * 媒体播放总时间
     */
    public int duration;
    /**
     * 艺术家
     */
    public String artist;
    /**
     * 音乐id
     */
    public String musicId;
    /**
     * 音乐图片地址
     */
    public String image;
    public long size;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public int getDuration() {
        return duration;
    }

    public void setDuration(int duration) {
        this.duration = duration;
    }

    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public String getMusicId() {
        return musicId;
    }

    public void setMusicId(String musicId) {
        this.musicId = musicId;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}
게시 38 개 원래 기사 · 원의 찬양 (11) · 전망 8783

추천

출처blog.csdn.net/u013750244/article/details/104675132