多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒體服務器筆記(七)

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒體服務器筆記(七)

來源:程序員人生   發布時間:2015-03-17 08:37:49 閱讀次數:7589次

第7部份

之前已將標準版的Nginx移植到了ARM開發板上面并且運行成功,而我的目的是要利用FFMPEG和NGINX來實現HLS視頻直播,所以還需要在此基礎上添加nginx-rtmp-module模塊。

有了之前的移植經驗,有些工作就好做1些了,但是還是遇到很多的問題,記錄下:

1、用到的源碼包

android-nginx  :  https://bitbucket.org/ntakimura/android-nginx/downloads

增加對rtmp的支持下載nginx-rtmp-module,地址:https://github.com/arut/nginx-rtmp-module#example-nginxconf

openssl  :  http://www.openssl.org/source/

2、配置

我的步驟是:首先將上面的3個源碼包放在了文件夾456下,進入/456/android/nginx目錄下履行配置命令:

auto/configure --crossbuild=android-arm --prefix=/sdcard/nginx-rtmp2 --add-module=/home/wangrui/456/nginx-rtmp-module --with-cc=/home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-gcc --without-pcre --without-http_rewrite_module     --without-http_userid_module --with-cc-opt=-Wno-sign-compare

結果出現問題:

auto/configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option.

添加nginx-rtmp-module模塊需要Openssl library,百度下發現都是需要兩條命令就能夠了:

apt-get install openssl apt-get install libssl-dev

但是我履行時顯示我已安裝了最新版本,都已安裝好了,重試后還是出錯,那就在配置命令中添加:

auto/configure --crossbuild=android-arm --prefix=/sdcard/nginx-rtmp2 --add-module=/home/wangrui/456/nginx-rtmp-module --with-cc=/home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-gcc --without-pcre --without-http_rewrite_module       --without-http_userid_module --with-cc-opt=-Wno-sign-compare --with-openssl=/home/wangrui/456/openssl⑴.0.0q

這樣不會出錯了。

3、make

緊接著履行

make

經過漫長的充滿希望的等待,最后完成終究還是出錯了
/home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libcrypto.a -lz /home/wangrui/local/android-toolchain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a(s23_meth.o): Relocations in generic ELF (EM: 3) /home/wangrui/local/android-toolchain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a(s23_meth.o): Relocations in generic ELF (EM: 3) /home/wangrui/local/android-toolchain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a(s23_meth.o): Relocations in generic ELF (EM: 3) /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a: could not read symbols: File in wrong format collect2: ld returned 1 exit status make[1]: *** [objs/nginx] 毛病 1 make[1]:正在離開目錄 `/home/wangrui/456/android-nginx' make: *** [build] 毛病 2

關鍵毛病在

/home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a: could not read symbols: File in wrong format
趕快百度下,網上給出的答案基本上都是說之前make留下的有文件,影響到了這次的交叉編譯,建議換個新的源碼包重新編譯,但是我每次都是下載的新的源碼包還是出現一樣的毛病,可見我的毛病緣由不在這。

在網上看到1篇文章:

could not read symbols報警

里面的1段話提示了我:

“請肯定在操作系統位數相同的環境下進行編譯,否則刪除原庫文件重新生成“

這個毛病多是由于在編譯nginx和編譯openssl的時候使用了不同的gcc,在編譯openssl的時候可能使用了系統默許的gcc,致使arm環境下辨認不了libssl.a這個靜態庫。

查看下libssl.a的類型:

objdump -a /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a

其中

objdump -a xx.a

可以查看靜態庫文件是32位還是64位類型。

另外對動態庫 xx.so文件的類型查看使用 file 命令就能夠了。

結果顯示:

在歸檔文件 /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a 中: s2_meth.o: 文件格式 elf32-i386 rw-r--r-- 0/0 2148 Mar 5 10:14 2015 s2_meth.o s2_srvr.o: 文件格式 elf32-i386 rw-r--r-- 0/0 13304 Mar 5 10:14 2015 s2_srvr.o s2_clnt.o: 文件格式 elf32-i386 rw-r--r-- 0/0 12740 Mar 5 10:14 2015 s2_clnt.o  。。。。。。  
可見文件格式為
elf32-i386
其實不是ARM環境下的格式,也就是openssl編譯的時候用的是linux下默許的gcc致使出錯。



知道大致的毛病緣由以后,便將openssl單獨交叉編譯下獲得libssl.a文件然后和之前的替換下。

(1)首先編寫配置文件 my_configure_openssl.sh

#!/bin/sh ./config no-asm shared --prefix=/home/wangrui/nginx_ndk/build

(2)履行配置文件以后,進入Makefile,修改Makefile文件

找到CC= gcc,替換為CC= /home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-gcc 找到AR= ar $(ARFLAGS) r,替換為AR= /home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-ar $(ARFLAGS) r 找到RANLIB= /usr/bin/ranlib,替換為RANLIB= /home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-ranlib 找到NM= nm,修改成NM= /home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-nm 找到MAKEDEPPROG= gcc,修改成MAKEDEPPROG= /home/wangrui/local/android-toolchain/bin/arm-linux-androideabi-gcc cp Makefile Makefile.ok

(3)履行 make && make install

這樣在/home/wangrui/nginx_ndk/build/lib目錄下會有libssl.a和libcrypto.a文件

然落后入到/home/wangrui/456/android-nginx/objs目錄下修改Makefile文件:

將其中的兩處

/home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libssl.a /home/wangrui/456/openssl⑴.0.0q/.openssl/lib/libcrypto.a -lz

修改成

/home/wangrui/nginx_ndk/build/lib/libssl.a /home/wangrui/nginx_ndk/build/lib/libcrypto.a -lz

然后重新 make

成功

(4) make install

完成。

(5)修改nginx.conf文件,使其支持rtmp和hls,完全的配置文件以下:

user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } rtmp { server { listen 1935; application myapp { live on; } application hls { live on; hls on; hls_path /data/misc/hls; } } } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /data/misc; add_header Cache-Control no-cache; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ .php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ .php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }

(6)將交叉編譯完成的包移到ARM開發板上面

adb push /sdcard/nginx-rtmp2/ /data/misc/nginx-rtmp/

(7)進入到/data/misc/nginx-rtmp2/sbin目錄下:

./nginx -p /data/misc/nginx-rtmp2 -c conf/nginx.conf

運行 nginx

(8)在ARM開發板閱讀器中輸入

http://localhost/

出現

Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.


總結:1個人弄這之前從沒碰過的移植,真是各處碰壁阿,各種毛病只有你想不到,沒有他出現不了的。不過當編譯通過、安裝成功以后興奮感還是蠻不錯的。繼續加油。。。。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 小说区图片区综合久久88 | 黄a 大片a v 永久免费 | 伊人黄色 | 精品国产一区二区三区久久 | 国产乱码精品一区二区三上 | 一级毛片国产真人永久在线 | 国产精品久久免费 | 亚洲精品色一区二区三区 | 久久久久久久久一次 | 亚洲水蜜桃久久综合网站 | 最新国产在线观看福利91 | 极品欧美 | 校园春色网站 | 亚洲经典一区二区三区 | 中文字幕久久久久一区 | 亚洲成人福利在线观看 | 一级特黄特黄毛片欧美的 | 最近中文字幕经典版在线 | 亚洲丶国产丶欧美一区二区三区 | yellow字幕中文字幕最新 | 动漫精品一级毛片动漫 | 亚州视频一区二区 | 国产一区二区三区在线观看视频 | 波多野结衣中文一区 | 欧美性生交xxxxx久久久 | 欧美九九 | 国产精品久久久久久福利漫画 | 欧美日韩欧美 | 97精品国产福利一区二区三区 | 动漫毛片网站 | 日本午夜小视频 | 欧美亚洲国产激情一区二区 | 老司机深夜福利在线 | 国产一区亚洲欧美成人 | 97影院午夜在线观看琪琪 | xxx护士| 亚洲精品一区二区三区在线看 | 欧美成a | 日韩中文一区 | 国产另类视频 | 日韩欧美视频 |