출처: 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 = hello3 FFMPEGDIR = /home/bluesanta/ffmpeg-0.10.3 LIBDIR = /lib CC = gcc AR = ar LD = ld NM = nm RANLIB = ranlib STRIP = strip INCLUDE = -I.. -I. CFLAGS = -Wall LDFFMPEG = -L$(FFMPEGDIR)/libavformat -L$(FFMPEGDIR)/libavcodec -L$(FFMPEGDIR)/libavutil -L$(FFMPEGDIR)/librtmp LDFLAGS = -L$(LIBDIR) $(LDFFMPEG) -lavformat -lavcodec -lavutil -lrtmp -lkernel32 -lcygwin -lm -lgcc -lc -lssl -lz -lcrypto # application file APPSOURCES = testmain.c APPOBJS = $(APPSOURCES:.c=.o) # define the rule .SUFFIXES:.c .o .c.o: @echo Compiling: $< $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< all: app app: $(APPOBJS) @echo Linking: $(TARGET) $(CC) -o $(TARGET) $(APPOBJS) $(LDFLAGS) $(STRIP) -s $(TARGET) clean: @rm -vf $(APPOBJS) $(TARGET) |
컴파일, 실행
'Programming > C++' 카테고리의 다른 글
av_free_packet 예제들 (0) | 2016.03.27 |
---|---|
[펌] How to: Debug from a DLL Project (0) | 2016.03.26 |
[펌] pragma에 관한 사용법 (0) | 2016.03.07 |
Posted by 세모아