• 大小: 1.43MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-06
  • 语言: 其他
  • 标签: ffmpeg  

资源简介

博文:http://blog.csdn.net/i_scream_/article/details/52787222 中的代码。 测试平台:ubuntu16.04 64bit + ffmpeg3 + SDL2.

资源截图

代码片段和文件信息

/*=========================================================================\
* Copyright(C)2016 Chudai.
*
* File name    : audio.c
* Version      : v1.0.0
* Author       : 初代
* Date         : 2016/10/06
* Description  :
* Function list: 1.
*                2.
*                3.
* History      :
\*=========================================================================*/

/*-----------------------------------------------------------*
 * 头文件                                                    *
 *-----------------------------------------------------------*/
#define __STDC_CONSTANT_MACROS      //ffmpeg要求

#include “player.h“
#include “audio.h“

/*======================================================================\
* Author     (作者): i.sshe
* Date       (日期): 2016/10/06
* Others     (其他): 准备audio
\*=======================================================================*/
int prepare_audio(PlayerState *ps)
{

ps->paudio_stream = ps->pformat_ctx->streams[ps->audio_stream_index];
ps->paudio_codec_ctx =  ps->paudio_stream->codec;
ps->paudio_codec = avcodec_find_decoder(ps->paudio_codec_ctx->codec_id);
if (ps->paudio_codec == NULL)
    {
         fprintf(ERR_STREAM “Couldn‘t find audio decoder!!!!!!!\n“);
         return -1;
    }
//初始化AVCondecContext,以及进行一些处理工作。
avcodec_open2(ps->paudio_codec_ctx ps->paudio_codec NULL);

    return 0;
}


/*======================================================================\
* Author     (作者): i.sshe
* Date       (日期): 2016/10/06
* Others     (其他): 播放声音
\*=======================================================================*/
int play_audio(PlayerState *ps)
{
    SDL_AudioSpec      wanted_spec;
//    SDL_AudioSpec      spec;
    wanted_spec.freq      = ps->paudio_codec_ctx->sample_rate;
    wanted_spec.format    = AUDIO_S16SYS;
    wanted_spec.channels  = ps->paudio_codec_ctx->channels;
    wanted_spec.silence   = 0;
    wanted_spec.samples   = 1024;     //
    wanted_spec.callback  = audio_callback;
    wanted_spec.userdata  = ps; // ps->paudio_codec_ctx;

    //打开音频设备
    //运行callback
    if (SDL_OpenAudio(&wanted_spec NULL) < 0)
    {
        fprintf(ERR_STREAM “Couldn‘t open audio device\n“);
        return -1;
    }

    SDL_PauseAudio(0);

    return 0;
}


/*======================================================================\
* Author     (作者): i.sshe
* Date       (日期): 2016/10/06
* Others     (其他): 音频回调函数,打开设备的时候会开线程调用
\*=======================================================================*/
void audio_callback(void *userdata uint8_t *stream int len)
{
    PlayerState *ps = (PlayerState *)userdata;
    int  send_data_size = 0;
    int  audio_size = 0;
int  flag = 0;
SDL_Event  event;

    SDL_memset(stream 0 len);
    
     //操作
 switch(ps->player_state)
     {
         case -1:   //退出
           printf(“退出音频线程\n“);
             break;
         case 0:
             break;
         case 1:    //暂停
           printf(“audio 收到暂停\n“);
             break;
         default:
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         586  2016-10-09 21:45  Makefile
     文件        1070  2016-10-10 21:56  Readme.md
     文件        8432  2016-10-11 00:15  audio.c
     文件        4925  2016-10-10 22:19  audio.h
     文件     1507328  2015-02-16 13:41  naxienian.mp4
     文件        4516  2016-10-11 13:35  packet_queue.c
     文件        4475  2016-10-11 13:35  packet_queue.h
     文件        6471  2016-10-11 00:12  player.h
     文件        8168  2016-10-11 00:28  player_v1.7.c
     文件        2188  2016-10-11 13:34  seek_about.c
     文件        2326  2016-10-11 13:34  seek_about.h
     文件       10324  2016-10-11 00:14  video.c
     文件        5525  2016-10-10 22:19  video.h
     文件        2627  2016-10-05 10:24  wrap_base.c
     文件        3003  2016-10-03 15:15  wrap_base.h

评论

共有 条评论