国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

安卓播放H264/H265實時流(安卓實時預覽H264/H265 安卓實時預覽AVC/HEVC)

這篇具有很好參考價值的文章主要介紹了安卓播放H264/H265實時流(安卓實時預覽H264/H265 安卓實時預覽AVC/HEVC)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ?實際項目中經常遇到兩種場景,第一種從無人機拿H264/H265碼流轉GB28181等協(xié)議,轉協(xié)議的同時可能還需要實時預覽無人機畫面; 第二種是安卓接USB外置攝像頭, 由于USB2.0傳輸帶寬有限,對于高分辨率圖像, 帶寬無法滿足YUV圖像的傳輸, 攝像頭只好先將圖像編碼成MJPEG,H264或H265等格式再傳輸。

? ?對于上述兩種場景,安卓拿到的都是已編碼的H264或H265碼流,這用來轉GB28181、RTSP、RTMP和錄像存儲很方便, 但沒法直接實時預覽, 實時預覽需要先解碼,再顯示. 這樣增加了不少開發(fā)成本,為了方便使用, 在我的播放器上直接增加了傳H264/H265字節(jié)流接口,只要把H264/H265數(shù)據(jù)傳給播放器就好,播放器負責解碼(軟解或硬解)顯示。

? 下面先介紹下H264/H265?Annex B?Byte stream format:

? 字節(jié)流格式:字節(jié)流由1到多個字節(jié)流nal_unit組成.

??字節(jié)流nal_unit:{前綴碼(0x000001) + nal_unit} 或 {zero_byte(0x00) + 前綴碼(0x000001) + nal_unit}.?前綴碼為網絡字節(jié)序.

? 需要注意的是:?1.字節(jié)流中第一個字節(jié)流nal_unit頭部可能包含1個或多個leading_zero_8bits(某些安卓硬編碼器會出這樣的數(shù)據(jù)); 2.字節(jié)流nal_unit單元尾部可能包含一個或多個trailing_zero_8bits.(前后額外加0字節(jié)是為了保持字節(jié)對齊).

? leading_zero_8bits:? 一個0x00字節(jié).

? trailing_zero_8bits: 一個0x00字節(jié).

? 對于VPS, SPS, PPS前綴應是 0x00000001(H264只有SPS, PPS), An?access unit的第一個nal unit的前綴應是0x00000001.

? 字節(jié)流NAL單元語法(H264和H265是一致的):

android h264,Android AVC預覽,Android HEVC預覽,安卓H264實時預覽,安卓H265實時預覽,安卓播放H265

? ??H264 NAL unit 語法:

android h264,Android AVC預覽,Android HEVC預覽,安卓H264實時預覽,安卓H265實時預覽,安卓播放H265

? ? 常用的h264 nal_unit_type: 5(IDR), 6(SEI), 7(SPS), 8(PPS).

? ? H265?NAL unit 語法:

android h264,Android AVC預覽,Android HEVC預覽,安卓H264實時預覽,安卓H265實時預覽,安卓播放H265?android h264,Android AVC預覽,Android HEVC預覽,安卓H264實時預覽,安卓H265實時預覽,安卓播放H265

? ?H265的nal_unit_type請參考265文檔。

? ?更詳細的描述請參考264和265文檔,對于如何調用播放器接口,上面的描述基本夠用了,播放器接口如下:

/*
* Copyright (C) 1130758427@qq.com. All rights reserved.
*/

/**
	 * 投遞視頻包給播放器
	 *
	 * @param codec_id: 編碼id, 當前僅支持H264和H265, 1:H264, 2:H265
	 *
	 * @param packet: 視頻數(shù)據(jù), ByteBuffer必須是DirectBuffer, 包格式請參考H264/H265 Annex B Byte stream format, 例如:
	 *                0x00000001 nal_unit 0x00000001 ...
	 *                H264 IDR: 0x00000001 sps 0x00000001 pps 0x00000001 IDR_nal_unit .... 或 0x00000001 IDR_nal_unit ....
	 *                H265 IDR: 0x00000001 vps 0x00000001 sps 0x00000001 pps 0x00000001 IDR_nal_unit .... 或 0x00000001 IDR_nal_unit ....
	 *
	 * @param offset: 偏移量
	 * @param size: packet size
	 * @param timestamp_ms: 時間戳, 單位毫秒
	 * @param is_timestamp_discontinuity: 是否時間戳間斷,0:未間斷,1:間斷
	 * @param is_key: 是否是關鍵幀, 0:非關鍵幀, 1:關鍵幀
	 * @param extra_data: 可選參數(shù),可傳null, 對于H264關鍵幀包, 如果packet不含sps和pps, 可傳0x00000001 sps 0x00000001 pps
	 *                    ,對于H265關鍵幀包, 如果packet不含vps,sps和pps, 可傳0x00000001 vps 0x00000001 sps 0x00000001 pps
	 * @param extra_data_size: extra_data size
	 * @param width: 圖像寬, 可傳0
	 * @param height: 圖像高, 可傳0
	 *
	 * @return {0} if successful
	 */
	public native int PostVideoPacketByteBuffer(long handle, int codec_id,
									  java.nio.ByteBuffer packet, int offset, int size, long timestamp_ms, int is_timestamp_discontinuity, int is_key,
									  byte[] extra_data, int extra_data_size, int width, int height);


	/*
	* 請參考 PostVideoPacketByteBuffer說明
	 */
	public native int PostVideoPacketByteArray(long handle, int codec_id,
												byte[] packet, int offset, int size, long timestamp_ms, int is_timestamp_discontinuity, int is_key,
												byte[] extra_data, int extra_data_size, int width, int height);

調用代碼:

/*
* Copyright (C) 1130758427@qq.com. All rights reserved.
*/


// 啟動播放器
 private long start_play(SmartPlayerJniV2 lib_player, Context context, SurfaceView surface_view, boolean is_hardware_decoder) {
        if (null ==lib_player || null == context || null == surface_view)
            return 0;

        long handle = lib_player.SmartPlayerOpen(context);
        if (0 == handle) {
            Log.e(TAG, "open player failed");
            return 0;
        }

        // 設置0, 盡可能降低預覽延時
        lib_player.SmartPlayerSetBuffer(handle, 0);

        lib_player.SmartPlayerSetUrl(handle, "ntexternal://*******************");

        lib_player.SmartPlayerSetSurface(handle, surface_view);

        // 圖像等比例縮放或鋪滿view
        lib_player.SmartPlayerSetRenderScaleMode(handle, 1);

        lib_player.SmartPlayerSetFastStartup(handle, 1);

        // 不要播放音頻,靜音就好
        lib_player.SmartPlayerSetMute(handle, 1);

        // 大分辨率可能需要硬解,小分辨率推薦軟解,硬解延時可能大些
        if (is_hardware_decoder) {
            lib_player.SetSmartPlayerVideoHevcHWDecoder(handle, 1);
            lib_player.SetSmartPlayerVideoHWDecoder(handle, 1);
        }

        // 有些場景可能需要解碼出來的圖像用來做分析或重新編碼
        // 這里可以設置yuv或rgb callback, 把圖像給Caller
        // lib_player.SmartPlayerSetExternalRender(handle, new RGBAExternalRender());
        // lib_player.SmartPlayerSetExternalRender(handle, new I420ExternalRender());

        if (0 == lib_player.SmartPlayerStartPlay(handle))
            return handle;

        lib_player.SmartPlayerClose(handle);

        return 0;
    }


// 停止播放
private void stop_play(SmartPlayerJniV2 lib_player, long handle) {
        if (null == lib_player)
            return;

        if (0 == handle)
            return;

        lib_player.SmartPlayerStopPlay(handle);
        lib_player.SmartPlayerClose(handle);
    }

// 投遞H264或H265數(shù)據(jù)給播放器
public void onVideoDataCallback(int ret, int video_codec_id, int size, int is_key_frame, long timestamp, int width, int height, long presentation_timestamp) {
  if (player_handle_ !=0)
    lib_player_.PostVideoPacketByteBuffer(player_handle_, video_codec_id, video_buffer_, 0, size, timestamp, 0, is_key_frame, null,0, 0, 0);
				
}

? ?Android也可以用MediaCodec直接解碼顯示,但MediaCodec坑較多,從一個演示版到穩(wěn)定版周期較長成本較高,直接在現(xiàn)有成熟穩(wěn)定的播放器SDK上加接口實現(xiàn)AVC/HEVC實時預覽更可行些.?我在Windows上啟動一個內置rtsp server流, 安卓拉rtsp流,然后將H264/H265傳給播放器顯示,延時非常低(毫秒級),并支持H264和H265碼流實時切換預覽,分辨率實時切換預覽,? 也支持解碼后YUV/RGB數(shù)據(jù)回調,? 實時截圖等功能。另外蘋果的VideoToolbox只支持AVCC格式,不支持Annex B格式,需要轉換后再輸入,更多問題聯(lián)系qq: 1130758427文章來源地址http://www.zghlxwxcb.cn/news/detail-609100.html

到了這里,關于安卓播放H264/H265實時流(安卓實時預覽H264/H265 安卓實時預覽AVC/HEVC)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • RK3318 android12 HEVC-1080P 4K VP9等格式視頻播放不了

    同樣視頻在同樣硬件在android10的固件刷機測試播放正常 在android12播放失敗,在媒體中心點開視頻直接閃退了 在android10 能播放4K視頻, 我對比了ddr頻率??cat /d/clk/clk_summary | grep ddr android10 clk_ddrmon 0 0 0 24000000 0 0 50000 pclk_ddr 3 3 0 61440000 0 0 50000 pclk_ddr_grf 1 1 0 61440000 0 0 50000 pclk_d

    2024年02月07日
    瀏覽(21)
  • 基于rk3568 Android H265推流SRS低延遲網頁播放方案

    基于rk3568 Android H265推流SRS低延遲網頁播放方案

    ? ? ? ?在音視頻領域,融合推流,低碼流,低延遲,瀏覽器H5化是一個降低成本,提升用戶體驗的重要手段。同時適配現(xiàn)有直播的生態(tài)也是一個必要條件。 ? ? ? 在滿足上述要求的情況下,我做了以下實踐,取得了良好的效果。 ? ? ?在實踐中,我們選擇采用了成熟的rtmp做

    2024年02月01日
    瀏覽(17)
  • vue中使用EasyPlayer播放監(jiān)控視頻HLS,H265、H264

    vue中使用EasyPlayer播放監(jiān)控視頻HLS,H265、H264

    1.使用npm下載依賴 2.將EasyPlayer-lib.min.js文件、EasyPlayer.wasm文件、libDecoder.wasm文件放置到public下 3.創(chuàng)建components,html代碼如下 4.使用props接收數(shù)據(jù) 5.在父組件中引入,傳遞props中的數(shù)據(jù)即可運行即可

    2024年02月03日
    瀏覽(28)
  • 基于WebAssembly無插件解碼H264/H265碼流播放器

    基于WebAssembly無插件解碼H264/H265碼流播放器

    基于WebAssembly無插件解碼H264/H265碼流播放器 之前看到一篇文章:web無插件解碼播放H264/H265(WebAssembly解碼HTML5播放) H.265/HEVC在Web視頻播放的實踐 按照文章思路,已經復現(xiàn)了web端無插件解碼H265碼流。首先說明下我這邊的環(huán)境,框架。 在海思主板上移植了web服務器nginx,用于pc端請

    2024年01月16日
    瀏覽(23)
  • c++高性能264/265實時h5流媒體服務器前后端整體解決方案

    c++高性能264/265實時h5流媒體服務器前后端整體解決方案

    c++高性能264/265實時h5流媒體服務器前后端整體解決方案 下圖展示了前端播放效果。 播放1路264視頻流,4路265視頻流 CPU占用率10%(測試機器上運行著c++服務端和其他工具程序) GPU0占用率17% 1.1 作者測試機器配置 處理器 11th Gen Intel? Core? i7-11800H @ 2.30GHz 2.30 GHz 機帶 RAM 32.0 GB (31.

    2024年02月12日
    瀏覽(22)
  • Android MediaCodec將h264實時視頻流數(shù)據(jù)解碼為yuv,并轉換yuv的顏色格式為nv21

    初始化mediacodec 處理數(shù)據(jù),解碼h264數(shù)據(jù)為yuv格式 這里傳入的是h264格式的實時視頻流數(shù)據(jù)。 處理獲取到的nv21顏色格式的yuv數(shù)據(jù) ?yuv視頻數(shù)據(jù)顏色格式轉換 h264實時視頻流的數(shù)據(jù)來源 寫入h264視頻流到sdcard中 rtsp獲取h264實時視頻流數(shù)據(jù) ?編寫C代碼加載ffmpeg庫 源碼地址 https://gi

    2024年01月17日
    瀏覽(30)
  • Android 修改 SELinux avc 權限的方法

    Android 修改 SELinux avc 權限的方法

    系統(tǒng)版本:Android 11.0???? 平???????? 臺:RK3568 在 Android 系統(tǒng)的開發(fā)及適配過程中,我們常常需要對 SELinux avc? 權限進行修改,以下是我對 SELinux avc? 權限修改總結的方法。 一、驗證功能是否存在 selinux 權限問題 #進入Android終端 adb shell #獲取root權限 su #查看系統(tǒng)當前 s

    2024年02月09日
    瀏覽(29)
  • Unity 安卓(Android)端AVProVideo插件播放不了視頻,屏幕一閃一閃的

    Unity 安卓(Android)端AVProVideo插件播放不了視頻,屏幕一閃一閃的

    編輯器運行沒有問題,但是安卓就有問題,在平板上運行就會報錯: vulkan graphics API is notsupported 說不支持Vulkan圖形API,解決方法:把Vulkan刪除掉

    2024年02月09日
    瀏覽(18)
  • C++版Android實時投屏軟件系統(tǒng)源碼,安卓手機投屏軟件源碼,無需root權限

    C++版Android實時投屏軟件系統(tǒng)源碼,安卓手機投屏軟件源碼,無需root權限

    QtScrcpy 可以通過 USB / 網絡連接Android設備,并進行顯示和控制。無需root權限。 同時支持 GNU/Linux ,Windows 和 MacOS 三大主流桌面平臺。 完整代碼下載地址:C++版Android實時投屏軟件系統(tǒng)源碼 它專注于: 精致 (僅顯示設備屏幕) 性能 (30~60fps) 質量 (1920×1080以上) 低延遲 (35~70ms) 快速啟

    2024年02月05日
    瀏覽(23)
  • HEVC(H.265)視頻壓縮編碼格式與其原理

    HEVC(H.265)視頻壓縮編碼格式與其原理

    本人最近開始研究視頻重編碼的檢測,因此做個筆記記錄一下自己學習的視頻編碼相關知識。視頻編碼的目的是為了壓縮原始視頻,壓縮的主要思路是從空間、時間、編碼、視覺等幾個主要角度去除冗余信息。而H.265(HEVC)則是目前常用的視頻壓縮編碼格式,本文將主要介紹其

    2024年02月05日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包