導航:首頁 > 操作系統 > 流媒體伺服器android

流媒體伺服器android

發布時間:2023-06-02 10:54:38

A. android 直播怎麼實現的

android 的直播,主要使用的是camera採集的數據推流到伺服器上,在客戶端播放camera採集的數據。採用SurfaceView+ SurfaceTexture來顯示camera數據, SurfaceTexture在接收圖像流之後,可以進行二次處理,比如(加字體水印), 處理完畢後再送給另一個SurfaceView用於顯示.
先說說,android端採集攝像頭數據,這個網上有很多的資料,可以網路下。這里可以在回調函數OnPreviewFrame(byte[] data,Camera cma)中獲取攝像頭數據data.
關鍵是如何把data傳輸到伺服器,要實現這個目標,我使用ffmpeg 來解決這個為題。在android 工程創建jni文件夾,使用jni調用。native函數如下:
// 在OnPreviewFrame中調用
public native void push(byte[] data);
// 可以在OnSurfcaeChanged()中調用. 在jni中初始化輸出路徑.
public native int initPush(String outputurl,int width,int height);
在jni 層的代碼如下:
static void ffmpeg_init() {
avcodec_register_all();
12

#if CONFIG_AVDEVICE
avdevice_register_all();
#endif
avfilter_register_all();
av_register_all();

avformat_network_init();
1234

}
static int avinit(int width, int height){
/**編碼開始*/
int ret;
if(codec==NULL){

yuv_width = width;
yuv_height = height;
y_length = width * height;
uv_length = width * height / 4;
LOGI("init start\n");

codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec) {
LOGI("Codec not found\n");
return -1;
}

c = avcodec_alloc_context3(codec);
if (!c) {
LOGI("Could not allocate video codec context\n");
return -1;
}

/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = width;
c->height = height;
/* frames per second */
//c->time_base = (AVRational){1,5};
c->time_base.den = 25;
c->time_base.num = 1;
/* emit one intra frame every ten frames
* check frame pict_type before passing frame
* to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
* then gop_size is ignored and the output of encoder
* will always be I frame irrespective to gop_size
*/
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
c->gop_size = 10;
c->max_b_frames = 10;
c->pix_fmt = AV_PIX_FMT_YUV420P;
//av_opt_set(c->priv_data, "preset", "slow", 0);
av_opt_set(c->priv_data, "preset", "superfast", 0);
av_opt_set(c->priv_data, "tune", "zerolatency", 0);
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
LOGI("Could not open codec\n");
return -1;
}
LOGI("init end 1\n");

video_st = avformat_new_stream(ofmt_ctx, codec);
if (video_st == NULL) {
LOGI("video_st == NULL\n");
return -1;
}
video_st->time_base.num = 1;
video_st->time_base.den = 25;
video_st->codec = c;

return 0;
}
/**編碼結束*/


}
JNIEXPORT jint JNICALL Java_com_example_directvideo_MainActivity_initPush
(JNIEnv *env, jobject obj,jstring out ,jint width, jint height){

int ret ;
ffmpeg_init();
const char* str = //"rtmp://192.168.1.102:1935/myapp/test1";
//"/storage/emulated/0/zsy.mp4";
(*env)->GetStringUTFChars(env, out, 0);
LOGI("%s %d %d ", str,width,height);
//AVOutputFormat *ofmt = NULL;
//AVFormatContext *ofmt_ctx = NULL;
//Output
avformat_alloc_output_context2(&ofmt_ctx, NULL, "flv", str); //RTMP
//avformat_alloc_output_context2(&ofmt_ctx, NULL, "mpegts", output_str);//UDP
if (!ofmt_ctx) {
LOGI( "Could not create output context\n");
ret = AVERROR_UNKNOWN;
goto end;
}
ret = avinit(width, height);

ofmt = ofmt_ctx->oformat;
//Open output URL
if (!(ofmt->flags & AVFMT_NOFILE)) {
ret = avio_open(&ofmt_ctx->pb, str, AVIO_FLAG_WRITE);
if (ret < 0) {
LOGI( "Could not open output URL '%s'", str);
goto end;
}
}
ret = avformat_write_header(ofmt_ctx, NULL);
if (ret < 0) {
LOGE( "Error occurred when opening output URL\n");
goto end;
}
(*env)->ReleaseStringUTFChars(env, out, str);
if (ret < 0 && ret != AVERROR_EOF) {
LOGI( "Error occurred.\n");
return ret;
}

intited = 1;
return 0;
04142434445

}
注意傳輸視頻流時,必須使用h264編碼器進行編碼。初始化成功後,便可使用push()來推送每一幀的camera數據到伺服器上。
本人在ubuntu系統中,利用ngnix + rtmp搭建了簡易的流媒體伺服器。
在pc機上,使用ffplay rtmp://192.168.1.102:1935/myapp/test1的命令來播放視屏.

http://blog.csdn.net/zsy2012919331/article/details/52444332

B. android 直播怎麼實現的

Adboe的Red5流媒體伺服器免費並且是開源的,與Flash搭配的時候可謂是天生一對,但使用Java和Android作為客戶端調用卻可謂一波三折。

Adobe的Red5源代碼里有一個RTMPClient的類,這個類在使用上其實不復雜,但卻沒辦法成功調用。觀察日誌,發現是連接成功後在開始創建流的時候,服務端把連接斷開了。我能想到的解釋就是可能公司現在所使用的Red5伺服器的版本與這個RTMPClient不兼容。

C. android如何播放RTMP協議視頻流

Adboe的Red5流媒體伺服器免費並且是開源的,與Flash搭配的時候可謂是天生一對,但使用Java和Android作為客戶端調用卻可謂一波三折。

Adobe的Red5源代碼里有一個RTMPClient的類,這個類在使用上其實不復雜,但卻沒辦法成功調用。觀察日誌,發現是連接成功後在開始創建流的時候,服務端把連接斷開了。我能想到的解釋就是可能公司現在所使用的Red5伺服器的版本與這個RTMPClient不兼容。

D. 如何在Android實現一個流媒體伺服器

現在,越來越多的朋友用上了寬頻,如果僅僅只是將寬頻用來下載軟體、觀看電影,那未免太浪費了。假如你的機器性能還不錯的話,是否設想過將它架設為一台流媒體伺服器。這樣就可以與親朋好友共享美妙的音樂或最新的電影,那種網路DJ的感受可真是無與倫比呀。 就現在的主流計算機硬體而言,搭建一台網路流媒體伺服器應該沒有什麼困難,只要滿足Pentium III 450MHz、256MB內存容量、足夠的硬碟空間即可。但如果你還沒有用上寬頻,那麼還是放棄吧,否則那時斷時續的傳播質量會讓朋友們罵死你。

架設網路流媒體伺服器

所謂流媒體技術,是指將連續的影像和聲音信息經過壓縮處理後放在網站伺服器上,讓用戶能夠一邊下載一邊觀看、收聽(即所謂的「在線欣賞」),而不需要等整個壓縮文件下載到自己的機器上才可以欣賞的網路傳輸技術。目前,在這個領域中的競爭者主要有微軟、RealNetworks、Apple三家公司,例如微軟新近發布了Windows Media Services 9、RealNetworks公司新近發布的Helix Platform、Apple新近發布的Darwin streaming server 4.1,意圖在流媒體領域大幹一場。

一般來說,一個完整的流媒體服務系統需要三個部分組成:編碼器、流伺服器和播放器。編碼器通過對內容來源(如MP3文件或者麥克風輸入)進行編碼,並將編碼過的內容發送到流伺服器;流伺服器再將它們發布到Internet,這樣客戶端的播放器只要連接到流伺服器就可以進行在線播放了。

利用Winamp架設MP3網路電台

當我們靜靜地在欣賞美妙的MP3音樂時,你是否曾經考慮過將這些原本屬於個人的MP3音樂通過網路在區域網內進行發布,甚至還可以通過Internet進行發布?這樣就可以讓遍布世界的朋友們與你一起共享MP3音樂之旅。其實,要做到這一點並不難,你只要將本機創建為一台MP3流媒體伺服器,將自己所喜愛的MP3音樂不停播放,然後通知朋友們訪問你的這台MP3伺服器就可以了。

說起MP3的播放,使用最廣泛的莫過於Winamp了。對於MP3流媒體服務這個領域,Winamp的開發者Nullsoft公司當然不會放棄,專門發布了面向MP3的流伺服器SHOUTcast Server。雖然它的功能沒有Windows Media Server和Real Server強大,但它不僅對硬體的要求極低,更關鍵的是完全免費,使用起來沒有後顧之憂。另外你還需要下載一個名為SHOUTcast DSP Plug-in的插件,只有安裝了這個不起眼的插件,Winamp才能支持流媒體服務。

首先打開Winamp(請注意版本號必須在2.22以上),切換到「Options」 | 「Preferences」| 「DSP/Effect」標簽頁,選中「Nullsoft SHOUTcast Source DSP v1.8.2a[dsp_sc.dll]」下的「Configure」按鈕。打開「SHOUTcast Source」窗口,選擇「Output」標簽頁,如圖1所示,在「Address」欄內填入本機的IP地址。如果你想在Internet上廣播MP3音樂,則必須鍵入本機的外部IP地址,然後就可以從程序組中運行SHOUTcast DAAS(GUI)程序以啟動SHOUTcast服務。這時系統會自動連接到http://yp.shoutcast.com伺服器,接下來請返回圖1窗口點擊「Connect」按鈕。如果連接成功,該按鈕會變為「disconnect」字樣,這樣我們就完成了在本機架設MP3流伺服器的全部過程。

架設REAL格式的視頻點播中心

如果是架設視頻點播伺服器,那麼選擇Real格式是非常明智的。因為RealProcer Plus這款功能強大的軟體操作相當簡單,每次使用時會彈出一個向導對話框進行操作提示。目前最新版本是10.0,我們只要選擇8.5.1以上的版本即可。

從「工具」菜單下選擇「創建網頁」命令,此時會彈出一個如圖2所示的向導式對話框,點擊「前進」按鈕選擇你希望用於創建Web頁面的Real多媒體文件。隨後RealProcer會詢問是創建「彈出式播放器」還是「嵌入式播放器」,一般建議選擇後者,因為這樣所需要的系統資源更低,當然啟動速度也更快。至於播放器的界面,可以選擇「標准播放器」,很快就可以創建成功。

最後,RM文件對象所在的目錄會增加一些文件,請將這些文件與RM對象一起上傳,不過要注意保證RM文件與HTML文件在同一目錄下,否則播放器可能無法找到播放對象。

架設WMP流媒體伺服器

微軟的手伸得很長,什麼領域都要插足一下。憑借著Windows操作系統的影響力,Windows Media Player市場佔有率越來越高,而微軟的*.asf、*.wmv、*.wma、*.avi等格式也開始被越來越多的用戶所接受。

架設WMP流媒體伺服器,你需要安裝Windows Media Encoder才行,目前最新版本是9.0簡體中文版。如圖3所示,我們應該在這里選擇「廣播實況事件」,接著選擇用來編碼的音頻和視頻設備。注意請事先將音頻和視頻設備與計算機正確連接,否則會無法檢測到。接著你還需要指定服務和發布點,當然也可以使用現有的發布點。然後Windows Media Encoder會自動創建伺服器,並給出HTTP連接地址與區域網內部地址,請記住這些內容,最後點擊「開始」按鈕正式啟動WMP流媒體伺服器。

接下來,我們就可以將剛才記下的HTTP連接地址與區域網內部地址告訴給朋友們。他們只要打開IE,輸入正確的IP地址和埠號,很快就可以訪問WMP流媒體伺服器。

架設QT流媒體伺服器

平時,我們見到的大多是打造MWF(矢量地圖窗口文件,Map Window File)或RM流伺服器,可是你可知道QuickTime(以下簡稱QT)流媒體伺服器應該如何來打造嗎?其實,藉助蘋果的QuickTime Streaming Server工具,我們可以在短時間內快速打造出一台QT流伺服器。

首先我們要准備一些工具,QuickTime媒體播放工具當然是必不可少的。目前最新版本是6.5簡體中文版,到處都可以找到,或者直接到蘋果公司的網站下載,並且需要在伺服器和客戶端同時安裝。Perl語言解析器,最低版本要求是5.0以上。QuickTime Streaming Server與用戶見面最早是在1999年,當時以其開放源代碼和基於標準的實時傳輸協議/實時流協議(RTP/RTSP)引擎深深地動搖了流媒體工業的基礎,目前的最新版本是5.0,下載文件共9.2MB。

從http://developer.apple.com/darwin/projects/streaming/地址可以免費下載,但你必須擁有Apple的注冊用戶名才能登錄(注冊是免費的),這里有Mac OS X、Red Hat、Solaris、Windows NT/2000/XP等版本可供選擇。下載回來的是一個自解壓文件,釋放後執行Install.bat運行安裝程序,運行過程在命令提示符窗口中完成,最後還需要設置登錄用戶名、密碼,如圖4所示,當看到「Setup Complete!」的提示信息時即大功告成。QT流媒體伺服器建設過程和RM類似,在這里就不再贅述。

如何共享音頻和視頻

共享音頻

前面,我們利用Winamp、SHOUTcast Server將本機架設為一台MP3流伺服器,那麼該如何讓遍布天南海北的朋友或區域網中的同事欣賞這些美妙音樂呢?

這有兩種方法:一種是打開Winamp,從「Play」菜單下選擇「Location」命令,或者直接鍵入「Ctrl-L」組合鍵打開一個對話框,然後在這里鍵入MP3流伺服器的URL地址或者IP地址、埠號(預設為8000),例如「http://192.168.0.1:8000」或者「http://61.277.1.24:8000」即可收聽;另一種方法則更為簡單,從IE中打開「http://192.168.0.1:8000」進入Web管理頁面,如圖5所示,然後點擊「收聽」按鈕就可以在線收聽MP3流音樂。

共享視頻

雖然蘋果的QuickTime Player的市場佔有率遠遠不如Real或Windows Media Player,但忠實的用戶依然不少。而且蘋果畢竟是網路流媒體的開山鼻祖,因此許多最新大片都是採用QT格式。

首先必須在機器上啟動QT服務,然後通知朋友們在遠程計算機中打開QuickTime。從「文件」菜單中選擇「在新的播放窗口中打開URL」命令,鍵入「rtsp://server/file.mov」來訪問QT流伺服器以實現遠程播放。這里的「server」是伺服器的IP地址,「file.mov」是媒體文件名,默認的RTSP傳輸埠是554埠。如果網路連接沒有什麼問題的話,如圖6所示,那麼你很快就可以連接成功。

建立播放列表或點播系統

辛辛苦苦架設了一台流媒體伺服器,我們還可以建立播放列表或點播系統,甚至可以進行網路直播,反正已經用上了寬頻,不用也是浪費。

配置QT流媒體伺服器

打開IE,在地址欄中輸入「http://server:1220」,這里的「server」代表伺服器的IP地址。如果前面的配置沒有什麼問題的話,很快就會進入如圖7所示的管理頁面,這里以列表形式顯示了當前的系統資源佔用情況和相關的伺服器信息。我們可以在這里查看連接到伺服器的用戶類型、IP地址、數據速率、數據傳輸量、包丟失比例、連接時間、連接文件等內容,也可以在這里設置映射文件夾、加密傳輸、最大連接用戶數、分配帶寬、重置密碼、更改埠,如果你需要的話,還可以查看錯誤日誌和操作日誌。

創建播放列表

點擊圖7窗口右側的「New MP3 Playlist」或「New Movie Playlist」按鈕,我們可以創建一個MP3或影片的播放列表。不過這里需要說明的是,你需要將相關的媒體文件復制到C:Program FilesDarwin Streaming ServerMovies文件夾中才行。

如圖8所示,我們可以在這里通過「Weight」旁邊的小三角箭頭重新調整播放列表的播放順序,可惜的是QuickTime Streaming Server對簡體中文的支持十分差勁,顯示的竟然是一些亂碼字元。最後,點擊窗口右下角的「Save Changes」按鈕就可以將這份新建的播放列表保存下來,以後如果需要更改的話可以選擇「Edit Playlist」重新配置。

不過,如果你希望其他用戶也能訪問這份播放列表文件,還必須點擊「Avaliable Playlists」列表框中的「Status」下的播放按鈕,也就是讓「Status」列的「Stopped」變為「Playing」才行。

實現網路直播

如果你還想在播放完MP3歌曲後說上一段話,那麼簡單的很,只要一個話筒就行了。不過,還需要在Winamp中進行一些設置,如圖9所示,在「Input Device」下拉列表框中選擇「Soundcard Input」項,這樣才會出現圖中的SoundCard Mixer設置項。如果使用默認的設置「Winamp(Recommended)」的話就只有Input Levels一項了,下面還有「Music Level」、「BGMusic Level」、「Mic Level」幾個滑塊可以調節音量的大小,而「Fade Time」是用來設

置移出時間值。

現在,你無需進行其它設置,准備一番後,清清嗓子,點擊「Push to Talk」按鈕,然後再按下「Lock」按鈕鎖定當前話音輸入模式。接下來就可以對著麥克風開始你的網路直播之旅了,結束請再次按下「Lock」按鈕解鎖。

E. android通過SMB訪問區域網PC中的共享視頻文件,如何在android上搭建個媒體伺服器 以便通過HTTP形式訪問

你可以使用nanohttpd 在安卓端搭建伺服器
網頁鏈接

F. 流媒體伺服器是什麼

流媒體指以流方式在網路中傳送音頻、視頻和多媒體文件的媒體形式。相對於下載後觀看的網路播放形式而言,流媒體的典型特徵是把連續的音頻和視頻信息壓縮後放到網路伺服器上,用戶邊下載邊觀看,而不必等待整個文件下載完畢。由於流媒體技術的優越性,該技術廣泛應用於視頻點播、視頻會議、遠程教育、遠程醫療和在線直播系統中。作為新一代互聯網應用的標志,流媒體技術在近幾年得到了飛速的發展。 流媒體伺服器是流媒體應用的核心系統,是運營商向用戶提供視頻服務的關鍵平台。流媒體伺服器的主要功能是對流媒體內容進行採集、緩存、調度和傳輸播放。流媒體應用系統的主要性能體現都取決於媒體伺服器的性能和服務質量。因此,流媒體伺服器是流媒體應用系統的基礎,也是最主要的組成部分。boac

閱讀全文

與流媒體伺服器android相關的資料

熱點內容
雲伺服器宕機概率 瀏覽:227
在線買葯用什麼app知乎 瀏覽:810
ubuntu解壓xz文件 瀏覽:674
宏傑加密時電腦關機 瀏覽:388
自己寫單片機編譯器 瀏覽:598
單片機按鍵閃爍 瀏覽:380
為什麼icloud總是顯連接伺服器失敗 瀏覽:888
如何設置域控伺服器 瀏覽:738
想在上海租房子什麼app好 瀏覽:184
編譯程序各部分是必不可少的嗎 瀏覽:885
編程不超過十行 瀏覽:763
數電編譯器的作用 瀏覽:337
時間演算法與現在有什麼區別 瀏覽:163
7zip解壓後沒文件夾 瀏覽:903
為什麼安卓送玫瑰ios收不到 瀏覽:10
美篇文章加密是什麼意思 瀏覽:83
ilasm編譯dll 瀏覽:39
呼吸燈單片機程序 瀏覽:954
linux域socket 瀏覽:250
qq分身怎麼樣才能加密 瀏覽:457