提交 840fd241 authored 作者: blu's avatar blu

init

上级 29ec8fc8
...@@ -28,7 +28,7 @@ class PacketProducer: public TinyThread { ...@@ -28,7 +28,7 @@ class PacketProducer: public TinyThread {
private: private:
void *pPubContext = NULL; // for packets publishing void *pPubContext = NULL; // for packets publishing
void *pPublisher = NULL; void *pPublisher = NULL;
AVFormatContext *pAVFormatInput = NULL; AVFormatContext *pAVFormatInput = NULL;
string urlIn; string urlIn;
int *streamList = NULL, numStreams = 0; int *streamList = NULL, numStreams = 0;
......
...@@ -27,8 +27,6 @@ namespace AVPacketSerializer { ...@@ -27,8 +27,6 @@ namespace AVPacketSerializer {
int encode(AVPacket &pkt, char **bytes) { int encode(AVPacket &pkt, char **bytes) {
int cnt = 0; int cnt = 0;
//data //data
char mark_s[] = PS_MARK_S;
char mark_e[] = PS_MARK_E;
int wholeSize = strlen(PS_MARK_S) + sizeof(pkt.size) + pkt.size; int wholeSize = strlen(PS_MARK_S) + sizeof(pkt.size) + pkt.size;
//side data //side data
wholeSize +=sizeof(pkt.side_data_elems); wholeSize +=sizeof(pkt.side_data_elems);
...@@ -42,7 +40,7 @@ namespace AVPacketSerializer { ...@@ -42,7 +40,7 @@ namespace AVPacketSerializer {
wholeSize += sizeof(pkt.pts) * 5 + sizeof(pkt.flags) + sizeof(pkt.stream_index) + sizeof(wholeSize) + strlen(PS_MARK_E); wholeSize += sizeof(pkt.pts) * 5 + sizeof(pkt.flags) + sizeof(pkt.stream_index) + sizeof(wholeSize) + strlen(PS_MARK_E);
*bytes = (char*)malloc(wholeSize); *bytes = (char*)malloc(wholeSize);
memcpy((*bytes)+cnt, mark_s, strlen(PS_MARK_S)); memcpy((*bytes)+cnt, PS_MARK_S, strlen(PS_MARK_S));
cnt += strlen(PS_MARK_S); cnt += strlen(PS_MARK_S);
// data // data
memcpy((*bytes)+cnt, &(pkt.size), sizeof(pkt.size)); memcpy((*bytes)+cnt, &(pkt.size), sizeof(pkt.size));
...@@ -80,7 +78,7 @@ namespace AVPacketSerializer { ...@@ -80,7 +78,7 @@ namespace AVPacketSerializer {
cnt+=sizeof(pkt.stream_index); cnt+=sizeof(pkt.stream_index);
memcpy((*bytes )+cnt,&wholeSize, sizeof(wholeSize)); memcpy((*bytes )+cnt,&wholeSize, sizeof(wholeSize));
cnt+=sizeof(wholeSize); cnt+=sizeof(wholeSize);
memcpy((*bytes )+cnt, mark_e, strlen(PS_MARK_E)); memcpy((*bytes )+cnt, PS_MARK_E, strlen(PS_MARK_E));
cnt+=strlen(PS_MARK_E); cnt+=strlen(PS_MARK_E);
av_log_set_level(AV_LOG_DEBUG); av_log_set_level(AV_LOG_DEBUG);
assert(cnt == wholeSize); assert(cnt == wholeSize);
...@@ -93,9 +91,7 @@ namespace AVPacketSerializer { ...@@ -93,9 +91,7 @@ namespace AVPacketSerializer {
//AVPacket *pkt = (AVPacket*)malloc(sizeof(AVPacket)); //AVPacket *pkt = (AVPacket*)malloc(sizeof(AVPacket));
int ret = 0; int ret = 0;
int got = 0; int got = 0;
char mark_s[] = PS_MARK_S; if(memcmp(PS_MARK_E, bytes + len - strlen(PS_MARK_E), strlen(PS_MARK_E)) != 0 || memcmp(PS_MARK_S, bytes, strlen(PS_MARK_S))) {
char mark_e[] = PS_MARK_E;
if(memcmp(mark_e, bytes + len - strlen(PS_MARK_E), strlen(PS_MARK_E)) != 0 || memcmp(mark_s, bytes, strlen(PS_MARK_S))) {
av_log(NULL, AV_LOG_ERROR, "invalid packet"); av_log(NULL, AV_LOG_ERROR, "invalid packet");
return -1; return -1;
} }
...@@ -148,12 +144,10 @@ void mqPacketFree(void *data, void*hint) { ...@@ -148,12 +144,10 @@ void mqPacketFree(void *data, void*hint) {
} }
namespace AVFormatCtxSerializer { namespace AVFormatCtxSerializer {
int _encode(AVFormatContext *ctx, char **bytes) { int encode(AVFormatContext *ctx, char **bytes) {
int ret = 0; int ret = 0;
int wholeSize = 0; int wholeSize = 0;
int got = 0; int got = 0;
char mark_s[] = PS_MARK_S;
char mark_e[] = PS_MARK_E;
// calc total size // calc total size
wholeSize += strlen(PS_MARK_S); wholeSize += strlen(PS_MARK_S);
// num streams // num streams
...@@ -182,11 +176,42 @@ namespace AVFormatCtxSerializer { ...@@ -182,11 +176,42 @@ namespace AVFormatCtxSerializer {
got += sizeof(AVCodecParameters); got += sizeof(AVCodecParameters);
} }
memcpy((*bytes) + got, &wholeSize, sizeof(wholeSize)); memcpy((*bytes) + got, &wholeSize, sizeof(wholeSize));
got += sizeof(wholeSize);
memcpy((*bytes) + got, PS_MARK_E, strlen(PS_MARK_E));
}
int decode(char *bytes, int len, AVFormatContext *pCtx) {
int ret = 0;
int got = 0;
if(memcmp(PS_MARK_S, bytes+got, strlen(PS_MARK_S)) !=0 && memcmp(PS_MARK_E, bytes+len-strlen(PS_MARK_E), strlen(PS_MARK_E)) != 0) {
av_log(NULL, AV_LOG_ERROR, "invalid packet");
return -1;
}
got+=strlen(PS_MARK_S);
memcpy(&ret, bytes+got, sizeof(ret));
got +=sizeof(ret);
pCtx->streams = (AVStream **)malloc(sizeof(AVStream *) * ret);
pCtx->nb_streams = ret;
for(int i = 0; i < ret; i++) {
pCtx->streams[i] = (AVStream*)malloc(sizeof(AVStream));
memcpy(pCtx->streams[i], bytes+got, sizeof(AVStream));
got+=sizeof(AVStream);
pCtx->streams[i]->codecpar = (AVCodecParameters*)malloc(sizeof(AVCodecParameters));
memcpy(pCtx->streams[i]->codecpar, bytes+got, sizeof(AVCodecParameters));
got +=sizeof(AVCodecParameters);
}
memcpy(&ret, bytes+got, sizeof(ret));
assert(ret == len);
return ret;
} }
int _decode(char *bytes, int len) { void freeCtx(AVFormatContext *pCtx) {
for(int i = 0; i < pCtx->nb_streams; i++) {
free(pCtx->streams[i]->codecpar);
free(pCtx->streams[i]);
}
free(pCtx->streams);
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论