Apache 流媒體 拖動模組編譯

來源:互聯網
上載者:User

標籤:

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 流媒體 拖動模組編譯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.