www.pudn.com > lame3(mp3编码程序和资料).zip > mp3rtp.c
#include#include #include #include #include "lame.h" #include "rtp.h" /* encode (via LAME) to mp3 with RTP streaming of the output. Author: Felix von Leitner mp3rtp ip:port:ttl [lame encoding options] infile outfile example: arecord -b 16 -s 22050 -w | ./mp3rtp 224.17.23.42:5004:2 -b 56 - /dev/null */ struct rtpheader RTPheader; struct sockaddr_in rtpsi; int rtpsocket; void rtp_output(char *mp3buffer,int mp3size) { sendrtp(rtpsocket,&rtpsi,&RTPheader,mp3buffer,mp3size); RTPheader.timestamp+=5; RTPheader.b.sequence++; } void rtp_usage(void) { fprintf(stderr,"usage: mp3rtp ip:port:ttl [encoder options] \n"); exit(1); } char mp3buffer[LAME_MAXMP3BUFFER]; /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ int main(int argc, char **argv) { int i,port,ttl; char *tmp,*Arg; lame_global_flags gf; int iread,imp3; FILE *outf; short int Buffer[2][1152]; if(argc<=2) { rtp_usage(); exit(1); } /* process args */ Arg = argv[1]; tmp=strchr(Arg,':'); if (!tmp) { rtp_usage(); exit(1); } *tmp++=0; port=atoi(tmp); if (port<=0) { rtp_usage(); exit(1); } tmp=strchr(tmp,':'); if (!tmp) { rtp_usage(); exit(1); } *tmp++=0; ttl=atoi(tmp); if (tmp<=0) { rtp_usage(); exit(1); } rtpsocket=makesocket(Arg,port,ttl,&rtpsi); srand(getpid() ^ time(0)); initrtp(&RTPheader); /* initialize encoder */ lame_init(&gf); /* Remove the argumets that are rtp related, and then * parse the command line arguments, setting various flags in the * struct pointed to by 'gf'. If you want to parse your own arguments, * or call libmp3lame from a program which uses a GUI to set arguments, * skip this call and set the values of interest in the gf struct. * (see lame.h for documentation about these parameters) */ for (i=1; i