以下に、単一品質の mpd ファイルの最初の 7 つのチャンクと、その特定の品質のベース URL mp4 をダウンロードするサンプル コードを記述しました。m4s チャンクを文字列のキューに入れています。最初の繰り返しで特定の品質のmp4セグメントがあり、その後の繰り返しで同じ品質のm4sチャンクがあるキューがあります今、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;
}