標籤:
http://www.server110.com/apache/201403/6943.html
apache下配置flv拖動
環境:debian apache2 ckplayer
1、安裝apxs工具。
apxs 是Apache的擴充工具,用於編譯一個或多個來源程式或目標代碼檔案為動態共用對象,使之可以用LoadModule指令在運行時載入到Apache 服器中。
作為apache模組的編譯工具,用它來編譯mod_flvx.c檔案。
debian和ubuntu下,apxs被放在apache2-threaded-dev和apache2-prefork-dev裡,安裝任一個即可。
apt-get install apache2-prefork-dev
whereis apxs2 查看安裝路徑
man apxs 如果你想看看這東西怎麼用的話
2、下載mod_flvx.c並進行編譯
wget https://github.com/osantana/mod_flvx/blob/master/mod_flvx.c 或者
wget http://people.apache.org/~pquerna/modules/mod_flvx.c
使用apxs進行編譯,編譯前,請檢查apxs的版本,如果新安裝的基本沒啥問題吧
apxs -c -i -a ./mod_flvx.c
3、在apache的設定檔中增加mod_flvx.so模組,並添加對.flv的處理
在apache的conf.d目錄下建立mod_flvx.conf檔案,並寫入以下內容
LoadModule flvx_module /usr/lib/apache2/modules/mod_flvx.so
AddHandler flv-stream .flv
4、重啟apache
5、如果還不能拖動,則
1)FLV沒有metadata主要畫面格資料
可以使用yamdi或flvtool2為你的flv視頻添加主要畫面格
yamdi -i source.flv -o dest.flv或
flvtool2 -U source.flv
如果沒有yamdi或者flvtool2可apt-get先安裝。
這裡我用flvtool2報錯,於是用了yamdi,沒報錯。據說yamdi效率更高。
2)如果還不能拖動,則嘗試配置播放器。
我這裡用的是ckplayer。
搜了一下ckplayer的配置:http://www.ckplayer.com/view.php?id=82
ckplayer.js裡
(1)ck.setup = ‘1,1,1,1,1,1,0,0,1,2,5‘;的第6個參數,是否使用http流式控制1是/0不是
(2)h的值,h:‘1‘,//播放http視頻流時採用何種拖動方法,0是按主要畫面格,1是按關鍵時間點
(3)q:‘‘,//視頻流拖動時參考函數,預設是start。
關於選擇主要畫面格還是關鍵時間點的區別,預設的是flv是按關鍵時間點,而mp4是按主要畫面格來隨意拖動的,但很多網站是把這二個設定成統一的,要麼都按主要畫面格,要麼都按關鍵時間點。
這裡我執行了(1)。
然後,就好了。。。可以拖動了。。。
轉載請註明原文地址:http://www.server110.com/apache/201403/6943.html
mp4-----------
http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Apache-Version2
Dependencies ¶
We will be using ?apxs2, the APache eXtenSion tool, to build and install the module for the Apache server.
Make sure you have apxs2 installed:
sudo apt-get install apache2-threaded-dev
Download
Download the source of the H264 Streaming Module for Apache.
cd ~wget http://h264.code-shop.com/download/apache_mod_h264_streaming-2.2.7.tar.gztar -zxvf apache_mod_h264_streaming-2.2.7.tar.gz
Build
cd ~/mod_h264_streaming-2.2.7./configure --with-apxs=`which apxs2`makesudo make install
Configuration
Edit the configuration file (in /etc/apache/httpd.conf) so that file requests ending in ".mp4" are handled by the h264_streaming_module.
LoadModule h264_streaming_module /usr/lib/apache2/modules/mod_h264_streaming.soAddHandler h264-streaming.extensions .mp4
Start Apache.
sudo /etc/init.d/apache start
Build & Configuration (CentOS 5.2)
CentOS users can follow these intructions for building the module instead. It uses apxs (instead of apxs2) and httpd (instead of apache).
sudo yum install httpd-devel sudo yum install httpd mod_sslcd ~/mod_h264_streaming-2.2.5./configuremakesudo make installsudo vi /etc/httpd/conf/httpd.conf Add the line ‘AddHandler h264-streaming.extensions .mp4‘ after the line ‘LoadModule h264_streaming_module /usr/lib/httpd/modules/mod_h264_streaming.so‘ sudo /etc/init.d/httpd start
License
This version is free if you agree to the ?noncommercial license. Please mention its use on your website, in the lines of ‘This website uses H264 pseudo video streaming technology by?CodeShop‘.
Our commercial license is very inexpensive, see the following page to check if you need a commercial license.
Testing
Continue to the testing page to verify your setup.
Demo
See ?http://h264-demo.code-shop.com/demo/apache/testlist.html for a demo running Apache.
Apache Module 開發後記由 qyb 在 周二, 2007-02-13 12:14 提交
續上一篇文章
開發出 apache 2.0 的模組以後,又面對著要將其移植到 apache 其他版本的需求,經過這段時間一點點的修補,現在我的模組已經可以同時在 1.3/2.0/2.2 下編譯。甚至在 2.0/Win32 環境下也編譯出了 dll,供在個人PC上做開發的同事使用。
我感覺如果項目不複雜的話,可以學習我這樣把所有的內容放在一個檔案裡面的做法。
最重要的就是利用 MODULE_MAGIC_COOKIE 的定義,把 1.3 和 2.0/2.2 的不同之處融合在一起。例子:
#if MODULE_MAGIC_COOKIE == 0x41503230UL || MODULE_MAGIC_COOKIE == 0x41503232UL #include "util_filter.h"#include "apr_strings.h"module AP_MODULE_DECLARE_DATA foobar_module;#define APLOG_FOOBAR APLOG_ERR,0 #else module MODULE_VAR_EXPORT foobar_module;#define apr_pool_t pool#define apr_table_t table#define apr_pcalloc ap_pcalloc#define apr_table_unset ap_table_unset#define apr_table_set ap_table_set#define apr_table_get ap_table_get#define apr_table_make ap_make_table#define apr_pstrdup ap_pstrdup#define apr_snprintf ap_snprintf#define apr_pstrndup ap_pstrndup#define APLOG_FOOBAR APLOG_ERR #endif /* MODULE_MAGIC_COOKIE == 0x41503230UL */
同樣,模組初始化的部分也這樣針對不同版本定義一下。
這樣主要的功能函數就可以使用同樣的代碼模組,並使用 apr_* 系列函數族了。
之所以要對 APLOG_ERR 做定義,是因為在 1.3 和 2.x 版本中,ap_log_error 和 ap_log_rerror 所使用的參數數目不一致,2.x 的參數要多一個,因此針對 2.x自動增加一個參數——",0"
2.0 和 2.2 有些地方也有小差別,My Code裡面就碰到了 apr_socket_create 的參數不一樣。同樣簡單 #if 就可以處理了。
在 1.3 裡面 module initializer 如果 2.x 裡面的 post_config 會運行兩次,而且2.x 上的這個小技巧無法直接使用了。本來是不影響程式啟動並執行,但還是想出了一個變態的辦法來解決它。module initializer 兩次執行之間的一個重要事件就是 apache 的 daemonize。那樣怎麼來判斷當前進程是否在 daemon 狀態下呢?我的方案是:
/* 小技巧,用於協助 init_module 只執行一次檢查 */#define MAX_FDS 1024int daemon_flag(int fds[MAX_FDS]){ int fd; int newfd; int i; int opt; socklen_t optlen = sizeof(int); int ret = 0; memset(fds, 0, sizeof(int) * MAX_FDS); newfd = fd = socket(AF_INET,SOCK_STREAM,0); while (newfd < MAX_FDS && newfd > 0) { fds[newfd] = 1; newfd = dup(fd); } for (i = 0; i < MAX_FDS; i++) { if (fds[i] == 1) { close(i); } else { if (0 == getsockopt(i, SOL_SOCKET, SO_REUSEADDR, &opt, &optlen)) { fds[i] = -1; //這樣返回以後也知道哪些 fd 被監聽 ret = 1; } } } return ret;}
因為我知道 apache 必然會對監聽通訊端設定 SO_REUSEADDR,所以可如此判斷。
由於 apache2 有了 apr 的支援,幾乎不用修改任何代碼模組就可以在 win32 下編譯。而且只需要 MS 的免費工具就可以了,包括 MSVC C++ Toolkit 2003 和 Platform SDK。設定好 INCLUDE/LIB 路徑後,只需要執行
cl /MD /D "WIN32" /c mod_foobar.c
link /DLL mod_foobar.obj libhttpd.lib libapr.lib
這樣就得到了可被 LoadModule 的 mod_foobar.dll
win32 下我碰到的問題稍微麻煩一些。啟動 apache 無法成功,報告什麼 OPENSSL_Applink 錯誤。看了 openssl 的 FAQ,說什麼要 include 一個 applink.c,但仍然無濟於事。不過查看 applink.c 後發現,它似乎和 IO 庫相關;最後我把以前使用的 stdio 替換成了 openssl 自己的 bio 函數族,該問題就消失了。
openssl 的 win32 庫從這裡下載並安裝
http://httpd.apache.org/docs/current/platform/windows.html#down
Apache 流媒體 拖動模組編譯