本文轉載自Android 視頻直播 ( 從快播到直播,從高清到無碼 )十年視頻開發項目,截取其中技術概念比較相關的部分,并做了重新的排版。
視頻和直播的準備:
- android-java層:camera相關(視頻)、AudioRecord(音頻)相關、MediaCodec相關(音視頻編碼)
- android-native層(c++):h264、h265等編碼庫的調用;各種音頻編碼庫的使用(aac、amr、mp3、g711等);容器封裝技術(音視頻封裝ts、ps等);媒體協議(hls、rtsp、rtmp等)
- socket編程;android-ndk編譯so技術;jni技術
難點:
大概就這么多,如果細說還有許多細節,比如音視頻同步,傳輸過程中的QOS等等問題。
android系統版本太多,直接用android 系統接口的話,會有很多坑,例如mediacodec有的支持編碼264,有的不支持,所以要配合第三方庫一起使用,如果只是單純的會java,那么android直播這里是玩不轉的。
主流的視頻和音頻的解碼
vitamio:美拍
Vitamio這個是功能很強大,但是企業收費版的,個人用戶免費。
流媒體支持
Vitamio支持各種常見的流媒體協議,可以點播或者直播音頻和視頻,Vitamio使用了 FFmpeg 做為媒體解析器和最主要的解碼器,同時開發了針對不同移動平臺的硬解碼方案,能夠完美支持 H.264/AVC、H.263、MPEG4 等常見的視頻編碼,覆蓋上百種多媒體格式。
MMS
RTSP (RTP,SDP),RTMP
HTTP progressive streaming
HLS - HTTP live streaming (M3U8)
知名使用者:新浪微博(安卓客戶端),搜狐視頻(安卓客戶端),風行網(安卓客戶端),歌華有線,熊貓影音(91網龍),視訊中國(央視),法國航空。ffmpeg:主流
ffmpeg是一個非常強大的音視頻編解碼開源庫,目前市場上流行的播放器,大部分都是基于此開發的,包括暴風,騰訊,等等以及上面提到的vitamio,vlc,ijkplayer。ijkplayer:斗魚,網易音樂,嗶哩嗶哩的ijkplayer
vlc:YY
webRTC:網頁端的
目前WebRtc只適合小范圍(8人以內)音視頻會議,不適合做直播。