『壹』 android開發Vitamio是否可以錄制視頻
android上,視頻/音頻流直播是極少有人關注的一部分。每當我們討論流媒體,RTMP(Real Time Messaging Protocol)是不可或缺的。RTMP是一個基本的視頻/音頻直播流協議,但是不幸的是Android標準的VideoView不支持RTMP的播放。因此,如果想在android上播放RTMP直播流,你必須使用支持RTMP協議的庫。在本教程中我們將討論如何通過使用安卓的 [Vitamio] 庫播放由 RTMP 協議傳輸的流媒體。
Android Vitamio 庫
Vitamio是一個android和ios上基於FFmpeg的開源項目。Vitamio為我們提供了一個清潔、簡單、全面、真實的硬體加速解碼器和渲染器API,Vitamio是一個支持多種音視頻格式 如 FLV, TS/TP, WMV, DivX, Xvid等多種標准格式的非常強大的庫。所不同的是,它也支持類似.mkv和.srt嵌入和外掛字幕播放。但是它帶有一個許可證,因此在使用它之前請先獲得認證。在這個android RTMP例子中,我們不僅討論RTMP直播流,而且也會討論m3u8流(HLS),RTSP流和 MMS (Microsoft Media Stream)。首先讓在我們的項目中引用Vitamio庫。
在Android Studio中引用Vitamio庫的步驟如下:
1.下載Vitamio bundle
2.解壓並且在Android Studio上File->Import Mole
3.指定到VitamioBundle路徑,選擇vitamio文件夾 點擊完成
4.在build.gradle(Mole: app)依賴部分添加依賴項目(『:vitamio』)
5.打開build.gradle (Mole: vitamio) – 改變最小sdk版本為7
6.不要忘記在manifest.xml中添加internet許可權
7.完成!
Android RTMP流
在講述如何使用之前,讓我們先了解下RTMP。Real Time Messaging Protocol (RTMP)是一個Adobe Systems所擁有的一個協議。該協議是Adobe公司擁有的開發音視頻流的flash player。後來該協議的部分被公開,供公眾使用。更多請查看這里.這個協議大多用於IPTV和實時視頻點播流,但它也用於其他領用。
在android上,標準的VideoView不支持RTMP播放。但WebView可以播放RTMP流。這解決了播放RTMP流的問題,但是我認為web apps 不能提供一個很好的界面和體驗。因此這這個android RTMP例子中我們將運用第三方庫-Vitamio 直播RTMP流的流媒體。在工程中引用Vitamio之後,請在你的layout文件添加Vitamio的VideoView:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<io.vov.vitamio.widget.VideoView android:id="@+id/vitamio_videoView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>123456789101112
另外請編寫你的activity如下:
MainActivity.java
package com.truiton.rtmpplayer; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import java.util.HashMap; import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.widget.MediaController; import io.vov.vitamio.widget.VideoView; public class MainActivity extends ActionBarActivity {
private static final String TAG = "MainActivity"; private String path; //private HashMap<String, String> options;
private VideoView mVideoView; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!LibsChecker.checkVitamioLibs(this)) return;
setContentView(R.layout.activity_main);
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "rtmp://rrbalancer.broadcast.tneg.de:1935/pw/ruk/ruk"; /*options = new HashMap<>();
options.put("rtmp_playpath", "");
options.put("rtmp_swfurl", "");
options.put("rtmp_live", "1");
options.put("rtmp_pageurl", "");*/
mVideoView.setVideoPath(path); //mVideoView.setVideoURI(Uri.parse(path), options);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});
}
}041424344454647
雖然上面代碼很清晰明了,但需要指出的是請修改你播放RTMP流的路徑。在android上,有時可能使用帶報頭路徑來播放RTMP流。幸運的是,Vitamio RTMP播放器也支持這種方式。因此,所有類型的RTMP流可以使用Vitamio庫。上面的例子會是這個樣子:
Android Vitamio 直播視頻播放功能的實現
Android RTSP流媒體
實時流協議(RTSP)通過多媒體伺服器傳輸內容,例如YouTube使用RTSP流發布內容。關於RTSP流比較容易的部分是,它可以通過android標準的VideoView來完成,想了解更多,請參考我的VideoView例子。
但是如果你使用Vitamio庫,可以更好的播放RTSP流。事實上Vitamio也支持RTSP流的回播。和上面過程是一樣的,包括Vitamio的VideoView在布局文件,並使用路徑變數指定的RTSP url
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov";
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});12345678910111213
Android m3u8 流媒體
「如何在android上播放m3u8視頻」是android開發者最常見的問題之一。通過Http 協議進行視頻流直播最簡單的辦法就是使用標準的 VideoView. 但只能在android3.0以上的設備上播放m3u8流。因為在Android 3.0引入HTTP/ HTTPS直播和HTTP/ HTTPS漸進式流媒體協議,在android3.1完全支持HTTPS。
如果你希望在早期的版本上實現支持android m3u8流的HTTP實時流媒體 (HLS)。應該考慮使用Vitamio庫,這個庫支持在android API7以上播放m3u8。使用方式,同樣的在布局文件中使用Vitamio的VideoView,並指定的HTTP實時流媒體URL。
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "http://93.184.221.133/00573D/236/236-0.m3u8";
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});12345678910111213
Playing m3u8 stream on Android with Vitamio would look something like this:
在androi上使用Vitamio播放m3u8流效果如下:
Android Vitamio 直播視頻播放功能的實現
Android MMS 流
Vitamio庫是一個強大的庫,還支持Microsoft媒體伺服器(MMS)流中的播放。 MMS是網路流媒體協議,主要用於網路廣播和電台直播。使用Vitamio用於在anroid的MMS流和其他協議沒有什麼不同。所有你需要做的只是更換路徑變數指向一個MMS url:
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "mms://beotelmedia.beotel.net/studiob";
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});123456789101112
結論
通過上面的討論,可以確定地說,Vitamio是一個強大的多平台庫(ios and android)。通過使用Vitamio庫 能播放多種類型的視頻格式和協議如RTMP, RTSP, HTTP Live, and HTTP漸進式流協議。另外一個很好的功能是,vitamio支持字幕和多音軌的播放。Vitamio的唯一的缺點是,它不是完全的開源。
閱讀全文
『貳』 有什麼軟體可以播放rtmp流媒體
一般在Android設備上使用Vplayer播放器就可以播放rtmp和trsp等流媒體地址,前提必須保證你的流媒體地址沒有失效,像這種流媒體地址往往很容易失效的。
『叄』 rtmpt和rtmp為什麼一個加埠號,一個不加
這個應用主要是將HTTP的串流(非HLS或DASH)轉換成RTMP協議傳送到Adobe Flash Media Server或Wowza Media Server的媒體伺服器。
根據維基網路: 「Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of the protocol for public use.」
RTMP的協議有以下的參數:
RTMP: 其原始採用TCP port 1935
RTMPS: 將RTMP載入到SSL的安全機制,就類似HTTPS。
RTMPE: 採用Adobe所提供給RTMP所發展的加密版本。
RTMPT: 在RTMP上加掛he RTMP protocol 封裝在HTTP請求中,可以穿越防火牆。這是一個很不錯的協議,使用TCP埠80和443繞過公司對防火牆。封裝的會話可能攜帶純RTMP,RTMPS或RTMPE包內。
RTMP 串流
VLC 在 2.0.x版本里可以支持RTMP協議。不過,有些環境卻沒法執行,例如2.0.2, 2.0.3, 2.0.4, 2.0.6在Windows 2008 Server 64的伺服器上確實沒法執行。可以開啟VLC然後開啟網路串流,如「RTMP://aaa.bbb.com:1935/live/串流源「,看看可否開啟。主要是VLC 2.0.x採用 ffmpeg/libav的程序庫,但是, 有的包裝卻沒法支持。所以必須先做確認。當 librtmp 的支持被啟動於 ffmpeg/libav 則RTMPS才可以有功用。
VLC和RTMP的情形主要是用來捕獲和轉碼應用程序生成一個單一的流。是通過另一個應用程序分配給多個客戶端。這在Wowza是非常重要的。雖然,Wowza也支持VLC採用UDP/RTP/RTSP方式接收串流,但是,很多情況下是很不穩定的。
LC直接連接到一個的RTMP串流,如WOWZA,不聽傳入的請求。因此,它是不可能的,以查看的RTMP流直接從VLC。您需要連接到WOWZA,觀看流。這是可以用VLC做到的:
$ vlc rtmp://rtmp.server.com:1935/path/to/stream有件事必須提醒的。從VLC將RTMP串流傳送給Wowza伺服器並不是都很穩定的。有一些時間關系的「蟲」會造成Wowza關閉連線。 這樣的問題都是與「音頻」與」視頻「時間戳(Timestamp)有關系的。採用「audio-desync」 選項來整合RTMP也不是個好點子,但是, 可以不斷調整與修改。
Webcam RTMP streaming
以下是有關webcam的應用。其他的有採集裝置、設備、視頻文檔等應用。
Windows 的範例
在windows的採集裝置都是利用DirectShow這個界面的。在VLC的模塊也是用這樣的界面,成為「DirectShow「或」dshow」。以下是範例:
$ vlc dshow://"" --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'DirectShow選項也可在QT界面里採用
linux 的範例
通常在Linux的採集裝置上都是採用「video for linux」 (v4l2)這個界面。使用指令方式來採集webcam裝置(或稱為」v4l2 裝置」)送出RTMP串流的範例如下:
$ vlc v4l2:// --v4l2-fps=25 --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'這個例子可以自動偵測 v4l2 裝置並且選擇第一個裝置來採集訊號。其他的參數選項如視頻標准(PAL, NTSC)、Chroma、寬度、長度等等可以自行設置。必須要注意的是,這些參數設置跟本身的設備有關。 當我門使用debug模式 (-vvv),VLC自身的video for linux (v4l2) 模塊會顯示出執行時所出現的數值訊息。v4l2 模塊提供以下可作為優化的選項:
–v4l2-dev=: 指定所要採集的特定裝置
–v4l2-standard=: 使用哪種視頻標准,例如: SECAM, PAL, NTSC and more
–v4l2-width=: 視頻呈現的寬度(in pixels)
–v4l2-height=: 視頻呈現的長度度(in pixels)
以上是描述有關v4l2的參數選項。完整的v4l2模塊訊息,可以利用下面的指令查詢。
$ vlc -H -p v4l2 --advanced以下是另一個將http串流轉碼(transcode)到RTMP給Adobe Flash Media Server或Wowza Media Server等視頻伺服器
cvlc -I mmy --sout-mux-caching=5000 --sout='#transcode{venc=x264{keyint=60},vcodec=h264,vb=800}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://destinationIPaddress:1935/live/StreamFile}}' &這是用ffmpeg的方法:
ffmpeg -i -vcodec libx264 -vb 800k -acodec libfaac -ab 64k -f flv rtmp://DestinationIPAddress:1935/live/StreamFile
『肆』 android怎麼播放rtsp實時網路串流代碼
android播放rtsp實時網路串流核心代碼如下:
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.VideoView;
public class rtspActivity extends Activity {
/** Called when the activity is first created. */
Button playButton ;
VideoView videoView ;
EditText rtspUrl ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
rtspUrl = (EditText)this.findViewById(R.id.url);
playButton = (Button)this.findViewById(R.id.start_play); playButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
PlayRtspStream(rtspUrl.getEditableText().toString()); } });
videoView = (VideoView)this.findViewById(R.id.rtsp_player); }
//play rtsp stream
private void PlayRtspStream(String rtspUrl){
videoView.setVideoURI(Uri.parse(rtspUrl));
videoView.requestFocus();
videoView.start();
}
}
『伍』 想要搭建一款穩定的直播平台,直播源碼怎麼安裝啊
一、搭建直播平台源碼,移動直播推流端
直播推流端即主播端,主要通過手機攝像頭採集視頻數據和麥克風採集音頻數據,經過一系列前處理、編碼、封裝,然後推流到CDN進行分發。
1、採集
移動直播SDK通過手機攝像頭和麥克風直接採集音視頻數據。其中,IOS硬體種類不多,所以比較簡單,安卓則由於市面上硬體機型非常多,所以難以做到一個庫適配所有硬體。
2、前處理
在這個環節主要處理美顏、水印、模糊等效果。美顏功能幾乎是直播的標配功能。我們調研中發現太多case是因為沒有美顏功能被拋棄使用的。另外國家明確提出了,所有直播都必須打有水印並回放留存15天以上。
3、編碼
為了便於手機視頻的推流、拉流以及存儲,通常採用視頻編碼壓縮技術來減少視頻的體積,現在比較常用的視頻編碼是H.264。在音頻方面,比較常用的是AAC編碼格式,其它如MP3、WMA也是可選方案。
4、推流
要想用於推流還必須把音視頻數據使用傳輸協議進行封裝,變成流數據。常用的流傳輸協議有RTSP、RTMP、HLS等,使用RTMP傳輸的延時通常在1–3秒,對於移動直播這種實時性要求非常高的場景,RTMP也成為移動直播中最常用的流傳輸協議。最後通過一定的Qos演算法將音視頻流數據推送到網路斷,通過CDN進行分發。
二、搭建直播平台源碼,服務端處理
為了讓推上來的流適配各終端各種不同協議,服務端還需要對流進行轉碼,包括截圖、錄制、水印等。
三、搭建直播平台源碼,播放器端
1、拉流
拉流實際是推流的逆過程。首先通過播放端獲取碼流,標準的拉流格式有RTMP、HLS、FLV等。RTMP是Adobe的專利協議,開源軟體和開源庫都支持的比較好,如開源的librtmp庫,播放端只要支持flashPlayer的就能非常簡單的播放RTMP直播,直播延遲一般在1–3秒。
1、解碼和渲染
是指從音視頻的數據中提取原始數據,也即音視頻的播放。前面介紹的H.264和H.265編碼格式都是有損壓縮,所以在提取後的原始數據,並非原始采樣數據,存在一定的信息丟失。因此,在視頻體積最小的情況下通過各種編碼參數保留最好的原始畫面,成為了各視頻公司的核心機密。
總之,搭建一套直播系統還是很復雜的,大部分運營級的直播系統,是直接找專業的開發團隊進行項目開發、系統測試和最終的上線部署,一整套開發到上架,最後還需要有專門的技術維護團隊進行運營過程中的技術問題處理。我之前在山東布穀直播開發了一套直播程序,有售後保障,你可以咨詢問問。
『陸』 android rtmp推流怎麼實現
就拿使用ZEGO即構的實時音視頻產品舉個例子,要想實現android rtmp推流操作,可以通過調用開始推流 startPublishingStream 的 API 介面,向遠端用戶發送本端的音視頻流。如果不需要繼續推流,可調用 stopPublishingStream 停止推流(開始推流前,建議開發者在開始推流前對推流參數、本地預覽視圖進行設置)。