출처: http://bluexmas.tistory.com/273
출처 : RTMPDump
Compiling RTMPdump on Max OS X
Compiling FFmpeg 0.9 with libRTMP and libmp3lame for Intel and ARM CPUs
Compiling FFMPEG 0.6 with RTMP Support for OSX
ffmpeg ndk 빌드 #2 ffmpeg 옵션별 빌드
best-video-player
Fix rtmp double cflags in pkgconfig module
다운로드
RTMPDump 에서 rtmpdump-2.3.tgz 파일 다운로드
압축풀기
$ tar xvfz rtmpdump-2.3.gz
ffmpeg 폴더로 이동 시키기
$ mv rtmpdump-2.3/librtmp ffmpeg-0.10.3
rtmp 라이브러리 컴파일, 설치
$ cd ffmpeg-0.10.3/librtmp
$ make SYS=linux install
$ echo 'export PKG_CONFIG_PATH=/lib/pkgconfig:/usr/local/lib/pkgconfig' | tee -a ~/.bashrc
configure
config.sh 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | export TMPDIR=c:/ffmpegtmp./configure --disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-avdevice \--disable-devices \--disable-filters \--disable-yasm \--enable-network \--enable-protocol=tcp \--enable-demuxer=rtsp \--enable-decoder=h264 \--enable-librtmp |
$ ./config.sh
$ make
testmain.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <stdio.h> #include <stdlib.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavformat/avio.h> int main(int argc, char** argv) { AVFormatContext* context = avformat_alloc_context(); int video_stream_index; av_register_all(); avcodec_register_all(); avformat_network_init(); //if(avformat_open_input(&context, "rtsp://192.168.0.40/vod/mp4:sample.mp4",NULL,NULL) != 0){ //if(avformat_open_input(&context, "rtmp://192.168.0.40/vod/sample.mp4",NULL,NULL) != 0){ //if(avformat_open_input(&context, "d:\\windows\\b.mp4",NULL,NULL) != 0){ //open rtsp return EXIT_FAILURE; } if(avformat_find_stream_info(context,NULL) < 0){ return EXIT_FAILURE; } //search video stream int i; for(i =0;i<context->nb_streams;i++){ if(context->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) video_stream_index = i; } AVPacket packet; av_init_packet(&packet); //open output file AVOutputFormat* fmt = av_guess_format(NULL,"test2.avi",NULL); AVFormatContext* oc = avformat_alloc_context(); oc->oformat = fmt; avio_open2(&oc->pb, "test.avi", AVIO_FLAG_WRITE,NULL,NULL); AVStream* stream=NULL; int cnt = 0; //start reading packets from stream and write them to file av_read_play(context);//play RTSP while(av_read_frame(context,&packet)>=0 && cnt <100){//read 100 frames if(packet.stream_index == video_stream_index){//packet is video if(stream == NULL){//create stream in file stream = avformat_new_stream(oc,context->streams[video_stream_index]->codec->codec); avcodec_copy_context(stream->codec,context->streams[video_stream_index]->codec); stream->sample_aspect_ratio = context->streams[video_stream_index]->codec->sample_aspect_ratio; avformat_write_header(oc,NULL); } packet.stream_index = stream->id; av_write_frame(oc,&packet); cnt++; } av_free_packet(&packet); av_init_packet(&packet); } av_read_pause(context); av_write_trailer(oc); avio_close(oc->pb); avformat_free_context(oc); return (EXIT_SUCCESS); } |
Makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | TARGET = hello3FFMPEGDIR = /home/bluesanta/ffmpeg-0.10.3LIBDIR = /libCC = gccAR = arLD = ldNM = nmRANLIB = ranlibSTRIP = stripINCLUDE = -I.. -I.CFLAGS = -WallLDFFMPEG = -L$(FFMPEGDIR)/libavformat -L$(FFMPEGDIR)/libavcodec -L$(FFMPEGDIR)/libavutil -L$(FFMPEGDIR)/librtmpLDFLAGS = -L$(LIBDIR) $(LDFFMPEG) -lavformat -lavcodec -lavutil -lrtmp -lkernel32 -lcygwin -lm -lgcc -lc -lssl -lz -lcrypto# application fileAPPSOURCES = testmain.cAPPOBJS = $(APPSOURCES:.c=.o)# define the rule.SUFFIXES:.c .o .c.o: @echo Compiling: $< $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<all: appapp: $(APPOBJS) @echo Linking: $(TARGET) $(CC) -o $(TARGET) $(APPOBJS) $(LDFLAGS) $(STRIP) -s $(TARGET)clean: @rm -vf $(APPOBJS) $(TARGET) |
컴파일, 실행
'Programming > C++' 카테고리의 다른 글
| av_free_packet 예제들 (1) | 2016.03.27 |
|---|---|
| [펌] How to: Debug from a DLL Project (0) | 2016.03.26 |
| [펌] pragma에 관한 사용법 (0) | 2016.03.07 |
Posted by 세모아

