cocos2d-x 下载网络视频、音乐保存到沙盒

2015.12.19
在此前完成的一个APP中有下载网络视频、音乐的客户需求,我自己封装了一个类。希望能够帮到大家。我使用的cocos2d-x的版本是3.4。

Downloader

这是cocos2d封装的一个用于下载网络数据的类,支持同步以及异步下载。更详细的类方法大家可以进去看。
使用时加上头文件。#include “extensions/assets-manager/Downloader.h”

实际调用:

第一个参数:音乐名的字符串,例如”song.mp3”
第二个参数:连接地址,例如”www.fffffffffffff.mp3”
HttpDownLoadingHelper::getInstance()->DownloadMusicToSandBox(“song.mp3”, “www.fffffffffffff.mp3”);

以下将我封装的HttpDownLoadingHelper类源码贴上,下载音乐和下载视频的用法是一样。

HttpDownLoadingHelper.h

#include <stdio.h>
#include "extensions/assets-manager/Downloader.h"
#include "cocos2d.h"
USING_NS_CC;

typedef std::function<void(int progress)> myProgressCallback;

class HttpDownLoadingHelper : public Node
{
public:
    virtual bool init();
    CREATE_FUNC(HttpDownLoadingHelper);
    static HttpDownLoadingHelper *getInstance();
public:
    //video
    void DownloadVideoToSandBox(std::string videoNameStirng,std::string urlLink);
    //music
    void DownloadMusicToSandBox(std::string musicNameStirng,std::string urlLink);

private:
    //video
    void errorCallback(const cocos2d::extension::Downloader::Error& error);
    void VideoprogressCallback(double totalToDownload, double nowDownloaded, const std::string& url, const std::string& customId);
    void VideosuccessCallback(const std::string& url, const std::string& path, const std::string& customId);

   //music
    void MusicprogressCallback(double totalToDownload, double nowDownloaded, const std::string& url, const std::string& customId);
    void MusicerrorCallback(const cocos2d::extension::Downloader::Error& error);
    void MusicsuccessCallback(const std::string& url, const std::string& path, const std::string& customId);

private:
    std::shared_ptr<cocos2d::extension::Downloader> _myVideoDownloader;
    std::shared_ptr<cocos2d::extension::Downloader> _myMusicDownloader;
};

HttpDownLoadingHelper.cpp

#include "HttpDownLoadingHelper.hpp"
#include "XMLUIVideoPlayer.hpp"
#include "XMLUIMusicPlayer.hpp"
static HttpDownLoadingHelper *g_instance = NULL;
//static int g_imageCount = 1;

HttpDownLoadingHelper *HttpDownLoadingHelper::getInstance()
{
    if (g_instance == NULL) {
        g_instance = HttpDownLoadingHelper::create();
        g_instance->retain();
    }
    return g_instance;
}

bool HttpDownLoadingHelper::init()
{
    if ( !Node::init() )
    {
        return false;
    }

    return true;
}
void HttpDownLoadingHelper::DownloadVideoToSandBox(std::string videoNameStirng,std::string urlLink)
{
    _myVideoDownloader = std::shared_ptr<cocos2d::extension::Downloader>(new cocos2d::extension::Downloader);
//    std::shared_ptr<cocos2d::extension::Downloader> myDownloader(new cocos2d::extension::Downloader);

    _myVideoDownloader->setErrorCallback(std::bind(&HttpDownLoadingHelper::errorCallback, g_instance, std::placeholders::_1));

    _myVideoDownloader->setProgressCallback(std::bind(&HttpDownLoadingHelper::VideoprogressCallback, g_instance, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));

    _myVideoDownloader->setSuccessCallback(std::bind(&HttpDownLoadingHelper::VideosuccessCallback, g_instance, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));

    _myVideoDownloader->setConnectionTimeout(5);

    std::string path = FileUtils::getInstance()->getWritablePath() + videoNameStirng;

    std::string remote = urlLink;

    cocos2d::log("Downloading '%s' into '%s'", remote.c_str(), path.c_str());

    _myVideoDownloader->downloadAsync(remote, path, videoNameStirng);
}

void HttpDownLoadingHelper::errorCallback(const cocos2d::extension::Downloader::Error& error)
{
    cocos2d::log("error downloading: %s - %s", error.url.c_str(), error.message.c_str());
}

void HttpDownLoadingHelper::VideoprogressCallback(double totalToDownload, double nowDownloaded, const std::string& url, const std::string& customId)
{
    cocos2d::log("%s",customId.c_str());
    cocos2d::log("video(%s) download progress: %d%% - %s",customId.c_str(), (int)((nowDownloaded/totalToDownload)*100), url.c_str());
    XMLUIVideoPlayer::SetDownloadProgress({
        MAX(1,static_cast<float>((int)((nowDownloaded/totalToDownload)*100))),
        customId
    });
}

void HttpDownLoadingHelper::VideosuccessCallback(const std::string& url, const std::string& path, const std::string& customId)
{
    cocos2d::log("download finished: %s", path.c_str());
}

//music
void HttpDownLoadingHelper::DownloadMusicToSandBox(std::string musicNameStirng,std::string urlLink)
{
    _myMusicDownloader = std::shared_ptr<cocos2d::extension::Downloader>(new cocos2d::extension::Downloader);

    _myMusicDownloader->setErrorCallback(std::bind(&HttpDownLoadingHelper::MusicerrorCallback, g_instance, std::placeholders::_1));

    _myMusicDownloader->setProgressCallback(std::bind(&HttpDownLoadingHelper::MusicprogressCallback, g_instance, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));

    _myMusicDownloader->setSuccessCallback(std::bind(&HttpDownLoadingHelper::MusicsuccessCallback, g_instance, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));

    _myMusicDownloader->setConnectionTimeout(5);

    std::string path = FileUtils::getInstance()->getWritablePath() + musicNameStirng;

    std::string remote = urlLink;

    cocos2d::log("Downloading '%s' into '%s'", remote.c_str(), path.c_str());

    _myMusicDownloader->downloadAsync(remote, path, musicNameStirng);

}
void HttpDownLoadingHelper::MusicprogressCallback(double totalToDownload, double nowDownloaded, const std::string& url, const std::string& customId)
{
    cocos2d::log("music(%s) download progress: %d%% - %s",customId.c_str(), (int)((nowDownloaded/totalToDownload)*100), url.c_str());

    XMLUIMusicPlayer::MusicSetDownloadProgress({
        MAX(1,static_cast<float>((int)((nowDownloaded/totalToDownload)*100))),
        customId
    });
}
void HttpDownLoadingHelper::MusicerrorCallback(const cocos2d::extension::Downloader::Error& error)
{
    cocos2d::log("error downloading: %s - %s", error.url.c_str(), error.message.c_str());

}
void HttpDownLoadingHelper::MusicsuccessCallback(const std::string& url, const std::string& path, const std::string& customId)
{
    cocos2d::log("download finished: %s", path.c_str());
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值