真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android推流,android推流花屏

android推流一般用什么第三方

項(xiàng)目地址

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出東風(fēng)免費(fèi)做網(wǎng)站回饋大家。

(1) JSON,圖像等的異步下載;

(2) 網(wǎng)絡(luò)請(qǐng)求的排序(scheduling)

(3) 網(wǎng)絡(luò)請(qǐng)求的優(yōu)先級(jí)處理

(4) 緩存

(5) 多級(jí)別取消請(qǐng)求

(6) 和Activity和生命周期的聯(lián)動(dòng)(Activity結(jié)束時(shí)同時(shí)取消所有網(wǎng)絡(luò)請(qǐng)求)

Android 推流原理

流媒體在播放前不是完全下載整個(gè)文件,而是把開始部分內(nèi)容存入內(nèi)存,數(shù)據(jù)流是隨時(shí)傳送隨時(shí)播放。

不懂再問我

android 直播怎么實(shí)現(xiàn)的

android 的直播,主要使用的是camera采集的數(shù)據(jù)推流到服務(wù)器上,在客戶端播放camera采集的數(shù)據(jù)。采用SurfaceView+ SurfaceTexture來顯示camera數(shù)據(jù), SurfaceTexture在接收?qǐng)D像流之后,可以進(jìn)行二次處理,比如(加字體水印), 處理完畢后再送給另一個(gè)SurfaceView用于顯示.

先說說,android端采集攝像頭數(shù)據(jù),這個(gè)網(wǎng)上有很多的資料,可以百度下。這里可以在回調(diào)函數(shù)OnPreviewFrame(byte[] data,Camera cma)中獲取攝像頭數(shù)據(jù)data.

關(guān)鍵是如何把data傳輸?shù)椒?wù)器,要實(shí)現(xiàn)這個(gè)目標(biāo),我使用ffmpeg 來解決這個(gè)為題。在android 工程創(chuàng)建jni文件夾,使用jni調(diào)用。native函數(shù)如下:

// 在OnPreviewFrame中調(diào)用

public native void push(byte[] data);

// 可以在OnSurfcaeChanged()中調(diào)用. 在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;

}

/**編碼結(jié)束*/

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

}

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;

123456789101112131415161718192021222324252627282930313233343536373839404142434445

}

注意傳輸視頻流時(shí),必須使用h264編碼器進(jìn)行編碼。初始化成功后,便可使用push()來推送每一幀的camera數(shù)據(jù)到服務(wù)器上。

本人在ubuntu系統(tǒng)中,利用ngnix + rtmp搭建了簡(jiǎn)易的流媒體服務(wù)器。

在pc機(jī)上,使用ffplay rtmp://192.168.1.102:1935/myapp/test1的命令來播放視屏.

有沒有手機(jī)端用于rtmp推流(串流)直播的軟件?apk格式

播推流端即主播端,主要通過手機(jī)攝像頭采集視頻數(shù)據(jù)和麥克風(fēng)采集音頻數(shù)據(jù),經(jīng)過一系列前處理、編碼、封裝,然后推流到CDN進(jìn)行分發(fā)。趣拍直播SDK可以滿足以下所有的功能和應(yīng)用場(chǎng)景,幫助開發(fā)者解決各種直播難題。采集手機(jī)直播SDK通過手機(jī)攝像頭和麥克風(fēng)直接采集視頻數(shù)據(jù)和音頻數(shù)據(jù)。其中,視頻采樣數(shù)據(jù)一般采用RGB或YUV格式、音頻采樣數(shù)據(jù)一般采用PCM格式。對(duì)于采集到的原始音視頻的體積是非常大的,因此需要經(jīng)過壓縮技術(shù)來處理,降低視頻的大小來提示傳輸效率。在手機(jī)視頻采集方面,iOS系統(tǒng)在硬件的兼容性方面做得比較好,系統(tǒng)本身提供了比較完整的視頻采集的接口,使用起來也比較簡(jiǎn)單。但是,Android系統(tǒng)就比較麻煩了,千奇百怪的機(jī)型都有,適配起來非常難。我們?cè)诔跗谧隽艘豁?xiàng)調(diào)研,發(fā)現(xiàn)Android的適配率還不到50%。2.前處理在這個(gè)環(huán)節(jié)主要處理美顏、水印、模糊等效果。特別是美顏功能幾乎是直播的標(biāo)配功能,沒有美顏的直播主播們根本提不起興趣。我們見過太多case是因?yàn)闆]有美顏功能被拋棄使用的。另外國(guó)家明確提出了,所有直播都必須打有水印并回放留存15天以上。所以,在選擇直播SDK時(shí),沒有美顏和水印功能基本就可以選擇放棄了。美顏實(shí)際上是通過算法去識(shí)別圖像中的皮膚部分,再對(duì)皮膚區(qū)域進(jìn)行色值調(diào)整。通常情況下人的膚色與周邊環(huán)境色調(diào)存在較大差異,通過顏色對(duì)比,找到皮膚的基本輪廓,進(jìn)一步進(jìn)行膚色檢查還可以確定人臉范圍。找到了皮膚的區(qū)域,可以進(jìn)行色值調(diào)整、添加白色圖層或調(diào)整透明度等來等來達(dá)到美白效果。美顏除了美白效果還需要磨皮功能,磨皮實(shí)際上就是用模糊濾鏡實(shí)現(xiàn)的。濾鏡有很多種,如高斯濾波,雙邊濾波,導(dǎo)向?yàn)V波,到底選擇什么樣的模糊濾鏡各家也有自己的喜好。在美顏處理方面,最著名的GPUImage提供了豐富的效果,同時(shí)可以支持IOS和Android,還支持自己寫算法實(shí)現(xiàn)自己最理性的效果。GPUImage本事內(nèi)置了120多種常見濾鏡效果,添加濾鏡只需要簡(jiǎn)單調(diào)用幾行代碼就可以了,比如大家可以試試使用GPUImageBilateralFiter的雙邊濾波濾鏡來處理基本的磨皮效果,想要實(shí)現(xiàn)更理想的效果還是要通過自定義算法去實(shí)現(xiàn)的,各家也都有自己一套算法。3、編碼為了便于手機(jī)視頻的推流、拉流以及存儲(chǔ),通常采用視頻編碼壓縮技術(shù)來減少視頻的體積?,F(xiàn)在比較常用的視頻編碼是H.264,但具有更高性能的H.265編碼技術(shù)正在飛速發(fā)展,并可能很快成為主流;在音頻方面,通比較常用的是用AAC編碼格式進(jìn)行壓縮,其它如MP3、WMA也是可選方案。視頻經(jīng)過編碼壓縮大大提高了視頻的存儲(chǔ)和傳輸效率,當(dāng)然,經(jīng)過壓縮后的視頻在播放時(shí)必須進(jìn)行解碼。通俗點(diǎn)講就是編碼器將多張圖像進(jìn)行編碼后產(chǎn)生一段段GOP(GroupofPictures),播放時(shí)解碼器讀取一段段GOP進(jìn)行解碼后讀取圖像并進(jìn)行渲染顯示。在編碼方面的核心是在分辨率、碼率、幀率等參數(shù)中找到最佳平衡點(diǎn),達(dá)到體積最小畫面最優(yōu)的效果,這些參數(shù)各家也都有自己的一套核心參數(shù)。2012年8月,愛立信公司推出了首款H.265編解碼器,六個(gè)月后,國(guó)際電聯(lián)(ITU)就正式批準(zhǔn)通過了HEVC/H.265標(biāo)準(zhǔn),稱之為高效視頻編碼(HighEfficiencyVideoCoding),相較于之前的H.264標(biāo)準(zhǔn)有了相當(dāng)大的改善,做到了僅需要原來一半帶寬即可播放相同質(zhì)量的視頻,低于1.5Mbps的網(wǎng)絡(luò)也能傳輸1080p的高清視頻。國(guó)內(nèi),如阿里云、金山云都在推自己的H.265編解碼技術(shù),隨著直播的快速發(fā)展和對(duì)帶寬的依賴,H.265編解碼技術(shù)已有全面取代H.264的趨勢(shì)。當(dāng)然,全面推開應(yīng)用還需要些時(shí)間。另外,硬件編碼已經(jīng)成為手機(jī)直播的首選方案,軟編碼處理在720p以上的視頻頹勢(shì)非常明顯。在IOS平臺(tái)上硬件編碼的兼容性比較好,可以直接采用,但在Android平臺(tái)上,Android的MediaCodec編碼器,針對(duì)不同的芯片平臺(tái)表現(xiàn)差異還是非常大的,要完全實(shí)現(xiàn)全平臺(tái)兼容的4、推流要想用于推流還必須把音視頻數(shù)據(jù)使用傳輸協(xié)議進(jìn)行封裝,變成流數(shù)據(jù)。常用的流傳輸協(xié)議有RTSP、RTMP、HLS等,使用RTMP傳輸?shù)难訒r(shí)通常在1–3秒,對(duì)于手機(jī)直播這種實(shí)時(shí)性要求非常高的場(chǎng)景,RTMP也成為手機(jī)直播中最常用的流傳輸協(xié)議。最后通過一定的Qos算法將音視頻流數(shù)據(jù)推送到網(wǎng)絡(luò)斷,通過CDN進(jìn)行分發(fā)。在直播場(chǎng)景中,網(wǎng)絡(luò)不穩(wěn)定是非常常見的,這時(shí)就需要Qos來保證網(wǎng)絡(luò)不穩(wěn)情況下的用戶觀看直播的體驗(yàn),通常是通過主播端和播放端設(shè)置緩存,讓碼率均勻。另外,針對(duì)實(shí)時(shí)變化的網(wǎng)絡(luò)狀況,動(dòng)態(tài)碼率和幀率也是最常用的策略。當(dāng)然,在網(wǎng)絡(luò)傳輸方面全部自己來做基本不現(xiàn)實(shí),找提供推流服務(wù)的CDN服務(wù)商提供解決方案是最好的選擇,可參考文章開頭介紹的云視頻服務(wù)商。據(jù)了解,阿里云是國(guó)內(nèi)唯一能自研CDN緩存服務(wù)器的廠商,性能還是非常有保障的。通常,大多數(shù)直播平臺(tái)都會(huì)同時(shí)接入多個(gè)視頻云服務(wù)提供商,這樣可以做拉流線路互備,對(duì)推流后視頻集群再進(jìn)行優(yōu)化也可提高直播的流暢性和穩(wěn)定性。

android rtmp推流怎么實(shí)現(xiàn)?

就拿使用ZEGO即構(gòu)的實(shí)時(shí)音視頻產(chǎn)品舉個(gè)例子,要想實(shí)現(xiàn)android rtmp推流操作,可以通過調(diào)用開始推流 startPublishingStream 的 API 接口,向遠(yuǎn)端用戶發(fā)送本端的音視頻流。如果不需要繼續(xù)推流,可調(diào)用 stopPublishingStream 停止推流(開始推流前,建議開發(fā)者在開始推流前對(duì)推流參數(shù)、本地預(yù)覽視圖進(jìn)行設(shè)置)。

android可以同時(shí)做接流和推流么

接流,推流,第一次聽說這兩詞,你是想問輸入流inputstream 跟輸出流outputstream 吧


分享題目:android推流,android推流花屏
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/dsegpic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部