下面我已经编写了示例代码来下载单个质量的前7个mpd文件以及该特定质量的基本URL mp4。我将m4s块放在字符串队列中。如何播放下载的数据。 我有队列,其中第一次迭代是特定质量的mp4段 然后在随后的迭代中我有相同质量的m4块 现在我想使用ffmpeg或gstreamer来播放这个队列缓冲区。我可以这样做吗 单独我可以通过下载单个mp4(mpd结构中的特殊质量)然后使用cat与m4s块连接然后播放来播放。
在开源libdash中如何做,如果有人有任何想法。
请指导。
#include <iostream>
#include <string.h>
#include <curl/curl.h>
#include <queue>
#include <cstdlib>
using namespace std;
string data;
std::queue<string> myqueue;
int size =0;
size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{
printf("size = %d\n\n\n",size);
printf("size nmemb = %d\n\n\n\n\n",nmemb);
for (int c = 0; c<size*nmemb; c++)
{
data.push_back(buf[c]);
}
myqueue.push (data);
return size*nmemb; //tell curl how many bytes we handled
}
int main()
{
CURL* curl; //our curl object
char url_firstpart[80];// = NULL;
char bitwide_chunk[10];
char buffer[10];
curl_global_init(CURL_GLOBAL_ALL); //pretty obvious
curl = curl_easy_init();
for(int i=0;i<7;i++)
{
strcpy(url_firstpart,"http://www-itec.uni- klu.ac.at/ftp/datasets/mmsys12/Valkaama/valkaama_1s/valkaama_1s_50kbit/valkaama_1s");
string str = to_string(i);
char * writable = new char[str.size() + 1];
std::copy(str.begin(), str.end(), writable);
writable[str.size()] = '\0';
strcat(writable,".m4s");
printf("concanated chink is %s\n",writable);
strcat(url_firstpart,bitwide_chunk);
puts(url_firstpart);
curl_easy_setopt(curl, CURLOPT_URL,url_firstpart);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_perform(curl);
}
size = myqueue.size();
printf("Final size of queue = %d\n",size);
cout << endl << data << endl;
cin.get();
curl_easy_cleanup(curl);
curl_global_cleanup();
return 0;
}