2016-04-07 23 views
0

Webport'ları yapılandırdım, ffmpeg; ve mevcut proje için aşağıdaki Makefile'ı oluşturdum. Ancak, ffmpeg kütüphanesiyle bağlantı kurarak bazı problemlerle karşılaştım.PPAPI'de FFMPEG kitaplığını kullanma: FFmpeg ile Naclports

$ TOOLCHAIN=pnacl make 
    LINK pnacl/Release/client_unstripped.bc 
pnacl/Release/src/client.o: error: undefined reference to 'av_register_all' 
make: *** [pnacl/Release/client_unstripped.bc] Error 1 

sen, ben burada ne yapıyorum yanlış söyleyebilir benim Makefile aşağıda gösterilmiştir:

VALID_TOOLCHAINS:? = Pnacl glibc çınlama-newlib

NACL_SDK_ROOT = $ (abspath $ kazanmak (CurDir) /../ ..)

HEDEF = istemci

OTHERDIR = src

0.123.

INC_DIR = inc

FFMPEG_INC_DIR = ../../toolchain/mac_pnacl/le32-nacl/usr/include

= -I $ (INC_DIR) -I $ (FFMPEG_INC_DIR)

DAHİL

içerir $ (NACL_SDK_ROOT)

CHROME_ARGS + = --allow-NaCI-soket aPI = localhost

LIBS = nacl_io ppapi_cpp PPAPI

/tools/common.mk

CFLAGS = -Wall -g -O2 $ (dahil) -L ../../ araç zinciri/mac_pnacl/le32-NaCI/usr/lib -lavformat \ -lvpx -lvorbisenc -lvorbis log G -ltheoraenc -ltheoradec log G -lmp3lame -lm -pthread -lavcodec -lvpx -lvorbisenc -lvorbis log G \ -ltheoraenc -ltheoradec log G -lmp3lame -lm -pthread -lswresample -lm -lavutil -lm -lavdevice

KAYNAKLARI = -lavfilter $ (OTHERDIR) /tcp_util.cc $ (OTHERDIR) /tpool.cc $ (OTHERDIR) /net.cc $ (OTHERDIR) /rtsp_response.cc \ $ (OTHERDIR) /rtsp.cc $ (OTHERDIR)/rtsp_common. cc \ $ (OTHERDIR) /rtsp_client.cc $ (OTHERDIR) /udp_util.cc \ $ (OTHERDIR) /client.cc

common.mk gelen makroları tarafından oluşturulan

# Yapı kuralları:

$ (foreach src, $ (KAYNAKLARI), $ (eval $ ( COMPILE_RULE, $ (src diyoruz), $ (CFLAGS))))

# PNaCl iş akışı, hem çıkarılmamış hem de sonlandırılmış/soyulmuş bir ikili kullanır. # NaCl'de, yalnızca Sürüm yapılandırmaları için (Debug değil) soyulmuş bir ikili oluşturur. ifneq (, $ (veya $ (findstring pnacl, $ (TOOLCHAIN)), $ (findstring Sürüm, $ (CONFIG)))) $ (eval $ (çağrı LINK_RULE, $ (TARGET) _unstripped, $ (SOURCES), $ (LIBS), $ (DEPS))) $ (eval $ (çağrı STRIP_RULE, $ (TARGET), $ (TARGET) _unstripped)) else $ (eval $ (çağrı LINK_RULE, $ (TARGET), $ (SOURCES)), $ (KÜTÜPHANELERİNİ), $ (DEPS))) endif

$ (eval $ (call NMF_RULE kütüphane olmuştur, nasıl $ (TARGET),))

Ve burada yoludur, sınıf bağlamında kullanılır.topal VPX, vorbis,:

class VideoDecodePack { 
public: 
    VideoDecodePack() { 
     av_register_all(); 
    } 
}; 

class ClientInstance : public pp::Instance { 
public: 
    explicit ClientInstance(PP_Instance instance) : pp::Instance(instance){ 
    cses = InitRtspClientSession(); 
    _videoDecoder = new VideoDecodePack(); 
    } 
... 

cevap

0

Ben ek FFMPEG için kitaplıkların bağlanması ekleyerek bu sorunu çözdük. Ve bağlantılı kütüphanelerin sırasını korumak çok önemlidir.

..... 
... 
TARGET = client 
INC_DIR := inc 

include $(NACL_SDK_ROOT)/tools/common.mk 

DEPS = ppapi_simple nacl_io 
LIBS = ppapi_simple nacl_io ppapi pthread \ 
avformat vpx vorbisenc vorbis ogg theoraenc \ 
theoradec mp3lame m avcodec swresample avutil \ 
avdevice avfilter 

OTHERDIR = src 

CFLAGS = -Wall 
# -I$(INC_DIR) 
SOURCES = $(OTHERDIR)/client.cc 

# Build rules generated by macros from common.mk: 

$(foreach dep,$(DEPS),$(eval $(call DEPEND_RULE,$(dep)))) 
$(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) 
.... 
...