1
我試圖實施的ffmpeg,將檢索本地視頻(從設備在未來)的緩衝區的自定義讀取功能,然後deocde該緩衝區等。FFMPEG自定義讀取功能讀取所有的數據
所以,這是我讀功能
int IORead(void *opaque, uint8_t *buf, int buf_size)
{
FileReader* datrec = (FileReader*)opaque;
int ret = datrec->Read(buf, buf_size);
return ret;
}
至於的FileReader:
class FileReader {
protected:
int fd;
public:
FileReader(const char *filename){ //, int buf_size){
fd = open(filename, O_RDONLY);
};
~FileReader() {
close(fd);
};
int Read(uint8_t *buf, int buf_size){
int len = read(fd, buf, buf_size);
return len;
};
};
,爲我執行:
FileReader *receiver = new FileReader("/sdcard/clip.ts");
AVFormatContext *avFormatContextPtr = NULL;
this->iobuffer = (unsigned char*) av_malloc(4096 + FF_INPUT_BUFFER_PADDING_SIZE);
avFormatContextPtr = avformat_alloc_context();
avFormatContextPtr->pb = avio_alloc_context(this->iobuffer, 4096, 0, receiver, IORead, NULL, NULL);
avFormatContextPtr->pb->seekable = 0;
int err = avformat_open_input(&avFormatContextPtr, "", NULL, NULL) ;
if(err != 0)
{...}
// Decoding process
{...}
然而,一旦avformat_open_input()
被調用時,讀取功能IORead
被調用,並不斷讀取文件clip.ts
直到它到達其最終才把它退出,並沒有數據到達解碼過程解碼(因爲所有的它被消耗)
我不知道是什麼特別,該代碼
AVFormatContext *avFormatContextPtr = NULL;
int err = avformat_open_input(&avFormatContextPtr, "/sdcard/clip.ts", NULL, NULL) ;
沒有阻止,直到該文件的末尾達到的問題。
我錯過了什麼嗎? 我感謝您的幫助。