解決h264readInt()值太大 以及 SPS和PPS的獲取
再利用mediarecorder錄製視訊過程中,首先錄製一段鍾視訊資料後,將資料流傳入StsBox物件,呼叫getMdat()即可得到mdat的合適的開始位置和結束位置
............ try { fis = receiver.getInputStream(); Thread.currentThread().sleep(500); } catch (IOException e2) { e2.printStackTrace(); return; } catch (InterruptedException e) { e.printStackTrace(); } releaseVideo(); StsdBox stsdBox = new StsdBox(fis); // stsdBox.saveStsBoxHead(context); stsdBox.getMdat(); Log.i(TAG, "mdat: " + (stsdBox.getEndMdat() - stsdBox.getStartMdat())); ............
程式碼:
public class StsdBox { private byte[] buffer = new byte[1024 * 64]; private int spsStartPos; private int spsLength; private int num, number = 0; private int frame_size = 1024; public StsdBox(InputStream fis) { initByte(fis); } private void initByte(InputStream fis) { while (true) { try { if(number >= buffer.length) { break; } num = fis.read(buffer, number, frame_size); number += num; if (num < frame_size) { break; } } catch (IOException e) { e.printStackTrace(); Log.i("number: ", "" + number); break; } } } private int startMdat = 0; private int endMdat = 0; public int getStartMdat() { return startMdat; } public void setStartMdat(int startMdat) { this.startMdat = startMdat; } public int getEndMdat() { return endMdat; } public void setEndMdat(int endMdat) { this.endMdat = endMdat; } public void getMdat() { for(int im=0; im < buffer.length; im++) { if (buffer[im] == 'm' && buffer[im + 1] == 'd' && buffer[im + 2] == 'a' && buffer[im + 3] == 't') { if(im > 0 && buffer[im - 1] == '?') { startMdat = im - 4; } else { startMdat = im; } if(im < (buffer.length - 1) && buffer[im + 5] == '?') { if(buffer[im + 9] == '?') { endMdat = im + 12; } else { endMdat = im + 8; } } else { endMdat = im + 4; } break; } } } private int getAvcC() { byte[] avcC = new byte[] { 0x61, 0x76, 0x63, 0x43 }; int avcRecord = 0; for (int ix = 0; ix < buffer.length; ++ix) { if (buffer[ix] == avcC[0] && buffer[ix + 1] == avcC[1] && buffer[ix + 2] == avcC[2] && buffer[ix + 3] == avcC[3]) { avcRecord = ix + 4; break; } } if (0 == avcRecord) { System.out.println(R.string.no_found_avcc); avcRecord = 0; } return avcRecord; } public byte[] findSPS() { if(getAvcC() == 0) { return null; } spsStartPos = getAvcC() + 6; byte[] spsbt = new byte[] { buffer[spsStartPos], buffer[spsStartPos + 1] }; spsLength = CalculateUtil.bytes2Int(spsbt); byte[] h264sps = new byte[spsLength]; // ���2���ֽڵ� sequenceParameterSetLength spsStartPos += 2; System.arraycopy(buffer, spsStartPos, h264sps, 0, spsLength); printResult("SPS", h264sps, spsLength); return h264sps; } public byte[] findPPS() { if(getAvcC() == 0) { return null; } int ppsStartPos = spsStartPos + spsLength + 1; byte[] ppsbt = new byte[] { buffer[ppsStartPos], buffer[ppsStartPos + 1] }; int ppsLength = CalculateUtil.bytes2Int(ppsbt); byte[] h264pps = new byte[ppsLength]; ppsStartPos += 2; System.arraycopy(buffer, ppsStartPos, h264pps, 0, ppsLength); printResult("PPS", h264pps, ppsLength); return h264pps; } private void printResult(String type, byte[] bt, int len) { System.out.println(type + "����Ϊ��" + len); String cont = type + "������Ϊ��"; System.out.print(cont); for (int ix = 0; ix < len; ++ix) { System.out.printf("%02x ", bt[ix]); } System.out.println("\n----------"); } }
相關推薦
解決h264readInt()值太大 以及 SPS和PPS的獲取
再利用mediarecorder錄製視訊過程中,首先錄製一段鍾視訊資料後,將資料流傳入StsBox物件,呼叫getMdat()即可得到mdat的合適的開始位置和結束位置 ............ try { fis = receiver.getInput
ZTree id值太大,ZTree沒有生成樹,ZTree的id值過大
生成 如何解決 span image .cn 描述 今天 屬性 bsp ZTree id值太大,ZTree沒有生成樹,ZTree的id值過大 >>>>>>>>>>>>>>>>&
ES之值類型以及堆和棧
以及 span arc nic ont 一個 永遠 cti 方式 ES的數據類型: 原始類型(值存在棧內存中): Number、String Boolean、undefined、null charAt(inde
js 值太大自動轉換bignumber
大值轉換 function toNonExponential(num) { var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/); return num.toFixed(Mat
資料溢位-int值太大變成負數
在解析硬體傳過來的訊號時,因為在壓力測試我就想記錄一下一共傳了多少包,下午再去看的時候,看列印日誌竟然打印出了負數,一臉懵逼。我還以為是出什麼想不到的bug了,後面我寫了段測試程式碼如下 int number = 1;
oracle 11g 匯入表時 提示 ***值太大拒絕執行的錯誤
經查詢,這個是由於字符集設定的不是gbk的,導致匯入時遇到中文字元出現的問題, 1.開啟cmd 2.輸入sqlplus 3.登入管理員賬號:使用者名稱/密碼 as sysdba 4.檢視版本號:select userenv('language') from dual;
例7.9 輸入10個數,要求輸出其中值最大的元素和該數是第幾個數。
Ø解題思路: 定義陣列a,用來存放10個數 設計函式max,用來求兩個數中的大者 在主函式中定義變數m,初值為a[0],每次呼叫max函式後的返回值存放在m中 用“打擂臺”演算法,依次將陣列元素a[1]到a[9]與m比較,最後得到的m值就是10個數中的最大者#include
mysql5.6.20配置,解決佔用記憶體太大問題
vps的記憶體為512M,安裝好nginx,php等啟動起來,mysql死活啟動不起來看了日誌只看到對應pid被結束了,後跟蹤看發現是記憶體不足被killed; 調整my.cnf 引數,重新配置(系統預設配置太高直接佔用400M記憶體,小玩家玩不起呢)即可 perfor
JQuery物件與DOM物件相互轉換以及JS和JQyery獲取元素當前值的方法
<!DOCTYPE html> <html> <head> <title>JQuery Object and DOM Object</title> <script type="text/javascrip
jsp解決中文查詢關鍵詞亂碼以及表單method獲取方式的使用問題
最近遇到一個問題:輸入查詢關鍵字,第一次能查出資料,第二次就查不出了,請看下圖: 第一次查詢: 第二次查詢: 可能有些大佬已經看出區別了:第一次查詢的路徑為:http://mylover:8080/CloudSpace/result_search.jsp?keyWord=
H.264---SPS和PPS
轉自:https://zhuanlan.zhihu.com/p/27896239 1 SPS和PPS從何處而來? 2 SPS和PPS中的每個引數起什麼作用? 3 如何解析SDP中包含的H.264的SPS和PPS串? 1 客戶端抓包 在做客戶端視訊解碼時,一般都會使用Wireshark抓
DSS中的RTP打包傳輸h264時獲取h264的sps和pps資訊
static char base64DecodeTable[256]; static void initBase64DecodeTable() { int i; for (i = 0; i < 256; ++i) base64DecodeTable[i] = (char)0x80;
從MP4頭資訊中提取sps和pps資料
一、MP4格式基本概念 MP4格式對應標準MPEG-4標準(ISO/IEC14496) 二、MP4封裝格式核心概念 1 MP4封裝格式對應標準為 ISO/IEC 14496-12(資訊科技 視聽物件編碼的第12部分: ISO 基本媒體檔案格式/Informati
H.264中的SPS和PPS
H.264碼流第一個 NALU是 SPS(序列引數集Sequence Parameter Set) 對應H264標準文件 7.3.2.1 序列引數集的語法進行解析 H.264碼流第二個 NALU是 PPS(影象引數集Picture Parameter Se
解析MP4檔案中的sps和pps
一、MP4格式基本概念 MP4格式對應標準MPEG-4標準(ISO/IEC14496) 二、MP4封裝格式核心概念 1 MP4封裝格式對應標準為 ISO/IEC 14496-12(資訊科技 視聽物件編碼的第12部分: ISO 基本媒體檔案格式/Informat
h264手動新增sps和pps到AVCodecContext->extradata
最近編碼的時候發現生成的視訊不能用Windows Media Player等系統自帶的播放器播放,也沒有縮圖。找了很久,最後才發現在avcodec_open2之前新增一行程式碼就行了:codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HE
live555中是如何獲取SPS和PPS的
關於這個問題,困擾了很長時間,主要是為了獲取這2個東東,設計到的類太多了,首先的理清設計到了哪些類,其次得把這些類的依屬關係給理清,下面就讓咱們一步一步的來分析: SPS和PPS的獲取是在伺服器接受到了Descripute命令後進行的,在看下面的內容之前請大家先看上篇文章:
MP4檔案中h264的 SPS、PPS獲取
【流媒體】H264—MP4格式及在MP4檔案中提取H264的SPS、PPS及碼流 SkySeraph Apr 1st 2012 Email:[email protected].com 一、MP4格式基本概念 MP4格式對應標準MPEG-4標準(ISO/IEC14496) 二、MP4封裝格式核
【Cuckoo】add_path()失敗 和 report.json太大解決辦法
add_path()失敗 >>>from cuckoo.core.database import Database >>>db=Database() >>
Id class 變量 的賦值規範 大駝峰和小駝峰 代碼的格式和註釋的類型
id classde 變量 的賦值規範 大駝峰和小駝峰 代碼的格式和註釋的類型Id classde 變量 的賦值規範 大駝峰和小駝峰 代碼的格式和註釋的類型 其實我認為這是非常重要的,只要是個開發人員都會寫代碼,但是做到這些的卻不容易,現在公司看中的是合作能力、溝通能力、和編碼風格,這也是開發人員