根據srt-master提供文件收發Demo(sendfile,recvfile)
1.構建發送服務
./sendfile
username@Ubuntu:~/srt/srt-master$ ./sendfile
server is ready at port: 9000
2.構建接收服務
sample-usage: recvfile server_ip server_port remote_filename local_filename
./recvfile 4.25.10.131 9000 output.ts output-tes.ts
3.接收完成流程
username@username-VirtualBox:~/workspace/srt-master$ ./recvfile 4.25.10.131 9000 output.ts output-tes.ts
09:00:41.797566/recvfile.N: SRT.c: Connection established to: 4.25.10.131:9000
speed = 0.0100161Mbits/sec
loss = 0pkt (0%)
接收完成後會在接收方存儲一份output-tes.ts文件,此Demo主要實現srt的接收和發送流程,簡單的調用srt-api實現。
#ifndef _WIN32
void* sendfile(void* usocket)
#else
DWORD WINAPI sendfile(LPVOID usocket)
#endif
{
SRTSOCKET fhandle = *(SRTSOCKET*)usocket;
delete (SRTSOCKET*)usocket;
// aquiring file name information from client
char file[1024];
int len;
if (SRT_ERROR == srt_recv(fhandle, (char*)&len, sizeof(int)))
{
cout << "recv: " << srt_getlasterror_str() << endl;
return 0;
}
if (SRT_ERROR == srt_recv(fhandle, file, len))
{
cout << "recv: " << srt_getlasterror_str() << endl;
return 0;
}
file[len] = '\0';
// open the file (only to check the size)
fstream ifs(file, ios::in | ios::binary);
ifs.seekg(0, ios::end);
int64_t size = ifs.tellg();
//ifs.seekg(0, ios::beg);
ifs.close();
// send file size information
if (SRT_ERROR == srt_send(fhandle, (char*)&size, sizeof(int64_t)))
{
cout << "send: " << srt_getlasterror_str() << endl;
return 0;
}
SRT_TRACEBSTATS trace;
srt_bstats(fhandle, &trace, true);
// send the file
int64_t offset = 0;
if (SRT_ERROR == srt_sendfile(fhandle, file, &offset, size, SRT_DEFAULT_SENDFILE_BLOCK))
{
cout << "sendfile: " << srt_getlasterror_str() << endl;
return 0;
}
srt_bstats(fhandle, &trace, true);
cout << "speed = " << trace.mbpsSendRate << "Mbits/sec" << endl;
int losspercent = 100*trace.pktSndLossTotal/trace.pktSent;
cout << "loss = " << trace.pktSndLossTotal << "pkt (" << losspercent << "%)\n";
srt_close(fhandle);
//ifs.close();
#ifndef _WIN32
return NULL;
#else
return 0;
#endif
}
發送文件主要調用srtcore,srt_c_api.c中的srt_sendfile接口
接收文件主要調用srtcore,srt_c_api.c中的srt_recvfile接口