Как транслировать аудио с весенней загрузкой - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу, чтобы пользователь мог воспроизводить звук.Моя реализация отлично работает с Firefox.На Safari звук не воспроизводится.Я проверил, что аудио контроль работает в сафари с другими сайтами.Итак, я предполагаю, что мне придется что-то изменить в моем контроллере?

Контроллер:

@RequestMapping(value = "/sound/character/get/{characterId}", method = RequestMethod.GET, produces = {
            MediaType.APPLICATION_OCTET_STREAM_VALUE })
        public ResponseEntity playAudio(HttpServletRequest request,HttpServletResponse response, @PathVariable("characterId") int characterId) throws FileNotFoundException{

        logger.debug("[downloadRecipientFile]");

        de.tki.chinese.entity.Character character = characterRepository.findById(characterId);
        String file = UPLOADED_FOLDER + character.getSoundFile();

        long length = new File(file).length();


        InputStreamResource inputStreamResource = new InputStreamResource( new FileInputStream(file));
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentLength(length);
        httpHeaders.setCacheControl(CacheControl.noCache().getHeaderValue());
        return new ResponseEntity(inputStreamResource, httpHeaders, HttpStatus.OK);
    }

Просмотр

        <audio id="voice" controls="">
            <source src="/sound/character/get/2">
        </audio>

Firefox (работает нормально): Firefox (works fine)

Safari (не работает): Safari (not working!)

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Другое решение (и для меня легко реализовать с незначительными изменениями в моем существующем коде) здесь:

https://github.com/spring-projects/spring-framework/blob/v4.2.0.RC1/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java#L463

0 голосов
/ 07 февраля 2019

Большинству игроков понадобится контроллер, поддерживающий частичные запросы контента (или байтовые диапазоны).

Это может быть немного сложно реализовать, поэтому я бы предложил использовать что-то вроде Spring Community Project Spring Content , тогда вам не нужно беспокоиться о том, как реализовать контроллер вообще.Концепции и модель программирования очень похожи на Spring Data, которые, по внешнему виду, вы уже используете.

Если вы используете Spring Boot (дайте мне знать, если это не так), то это будет выглядеть примерно так:

pom.xml

<!-- Java API -->
<dependency>
    <groupId>com.github.paulcwarren</groupId>
    <artifactId>content-fs-spring-boot-starter</artifactId>
    <version>0.6.0</version>
</dependency>
<!-- REST API -->
<dependency>
    <groupId>com.github.paulcwarren</groupId>
    <artifactId>spring-content-rest-boot-starter</artifactId>
    <version>0.6.0</version>
</dependency>

SpringBootApplication.java

@SpringBootApplication
public class YourSpringBootApplication {

  public static void main(String[] args) {
    SpringApplication.run(YourSpringBootApplication.class, args);
  }

  @Configuration
  @EnableFilesystemStores
  public static class StorageConfig {
    File filesystemRoot() {
        return new File("/path/to/your/sounds");
    }

    @Bean
    public FileSystemResourceLoader fsResourceLoader() throws Exception {
      return new FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
    }
  }

  @StoreRestResource(path="characterSounds")
  public interface SoundsContentStore extends ContentStore<UUUID,String> {
    //
  }
}

Charater.java

public class Character {

    @Id
    @GeneratedValue
    private Long id;

    ...other existing fields...

    @ContentId
    private UUID contentId;

    @ContentLength
    private Long contnetLength;

    @MimeType
    private String mimeType;
} 

Это все, что вам нужно для создания на основе RESTаудио сервис на /characterSounds с поддержкой потоковой передачи.Он на самом деле также поддерживает полную функциональность CRUD;Создайте == POST, прочитайте == GET (включите необходимую поддержку байтового диапазона), обновите == PUT, удалите == УДАЛИТЬ в случае, если это будет полезно для вас.Загруженные звуки будут сохранены в "/ path / to / your / sounds".

Итак ...

GET /characterSounds/{characterId}

вернет частичный ответ с контентом, и он должен воспроизводиться правильно для большинства, если не для всех игроков (включая поиск вперед и назад).

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...