导航:首页 > 操作系统 > androidffmpegsdl

androidffmpegsdl

发布时间:2023-06-18 10:49:45

㈠ 如何在android用FFmpeg+SDL2.0解码显示图像

创建一个VideoPicture结构体用来保存解码出来的图森败像春隐。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* SDL_Lesson.c
*
* Created on: Aug 12, 2014
* Author: clarck
*/
#include <jni.h>
#include <android/native_window_jni.h>
#include "SDL.h"
#include "SDL_thread.h"
#include "SDL_events.h"
#include "../include/logger.h"
#include "../ffmpeg/include/libavcodec/avcodec.h"
#include "../ffmpeg/include/libavformat/avformat.h"
#include "../ffmpeg/include/libavutil/pixfmt.h"
#include "../ffmpeg/扒春厅include/libswscale/swscale.h"
#include "../ffmpeg/include/libswresample/swresample.h"

#define SDL_AUDIO_BUFFER_SIZE 1024

#define MAX_AUDIO_SIZE (5 * 16 * 1024)
#define MAX_VIDEO_SIZE (5 * 256 * 1024)

#define FF_ALLOC_EVENT (SDL_USEREVENT)
#define FF_REFRESH_EVENT (SDL_USEREVENT + 1)
#define FF_QUIT_EVENT (SDL_USEREVENT + 2)

#define VIDEO_PICTURE_QUEUE_SIZE 1
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio

typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt;
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
} PacketQueue;

typedef struct VideoPicture {
SDL_Window *screen;
SDL_Renderer *renderer;
SDL_Texture *bmp;

AVFrame* rawdata;
int width, height; /*source height & width*/
int allocated;
} VideoPicture;

typedef struct VideoState {
char filename[1024];
AVFormatContext *ic;
int videoStream, audioStream;
AVStream *audio_st;
AVFrame *audio_frame;
PacketQueue audioq;
unsigned int audio_buf_size;
unsigned int audio_buf_index;
AVPacket audio_pkt;
uint8_t *audio_pkt_data;
int audio_pkt_size;
uint8_t *audio_buf;
DECLARE_ALIGNED(16,uint8_t,audio_buf2) [AVCODEC_MAX_AUDIO_FRAME_SIZE * 4];
enum AVSampleFormat audio_src_fmt;
enum AVSampleFormat audio_tgt_fmt;
int audio_src_channels;
int audio_tgt_channels;
int64_t audio_src_channel_layout;
int64_t audio_tgt_channel_layout;
int audio_src_freq;
int audio_tgt_freq;
struct SwrContext *swr_ctx;

AVStream *video_st;
PacketQueue videoq;

VideoPicture pictq[VIDEO_PICTURE_QUEUE_SIZE];
int pictq_size, pictq_rindex, pictq_windex;
SDL_mutex *pictq_mutex;
SDL_cond *pictq_cond;

SDL_Thread *parse_tid;
SDL_Thread *audio_tid;
SDL_Thread *video_tid;

AVIOContext *io_ctx;
struct SwsContext *sws_ctx;

int quit;
} VideoState;

VideoState *global_video_state;

㈡ 如何在Android用FFmpeg+SDL2.0解码声音

一、创建一个VideoPicture结构体用来保存解码出来的图像;
二、添加数据队列的初始化、添加以及读取的函数;
三、audio_decode_frame():解码音频;
四、audio_callback(): 回调函数,向SDL缓冲区填充数据;
五、创建刷新相关的函数;
六、添加显示函数;
七、分配显示输出内存空间;
八、解码线程,将解码器,建立音频线,保存重要信息到数据结构中;
九、编写Main函数用来调用解码线程。
知识点延伸:
FFmpeg是一个开源跨的和音频流方案,属于自由,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音的完整解决方案。它包含了非常先进的音频/编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。FFmpeg在Linux下开发,但它同样也可以在其它操作系统环境中编译运行。
SDL2.0(Simple DirectMedia Layer)是一套开放源代码的跨多媒体开发库,使用C语言写成。SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。SDL内置了调用OpenGL的函数。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个(Linux、Windows、Mac OS X等)的应用。

阅读全文

与androidffmpegsdl相关的资料

热点内容
叶子java版命令方块 浏览:837
阿里服务器有什么作用 浏览:749
java程序开发范例 浏览:888
java17formac下载 浏览:614
rrc是什么单片机 浏览:530
linux默认网关设置 浏览:679
java函数return 浏览:25
郑州app积分商城哪里好 浏览:610
7za命令解压zip 浏览:906
硬盘加密无法进入系统 浏览:560
四叶花算法 浏览:741
宝宝滤镜app哪里下载 浏览:1002
java保护代码 浏览:806
游戏海外服务器什么意思 浏览:568
快手网红程序员排名 浏览:99
首先会通过什么寻找服务器的ip地址 浏览:199
网页代码加密解码 浏览:285
wyks1ms文件夹 浏览:93
什么app可以看柯南高清 浏览:425
加密的盘文件恢复 浏览:22